def decode(self, data): (len, msgLen) = struct.unpack_from('>II', data); offset = struct.calcsize('>II'); (msgName, protoLen) = struct.unpack_from('>'+str(msgLen)+'sI', data, offset); offset = offset + msgLen+ struct.calcsize('>I'); msg = MsgFactory.create(msgName); #print msg, repr(data[offset:]); msg.jsonDecode(data[offset:]); return msg;
def encode(self, msg): if msg.receiverName: receiver = struct.pack('>III', msg.receiver.id, msg.receiver.remote, msg.receiver.time); else: receiver = struct.pack('>I'+str(len(msg.receiverName))+'s', len(msg.receiverName), msg.receiverName); sender = struct.pack('>III', msg.sender.id, msg.sender.remote, msg.sender.time); msgName = MsgFactory.getClassName(msg); msgName = struct.pack(('>I%ds' % len(msgName)), msgName); data = msg.encode(); data = struct.pack(('>I%ds' % len(data)), data); alldata = '%s%s%s%s' % (receiver, sender, msgName, data); return struct.pack(('>I%ds' % len(alldata)), alldata);
import sys; import time; from datetime import datetime; from msgqueuemsg import OpenMsgQueueRequest, OpenMsgQueueResult, GetMsgRequest, GetMsgResult, SendMsgRequest, SendMsgResult; from translator import JsonTranslatorEx; from network import NetConnection; from msgfactory import MsgFactory; MsgFactory.register("OpenMsgQueueRequest", OpenMsgQueueRequest); MsgFactory.register("OpenMsgQueueResult", OpenMsgQueueResult); MsgFactory.register("GetMsgRequest", GetMsgRequest); MsgFactory.register("GetMsgResult", GetMsgResult); MsgFactory.register("SendMsgRequest", SendMsgRequest); MsgFactory.register("SendMsgResult", SendMsgResult); HOST = "127.0.0.1"; PORT = 12010; #HOST = "10.241.12.117"; #PORT = 12510; if __name__ == "__main__": if len(sys.argv) < 4: print "%s queuename data clientname" % sys.argv[0]; exit(); queuename = sys.argv[1]; data = sys.argv[2]; clientname = sys.argv[3];
import sys, time; from translator import ProtocolTranslator, StandTranslator; from msgfactory import MsgFactory; from addmsg import AddRequest, AddResult; import network ; HOST = "127.0.0.1"; PORT = 12010; MsgFactory.register("AddRequest", AddRequest); MsgFactory.register("AddResult", AddResult); if __name__ == "__main__": if len(sys.argv) < 2: print "%s param1 param2" % sys.argv[0]; exit(); param1, param2= int(sys.argv[1]), int(sys.argv[2]); req = AddRequest(); req.iSequenceID = 1234; req.param1 = param1; req.param2 = param2; tran = ProtocolTranslator(); conn = network.NetConnection(tran, HOST, PORT); res = conn.sendAndRecvMsg(req); conn.close(); print repr(res);
def encode(self, msg): data=''.join((struct.pack('>I'+str(len(x))+'s', len(x), x) for x in (MsgFactory.getClassName(msg), msg.jsonEncode()))); return struct.pack('>I'+str(len(data))+'s', len(data)+4, data);
class StandTranslator(object): '''stand translator, default, ''' def decode(self, data): pass; def encode(self, msg): if msg.receiverName: receiver = struct.pack('>III', msg.receiver.id, msg.receiver.remote, msg.receiver.time); else: receiver = struct.pack('>I'+str(len(msg.receiverName))+'s', len(msg.receiverName), msg.receiverName); sender = struct.pack('>III', msg.sender.id, msg.sender.remote, msg.sender.time); msgName = MsgFactory.getClassName(msg); msgName = struct.pack(('>I%ds' % len(msgName)), msgName); data = msg.encode(); data = struct.pack(('>I%ds' % len(data)), data); alldata = '%s%s%s%s' % (receiver, sender, msgName, data); return struct.pack(('>I%ds' % len(alldata)), alldata); if __name__ == "__main__": MsgFactory.register("msg", msg.Msg); msg = msg.Msg(); msg.serialNo = 60; translator = ProtocolTranslator(); data = translator.encode(msg); print repr(data); msg1 = translator.decode(data); print msg1.serialNo;