Beispiel #1
0
 def sync_call(self, apiname, args={}, timeout=5):
     """ 给定参数args,同步调用RPCServer的apiname服务,
     返回该服务的处理结果。如果超时,返回None。
     
     Args:
         apiname (str): 服务API名称。
         args (dict): 给服务API的参数。
         handler (function): 回调函数。
     """
     log.debug('RPCClient [%s] sync_call: %s' % (self._name, apiname))
     if not isinstance(args, dict):
         self._timeout = 0
         self._sync_ret = None
         raise InvalidRPCClientArguments(argtype=type(args))
     self.rid += 1
     args['apiname'] = apiname
     args['rid'] = self.rid
     with self._sync_call_time_lock:
         self._sync_call_time = datetime.now()
     self._timeout = timeout
     with self._handlers_lock:
         self._handlers[self.rid] = None  #
     self._event_engine.emit(Event(self.EVENT_FROM_CLIENT, args))
     self._waiting_server_data()
     ret = self._sync_ret
     #self._sync_ret = None
     return ret
Beispiel #2
0
 def call(self, apiname, args, handler):
     if not isinstance(args, dict):
         raise InvalidRPCClientArguments(argtype=type(args))
     assert (not handler == None)
     self.rid += 1
     args['apiname'] = apiname
     args['rid'] = self.rid
     self._event_engine.emit(Event(self.EVENT_CLIENT, args))
     with self._handlers_lock:
         self._handlers[self.rid] = handler
Beispiel #3
0
 def sync_call(self, apiname, args, timeout=10):
     if not isinstance(args, dict):
         self._timeout = 0
         self._sync_ret = None
         raise InvalidRPCClientArguments(argtype=type(args))
     self.rid += 1
     args['apiname'] = apiname
     args['rid'] = self.rid
     with self._sync_call_time_lock:
         self._sync_call_time = datetime.now()
     self._timeout = timeout
     self._event_engine.emit(Event(self.EVENT_CLIENT, args))
     with self._handlers_lock:
         self._handlers[self.rid] = None
     self._waiting_server_data()
     ret = self._sync_ret
     self._sync_ret = None
     return ret
Beispiel #4
0
 def call(self, apiname, args, handler):
     """ 给定参数args,异步调用RPCServer的apiname服务,
     返回结果做为回调函数handler的参数。
     
     Args:
         apiname (str): 服务API名称。
         args (dict): 给服务API的参数。
         handler (function): 回调函数。
     """
     if not isinstance(args, dict):
         raise InvalidRPCClientArguments(argtype=type(args))
     assert (not handler == None)
     self.rid += 1
     args['apiname'] = apiname
     args['rid'] = self.rid
     self._event_engine.emit(Event(self.EVENT_CLIENT, args))
     with self._handlers_lock:
         self._handlers[self.rid] = handler