class BelliteJsonRpcApi
@abstract This is common interface of Bellite
json-rpc API
Public Class Methods
Constructor. Connects to server with cred credentials @param [String] cred Credentials in format: ‘host:port/token’;
# File lib/bellite.rb, line 84 def initialize(cred=nil) connect(cred) end
Public Instance Methods
@abstract Connecting to JSON-RPC server @param [String] cred Credentials in format: ‘host:port/token’; @param [Future] f_ready Ready future instance
# File lib/bellite.rb, line 211 def _connect(cred, f_ready) raise NotImplementedError, "Subclass Responsibility" end
@abstract Invokes method @param [String] method @param [Hash] params Something JSONable to pass as ethod params
# File lib/bellite.rb, line 218 def _invoke(method, params=nil) raise NotImplementedError, "Subclass Responsibility" end
Authenticates with server using token @param [String] token Token to access server @return {Promise}
# File lib/bellite.rb, line 91 def auth(token) return _invoke('auth', [token]) end
binds Event on some evtType
@param [Fixnum] selfId internal id @param [String] evtType type of event @param [Fixnum] res @param [Hash] ctx - context, passed to event handler @return [Promise]
# File lib/bellite.rb, line 148 def bindEvent(selfId=0, evtType='*', res = -1, ctx=false) if not selfId selfId = 0 end return _invoke('bindEvent',[selfId, evtType, res, ctx]) end
Connecting to JSON-RPC server
@param [String] host Host @param [Fixnum] port Port
# File lib/bellite.rb, line 198 def connect(cred=nil) cred = findCredentials(cred) if cred f_ready = deferred() @ready = f_ready.promise _connect(cred, f_ready) return @ready end end
Finds credentials in environment variable BELLITE_SERVER or in passed parameter
@param [String] cred server credentials in format host:port/token @return [Hash] with credentials or false if failed
# File lib/bellite.rb, line 170 def findCredentials(cred=false) if not cred cred = ENV['BELLITE_SERVER'] if not cred cred = '127.0.0.1:3099/bellite-demo-host'; $stderr.puts 'BELLITE_SERVER environment variable not found, using "'+cred+'"' end elsif not cred.instance_of String return cred end begin host, token = cred.split('/', 2) host, port = host.split(':', 2) return ({"credentials" => cred, "token" => token, "host" => host, "port" => Integer(port)}) rescue return false end end
perform JSON-RPC request @param [String] cmd command @param [Array] *args Variable-length arguments, passed with cmd. :key => value ruby Hash parameter sugar also works @return [Promise]
# File lib/bellite.rb, line 122 def perform(selfId, cmd, *args) if args.size > 1 args.each do |arg| if arg.instance_of(Hash) raise ArgumentError, "Cannot specify both positional and keyword arguments" end end end if args.size == 1 and (args[0].instance_of? Hash or args[0].instance_of? Array) args = args[0] end if args == [] args = nil end if not selfId selfId = 0 end return _invoke('perform',[selfId, cmd, args]) end
Ping server @return {Promise}
# File lib/bellite.rb, line 103 def ping return _invoke('ping') end
Return promise for ready event
# File lib/bellite.rb, line 191 def ready() return @ready end
invokes respondsTo @param [Fixnum] selfId Id for internal use (events, for example) @param [Hash] cmd - some data, which can be encoded as JSON to pass to server @return {Promise}
# File lib/bellite.rb, line 111 def respondsTo(selfId, cmd) if not selfId selfId = 0 end return _invoke('respondsTo', [selfId, cmd]) end
Unbins Event on some evtType
@param [Fixnum] selfId internal id @param [String] evtType type of event @return [Promise]
# File lib/bellite.rb, line 159 def unbindEvent(selfId, evtType=false) if not selfId selfId = 0 end return _invoke('unbindEvent',[selfId, evtType]) end
Server version @return {Promise}
# File lib/bellite.rb, line 97 def version return _invoke('version') end