def _handle_read(self, data): msgId = struct.unpack(">H",data[0:2])[0] length = struct.unpack(">H",data[2:4])[0] buffData = data[4:length] buffNameReq = protolist.protolist(msgId) buffNameRsp = protolist.protolist(msgId+1) moduleName = msgacts.msgAct[buffNameReq][0] className = msgacts.msgAct[buffNameReq][1] methodName = msgacts.msgAct[buffNameReq][2] proto_module = importlib.import_module('pytcpsrv.proto.'+moduleName+'_pb2') classReq = getattr(proto_module,buffNameReq) classRsp = getattr(proto_module,buffNameRsp) objReq = classReq() objRsp = classRsp() objReq.ParseFromString(buffData) service_module = importlib.import_module('pytcpsrv.service.'+className) classSrv = getattr(service_module,className) objSrv = classSrv() objSrv.bufferReq = objReq objSrv.bufferRsp = objRsp rspBufferData = getattr(objSrv, methodName)() rspData = struct.pack(">H",msgId+1)+struct.pack(">H",len(rspBufferData)+4)+rspBufferData+"\n" self._stream.write(rspData) self._read_line()
#! /usr/bin/env python #coding=utf-8 import importlib import struct import socket from pytcpsrv import protolist msgId = 1 buffNameReq = protolist.protolist(msgId) proto_module = importlib.import_module('pytcpsrv.proto.test_pb2') classReq = getattr(proto_module,buffNameReq) objReq = classReq() objReq.uid = 10001 sreialStr = objReq.SerializeToString() length = len(sreialStr)+4 data = struct.pack(">H",msgId)+struct.pack(">H",length)+sreialStr+"\n" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('127.0.0.1', 8888)) sock.send(data) res = sock.recv(1024) msgId = struct.unpack(">H",res[0:2])[0] length = struct.unpack(">H",res[2:4])[0] buffData = res[4:length] buffNameRsp = protolist.protolist(msgId) classRsp = getattr(proto_module,buffNameRsp)