MCPcopy
hub / github.com/AirtestProject/Poco / StdRpcEndpointController

Class StdRpcEndpointController

poco/sdk/std/rpc/controller.py:13–54  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11
12
13class StdRpcEndpointController(object):
14 def __init__(self, transport, reactor):
15 super(StdRpcEndpointController, self).__init__()
16 self.transport = transport
17 self.reactor = reactor
18
19 def deserialize(self, data):
20 if six.PY3 and not isinstance(data, six.text_type):
21 data = data.decode('utf-8')
22 return json.loads(data)
23
24 def serialize(self, packet):
25 return json.dumps(packet)
26
27 def serve_forever(self):
28 while True:
29 cid, data = self.transport.update()
30 if data:
31 packet = self.deserialize(data)
32 if 'method' in packet:
33 result = self.reactor.handle_request(packet)
34 sres = self.serialize(result)
35 self.transport.send(cid, sres)
36 else:
37 self.reactor.handle_response(packet)
38
39 def call(self, method, *args, **kwargs):
40 req = self.reactor.build_request(method, *args, **kwargs)
41 rid = req['id']
42 sreq = self.serialize(req)
43 self.transport.send(None, sreq)
44 while True:
45 time.sleep(0.004)
46 res = self.reactor.get_result(rid)
47 if res is not None:
48 if 'result' in res:
49 return res['result']
50
51 if 'error' in res:
52 raise RpcRemoteException(res['error']['message'])
53
54 raise RuntimeError('Invalid response from {}. Got {}'.format(self.transport, res))

Callers 3

runMethod · 0.90
runMethod · 0.90
test_broker.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected