def process(self, input_line, caller=None): i = json.loads(input_line) cmd = i["cmd"] data = i["data"] if cmd == "send" or cmd == "s": self.send(json.dumps({"cmd": "MSG", "data": data})) elif cmd == "_end_": self.shutdown() os._exit(0) elif cmd == "disconnected": if isinstance(caller, type(None)): self.shutdown() os._exit(0) else: print "App Dissconnected" elif cmd == "parse_module" or cmd == "pm": print cStub.parse_module(data) elif cmd == "send_file" or cmd == "sf": self.send_file(data) elif cmd == "check_file" or cmd == "cf": self.check_file(data) elif cmd == "reg_module" or cmd == "rm": self.reg_module(data) mod = {os.path.basename(data): data} if "reg_mods" in self.config: self.config["reg_mod"][os.path.basename(data)] = data else: self.config["reg_mod"] = mod elif cmd == "save_config" or cmd == "sc": cStub.save_settings(data, self.config) print "config saved" elif cmd == "RPC_REQUEST": d = json.loads(data) RPC_ID = d["RPC_ID"] self.RPC_CALLS[RPC_ID] = caller # {'source':caller,'result':None} self.send(json.dumps({"cmd": "RPC_CALL", "data": data})) elif cmd == "RPC_RESULT" or cmd == "RPC_EXCEPTION": d = json.loads(data) source = self.RPC_CALLS[d["RPC_ID"]] source.send(data) if cmd == "RPC_RESULT": print "rpc result back", d["RPC_RESULT"] elif cmd == "RPC_EXCEPTION": print "Exception has happened", d["RPC_EXCEPTION"] #################### ##################### elif cmd == "MSG": print data elif cmd == "NAME_ERROR": print "Error , Name is not unique, shutting down...." self.config["name"] += "_" # self.name = self.name+'_' self.send(json.dumps({"cmd": "NAME", "data": self.config["name"]})) elif cmd == "CHECK_FILE": check_ok = self.proccess_check_file(data, self.config["reciving_dir"]) if check_ok: self.send( json.dumps( { "cmd": "CHECK_FILE_OK", "data": {"file_name": data["file_name"], "file_type": data["file_type"]}, } ) ) else: self.send( json.dumps( { "cmd": "CHECK_FILE_NOK", "data": {"file_name": data["file_name"], "file_type": data["file_type"]}, } ) ) elif cmd == "CHECK_FILE_OK": print data["file_name"], "ok" if data["file_type"] == "reg_mod": self.send(json.dumps({"cmd": "REG_MODULE", "data": os.path.basename(data["file_name"])})) elif cmd == "CHECK_FILE_NOK": print data["file_name"], "not ok", "resending ..." self.send_file(data["file_name"]) if data["file_type"] == "reg_mod": self.send(json.dumps({"cmd": "REG_MODULE", "data": os.path.basename(data["file_name"])})) elif cmd == "FILE": filename = data["file_name"] print "reciving ", filename if not filename in self.FILE_HANDLERS: self.FILE_HANDLERS[filename] = open(os.path.join(self.config["reciving_dir"], filename), "w") f = self.FILE_HANDLERS[filename] if not data["line"] == "_EOF_": f.write(data["line"]) else: f.flush() f.close self.FILE_HANDLERS.pop(filename) print "file", filename, "recived" elif cmd == "RPC_CALL": data = json.loads(data) mod_name = data["mod_name"] + ".py" mod_path = self.config["reg_mod"][mod_name] func_name = data["func_name"] prams = data["prams"] RPC_ID = data["RPC_ID"] print "RPC incoming", mod_name, func_name, prams try: f, fn, dsc = imp.find_module(mod_name[:-3], [os.path.dirname(mod_path)]) mod = imp.load_module(mod_name, f, fn, dsc) print mod f = None for a in dir(mod): f = mod.__dict__.get(a) if isinstance(f, types.FunctionType): if f.func_name == func_name: break if not f.func_name == func_name: raise Exception("Function not found.") result = f(prams) result = json.dumps({"RPC_ID": RPC_ID, "RPC_RESULT": result}) self.send(json.dumps({"cmd": "RPC_RESULT", "data": str(result)})) # print result except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() self.send( json.dumps( { "cmd": "RPC_EXCEPTION", "data": json.dumps( {"RPC_ID": RPC_ID, "RPC_EXCEPTION": str(e) + ", in line " + str(exc_tb.tb_lineno)} ), } ) ) print e # finally: # f.close() elif cmd == "_end_": self.shutdown() print "Shutdowwn Command Sent" os._exit(0) else: print "<", input_line
def reg_module(self, data): pm = cStub.parse_module(data) self.check_file(pm, "reg_mod")