def _receive_frame_info(self, fd): client_socket = self.__fd_to_socket[fd] header = client_socket.recv(4, socket.MSG_WAITALL) LOG.info("the length of header is {}, header:{}", len(header), header) if len(header) != 4: LOG.error('header length is not 4') return None data_length = struct.unpack('i', header)[0] data_bin = client_socket.recv(data_length, socket.MSG_WAITALL) if len(data_bin) != data_length: LOG.error('the length of dataBin is not equal to data length') return None # 前面16个字节是魔数、补偿信息、是否终止、帧序号,后面是帧数据 magic_number, reward, terminal, frame_index = struct.unpack( 'ifii', data_bin[0:16]) if magic_number != MAGIC_NUMBER: LOG.error('magic number error') return None np_array = np.fromstring(data_bin[16:], np.uint8) image = np.reshape(np_array, (IMAGE_WIDTH, IMAGE_HEIGHT)) done = bool(terminal == 1) LOG.debug( 'receive frame information from fd {}: frame index = {}, reward = {}' .format(client_socket.fileno(), frame_index, reward)) return image, reward, done, frame_index
def _send_action_info(self, fd, action_info): client_socket = self.__fd_to_socket[fd] action_index = action_info[0] frame_index = action_info[1] data_bin = struct.pack("iii", MAGIC_NUMBER, action_index, frame_index) client_socket.sendall(data_bin) LOG.debug('send action information to fd {}, action index = {}'.format( fd, action_index)) return
def start(self): LOG.info("conn2center start...") while 1: data, address = self.get_sock().recvfrom(8192) LOG.debug("data received: %s" % (repr(data))) if data: gevent.spawn(self.dataReceived, data) LOG.info("job's done") else: self.get_sock().close() break
def forward_msg(self, cmd, amf3_data, playerid, rqstid, flag, playerid_list=[]): #[uint8_t flag][uint32_t targetLen][target_players][uint8_t ch='\0']\ #[uint16_t msg_channel][uint16_t cmd][string amf3_data] msg_channel = self._rqstid[rqstid]['msg_channel'] LOG.info("cmd: %s, amf3_data: %s, playerid: %s, rqstid: %s, flag: %s,\ playerid_list: %s" % (pattern.to_hex(cmd), repr(amf3_data), playerid,\ rqstid, flag, playerid_list)) target_players = '' targetLen = 1 seperator = '\0' playerid_list = [] if flag == 0: _playerid = [] _playerid.append(playerid) playerid_list = list(set(playerid_list).union(_playerid)) for i in xrange(len(playerid_list)): target_players += struct.pack('!I', playerid_list[i]) LOG.info('len(playerid_list): %s' % (len(playerid_list))) elif flag == 1: pass elif flag == 2: pass else: return LOG.debug('target_players: %s' % (repr(target_players))) targetLen += len(target_players) LOG.debug('targetLen: %s' % (targetLen)) replyMsg = struct.pack("!BI", flag, targetLen) replyMsg += target_players replyMsg += struct.pack("!sI", seperator, cmd) replyMsg += struct.pack(self.get_amf3_fmt(amf3_data), len(amf3_data), amf3_data) LOG.info('len(amf3_data): %s' % (len(amf3_data))) LOG.info('amf3_data: %s' % (repr(struct.pack(self.get_amf3_fmt(amf3_data),len(amf3_data), amf3_data)))) LOG.info('replyMsg: %s' % (repr(replyMsg))) data_count = self._sock.send(replyMsg) LOG.info('send %s data' % (data_count))