示例#1
0
    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
示例#2
0
    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
示例#3
0
	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 
示例#4
0
	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))