def run(addr, schema, secret): try: channel = grpc.insecure_channel(addr) stub = pbx.NodeStub(channel) # Call the server stream = stub.MessageLoop(gen_message(schema, secret)) # Read server responses for msg in stream: if msg.HasField("ctrl"): # Run code on command completion func = onCompletion.get(msg.ctrl.id) if func != None: del onCompletion[msg.ctrl.id] if msg.ctrl.code >= 200 and msg.ctrl.code < 400: func(msg.ctrl.params) stdoutln("\r" + str(msg.ctrl.code) + " " + msg.ctrl.text) elif msg.HasField("data"): stdoutln("\rFrom: " + msg.data.from_user_id + ":\n") stdoutln(json.loads(msg.data.content)) elif msg.HasField("pres"): pass elif msg.HasField("info"): user = getattr(msg.info, 'from') stdoutln("\rMessage #" + str(msg.info.seq) + " " + msg.info.what + " by " + user + "; topic=" + msg.info.topic + "(" + msg.topic + ")") else: stdoutln("\rMessage type not handled", msg) except grpc._channel._Rendezvous as err: print(err) channel.close() if input_thread != None: input_thread.join(0.3)
def run(addr, schema, secret): channel = grpc.insecure_channel(addr) stub = pbx.NodeStub(channel) # Call the server stream = stub.MessageLoop(gen_message(schema, secret)) try: # Read server responses for msg in stream: if msg.HasField("ctrl"): # Run code on command completion func = onCompletion.get(msg.ctrl.id) if func != None: del onCompletion[msg.ctrl.id] if msg.ctrl.code >= 200 and msg.ctrl.code < 400: func(msg.ctrl.params) stdoutln(str(msg.ctrl.code) + " " + msg.ctrl.text) elif msg.HasField("data"): stdoutln("\nFrom: " + msg.data.from_user_id + ":\n") stdoutln(json.loads(msg.data.content) + "\n") elif msg.HasField("pres"): pass else: stdoutln("Message type not handled", msg) except grpc._channel._Rendezvous as err: stdoutln(err)
def init_client(addr, schema, secret, cookie_file_name): print("Connecting to server at", addr) channel = grpc.insecure_channel(addr) stub = pbx.NodeStub(channel) # Call the server stream = stub.MessageLoop(client_generate()) # Session initialization sequence: {hi}, {login}, {sub topic='me'} client_post(hello()) client_post(login(cookie_file_name, schema, secret)) client_post(subscribe('me')) return stream
def init_client(addr, schema, secret, cookie_file_name, secure, ssl_host): log("Connecting to", "secure" if secure else "", "server at", addr, "SNI="+ssl_host if ssl_host else "") channel = None if secure: opts = (('grpc.ssl_target_name_override', ssl_host),) if ssl_host else None channel = grpc.secure_channel(addr, grpc.ssl_channel_credentials(), opts) else: channel = grpc.insecure_channel(addr) # Call the server stream = pbx.NodeStub(channel).MessageLoop(client_generate()) # Session initialization sequence: {hi}, {login}, {sub topic='me'} client_post(hello()) client_post(login(cookie_file_name, schema, secret)) client_post(subscribe('me')) return stream
def run(args, schema, secret): try: if tn_globals.IsInteractive: tn_globals.Prompt = PromptSession() # Create secure channel with default credentials. channel = None if args.ssl: opts = (('grpc.ssl_target_name_override', args.ssl_host),) if args.ssl_host else None channel = grpc.secure_channel(args.host, grpc.ssl_channel_credentials(), opts) else: channel = grpc.insecure_channel(args.host) # Call the server stream = pbx.NodeStub(channel).MessageLoop(gen_message(schema, secret, args)) # Read server responses for msg in stream: if tn_globals.Verbose: stdoutln("\r<= " + to_json(msg)) if msg.HasField("ctrl"): handle_ctrl(msg.ctrl) elif msg.HasField("meta"): what = [] if len(msg.meta.sub) > 0: what.append("sub") if msg.meta.HasField("desc"): what.append("desc") if msg.meta.HasField("del"): what.append("del") if len(msg.meta.tags) > 0: what.append("tags") stdoutln("\r<= meta " + ",".join(what) + " " + msg.meta.topic) if tn_globals.WaitingFor and tn_globals.WaitingFor.await_id == msg.meta.id: if 'varname' in tn_globals.WaitingFor: tn_globals.Variables[tn_globals.WaitingFor.varname] = msg.meta tn_globals.WaitingFor = None elif msg.HasField("data"): stdoutln("\n\rFrom: " + msg.data.from_user_id) stdoutln("Topic: " + msg.data.topic) stdoutln("Seq: " + str(msg.data.seq_id)) if msg.data.head: stdoutln("Headers:") for key in msg.data.head: stdoutln("\t" + key + ": "+str(msg.data.head[key])) stdoutln(json.loads(msg.data.content)) elif msg.HasField("pres"): # 'ON', 'OFF', 'UA', 'UPD', 'GONE', 'ACS', 'TERM', 'MSG', 'READ', 'RECV', 'DEL', 'TAGS' what = pb.ServerPres.What.Name(msg.pres.what) stdoutln("\r<= pres " + what + " " + msg.pres.topic) elif msg.HasField("info"): switcher = { pb.READ: 'READ', pb.RECV: 'RECV', pb.KP: 'KP' } stdoutln("\rMessage #" + str(msg.info.seq_id) + " " + switcher.get(msg.info.what, "unknown") + " by " + msg.info.from_user_id + "; topic=" + msg.info.topic + " (" + msg.topic + ")") else: stdoutln("\rMessage type not handled" + str(msg)) except grpc.RpcError as err: # print(err) printerr("gRPC failed with {0}: {1}".format(err.code(), err.details())) except Exception as ex: printerr("Request failed: {0}".format(ex)) # print(traceback.format_exc()) finally: printout('Shutting down...') channel.close() if tn_globals.InputThread != None: tn_globals.InputThread.join(0.3)
def run(args, schema, secret): global WaitingFor global Variables try: # Create secure channel with default credentials. channel = None if args.ssl: opts = (('grpc.ssl_target_name_override', args.ssl_host), ) if args.ssl_host else None channel = grpc.secure_channel(args.host, grpc.ssl_channel_credentials(), opts) else: channel = grpc.insecure_channel(args.host) # Call the server stream = pbx.NodeStub(channel).MessageLoop( gen_message(schema, secret, args)) # Read server responses for msg in stream: if msg.HasField("ctrl"): handle_ctrl(msg.ctrl) elif msg.HasField("meta"): what = [] if len(msg.meta.sub) > 0: what.append("sub") if msg.meta.HasField("desc"): what.append("desc") if msg.meta.HasField("del"): what.append("del") if len(msg.meta.tags) > 0: what.append("tags") stdoutln("\r<= meta " + ",".join(what) + " " + msg.meta.topic) if WaitingFor and WaitingFor.await_id == msg.meta.id: if 'varname' in WaitingFor: Variables[WaitingFor.varname] = msg.meta WaitingFor = None elif msg.HasField("data"): stdoutln("\n\rFrom: " + msg.data.from_user_id) stdoutln("Topic: " + msg.data.topic) stdoutln("Seq: " + str(msg.data.seq_id)) if msg.data.head: stdoutln("Headers:") for key in msg.data.head: stdoutln("\t" + key + ": " + str(msg.data.head[key])) stdoutln(json.loads(msg.data.content)) elif msg.HasField("pres"): pass elif msg.HasField("info"): what = "unknown" if msg.info.what == pb.READ: what = "read" elif msg.info.what == pb.RECV: what = "recv" elif msg.info.what == pb.KP: what = "kp" stdoutln("\rMessage #" + str(msg.info.seq_id) + " " + what + " by " + msg.info.from_user_id + "; topic=" + msg.info.topic + " (" + msg.topic + ")") else: stdoutln("\rMessage type not handled" + str(msg)) except grpc.RpcError as err: # print(err) printerr("gRPC failed with {0}: {1}".format(err.code(), err.details())) except Exception as ex: printerr("Request failed: {0}".format(ex)) # print(traceback.format_exc()) finally: printout('Shutting down...') channel.close() if InputThread != None: InputThread.join(0.3)