def send(message): ip = config.safe_get('network', 'listen-ip') port = config.safe_get('network', 'listen-port') # 准备数据 data = message.SerializeToString() data = struct.pack('I', len(data)) + data # 发包 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, int(port))) sock.send(data) # 收包 try: data = "" while True: data += sock.recv(1024) if len(data) >= (pkSize + struct.unpack('I', data[:pkSize])[0]): break except Exception as e: MESSAGE("Recv data error : %s" % e) abort(500) sock.close() # 解析包 response = msg_pds.Message() response.ParseFromString(data[pkSize:len(data)]) if not response.HasField('rc'): MESSAGE("Response miss rc field") abort(500) return response
def send(message): ip = config.safe_get('network', 'listen-ip') port = config.safe_get('network', 'listen-port') # 准备数据 data = message.SerializeToString() data = struct.pack('I', len(data)) + data # 发包 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, int(port))) sock.send(data) data = "" while True: data += sock.recv(1024) if len(data) >= (pkSize + struct.unpack('I', data[:pkSize])[0]): break sock.close() # 解析包 response = msg_pds.Message() response.ParseFromString(data[pkSize:len(data)]) if not response.HasField('rc'): assert (0) return str(response).strip()
def MakeRequest(machine_type, origin_message=None): message = msg_pds.Message() message.head.message_type = machine_type if origin_message == None: message.head.session = str(uuid.uuid1()) message.head.flowno = 1 else: message.head.session = origin_message.head.session message.head.flowno = origin_message.head.flowno + 1 return message
def dataReceived(self, data): pkSize = len(struct.pack('I', 0)) self.data += data if len(self.data) < pkSize: # print "pkSize pass" return dataLen = struct.unpack('I', self.data[:pkSize])[0] if len(self.data) < dataLen: # print "dataLen pass" return request = pds.Message() request.ParseFromString(self.data[pkSize:pkSize + dataLen]) return self.handleData(request)
def _send(self, message): # 准备数据 data = message.SerializeToString() assert (len(data) < MAX_LEN) data = struct.pack('I', len(data)) + data # 发包 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((self.srv['ip'], self.srv['port'])) sock.send(data) # 收包 data = "" while True: data += sock.recv(1024) if len(data) >= (pkSize + struct.unpack('I', data[:pkSize])[0]): break sock.close() # 解析包 response = msg_pds.Message() response.ParseFromString(data[pkSize:len(data)]) return response
def send(self, message): if self.srv['cli_config']['debug'] == True: out = "====================== Request ======================\n" out += str(message).strip() OUT_INFO(out) # 尝试次数 try_times = 1 info = "" response = msg_pds.Message() class RequestStateType: INIT = 0 NOT_MASTER = 1 TIMEOUT = 2 SOCKET_ERROR = 3 UNEXPECTED = 4 # REQUEST_STATE_TYPE = enum.Enum('INIT', 'NOT_MASTER', 'TIMEOUT', 'SOCKET_ERROR', 'UNEXPECTED') REQUEST_STATE_TYPE = RequestStateType() while (try_times >= 0): try: request_state = REQUEST_STATE_TYPE.INIT response = self._send(message) break except socket.timeout as e: request_state = REQUEST_STATE_TYPE.TIMEOUT break except socket.error as e: try_times -= 1 request_state = REQUEST_STATE_TYPE.SOCKET_ERROR continue except Exception as e: try_times -= 1 if self.srv['cli_config']['debug'] == True: OUT_DEBUG(str(e)) request_state = REQUEST_STATE_TYPE.UNEXPECTED if request_state == REQUEST_STATE_TYPE.NOT_MASTER: out = "Connection Error : Cann't get MDS info, please try again or 30 seconds later" OUT_ERROR(out) sys.exit(1) elif request_state == REQUEST_STATE_TYPE.TIMEOUT: out = "Command Timeout : Please try again or try again later." OUT_ERROR(out) sys.exit(1) elif request_state == REQUEST_STATE_TYPE.SOCKET_ERROR: out = "Connection Refused : MDS service is starting ?" OUT_ERROR(out) sys.exit(1) elif request_state == REQUEST_STATE_TYPE.UNEXPECTED or not response.HasField( 'head') or not response.HasField('rc'): out = "=======================================================================\n" out += "* If you see this tip, it means that an unexpected error occurred !!! *\n" out += "* Please contact your supplier for help. *\n" out += "=======================================================================" OUT_ERROR(out) sys.exit(1) if self.srv['cli_config']['json'] == True: OUT_INFO(json.dumps(protobuf_json.pb2json(response), indent=4)) sys.exit(0) if self.srv['cli_config']['debug'] == True: out = "====================== Response ======================\n" out += "%s\n" % str(response).strip() out += "======================================================" OUT_INFO(out) return response