[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/codeindeep/TTServer/master/cpp/src/base/ImPduFile.cpp [Back]  [Original]

/*
 * ImPduFile.cpp
 *
 *  Created on: 2013-12-9
 *      Author: ziteng@mogujie.com
 */

#include "ImPduFile.h"

CImPduClientFileLoginReq::CImPduClientFileLoginReq(uchar_t* buf, uint32_t len)
{
	ReadPduHeader(buf, IM_PDU_HEADER_LEN, &m_pdu_header);
	CByteStream is(buf + IM_PDU_HEADER_LEN, len - IM_PDU_HEADER_LEN);

	m_user_id = is.ReadString(m_user_id_len);
	m_token = is.ReadString(m_token_len);
    m_task_id = is.ReadString(m_task_id_len);
    is >> m_client_mode;
	PARSE_PACKET_ASSERT
}

CImPduClientFileLoginReq::CImPduClientFileLoginReq(const char* user_id, const char* token, const char* task_id, uint32_t client_mode)
{
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_LOGIN_REQ;
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);
    
	os.WriteString(user_id);
	os.WriteString(token);
    os.WriteString(task_id);
    os > m_result;
	m_task_id = is.ReadString(m_task_id_len);
	PARSE_PACKET_ASSERT
}

CImPduClientFileLoginRes::CImPduClientFileLoginRes(uint32_t result, const char* task_id)
{
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_LOGIN_RES;
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);

	os > m_file_size;
    is >> m_trans_mode;
	PARSE_PACKET_ASSERT
}

CImPduClientFileRequest::CImPduClientFileRequest(const char* from_id, const char* to_id,
		const char* file_name, uint32_t file_size, uint32_t trans_mode)
{
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_REQUEST;

	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);

	os.WriteString(from_id);
	os.WriteString(to_id);
	os.WriteString(file_name);
	os  m_result;
	m_from_id = is.ReadString(m_from_id_len);
	m_to_id = is.ReadString(m_to_id_len);
	m_file_name = is.ReadString(m_file_name_len);
    m_task_id = is.ReadString(m_task_id_len);
	
    is >> m_ip_addr_cnt;
    
    if (m_ip_addr_cnt > 0)
    {
        m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
		ALLOC_FAIL_ASSERT(m_ip_addr_list);
        
		for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
            m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
            is >> m_ip_addr_list[i].port;
		}
    }
    
    is >> m_trans_mode;
	PARSE_PACKET_ASSERT
}

CImPduClientFileResponse::CImPduClientFileResponse(uint32_t result, const char* from_id,
                const char* to_id, const char* file_name, const char* task_id,
                const list* ip_addr_list , uint32_t trans_mode)
{
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_RESPONSE;

	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);
    os size();
        os begin(); it != ip_addr_list->end(); it++)
        {
            const svr_ip_addr_t& ip_addr = *it;
            os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
            os > m_ip_addr_cnt;
    
    if (m_ip_addr_cnt > 0)
    {
        m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
		ALLOC_FAIL_ASSERT(m_ip_addr_list);
        
		for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
            m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
            is >> m_ip_addr_list[i].port;
		}
    }

    is >> m_trans_mode;
    is >> m_offline_ready;
	PARSE_PACKET_ASSERT
}

CImPduClientFileNotify::CImPduClientFileNotify(const char* from_id, const char* to_id,
            const char* file_name, uint32_t file_size, const char* task_id,
            const list* ip_addr_list, uint32_t trans_mode, uint32_t offline_ready)
{
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_NOTIFY;
    
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);
    
	os.WriteString(from_id);
	os.WriteString(to_id);
	os.WriteString(file_name);
    os size();
        os begin(); it != ip_addr_list->end(); it++)
        {
            const svr_ip_addr_t& ip_addr = *it;
            os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
            os > m_file_list[i].file_size;
		}
	}
    
    is >> m_ip_addr_cnt;
    
    if (m_ip_addr_cnt > 0)
    {
        m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
		ALLOC_FAIL_ASSERT(m_ip_addr_list);
        
		for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
            m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
            is >> m_ip_addr_list[i].port;
		}
    }

	PARSE_PACKET_ASSERT
}

CImPduClientFileHasOfflineRes::CImPduClientFileHasOfflineRes(uint32_t file_cnt, offline_file_t* serv_file_list, const list* ip_addr_list)
{
	m_file_list = NULL;
    m_ip_addr_list = NULL;
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_HAS_OFFLINE_RES;

	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);
	os end(); it++)
        {
            const svr_ip_addr_t& ip_addr = *it;
            os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
            os  m_file_size;
	PARSE_PACKET_ASSERT
}

CImPduClientFileAddOfflineReq::CImPduClientFileAddOfflineReq(const char* from_id, const char* to_id,
		const char* task_id, const char* file_name, uint32_t file_size)
{
	m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = CID_FILE_ADD_OFFLINE_REQ;
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);

    os.WriteString(from_id);
    os.WriteString(to_id);
    os.WriteString(task_id);
    os.WriteString(file_name);
    os > m_from_id;
    is >> m_to_id;
    m_file_name = is.ReadString(m_file_name_len);
	is >> m_file_length;
    is >> m_transfer_mode;
    m_attach_data = is.ReadData(m_attach_len);
    
	PARSE_PACKET_ASSERT
}

CImPduMsgFileTransferReq::CImPduMsgFileTransferReq(uint32_t from_id, uint32_t to_id, const char* file_name, uint32_t file_length, uint32_t mode, uint32_t attach_len, uchar_t* attach_data)
{
    m_pdu_header.module_id = SID_FILE;
	m_pdu_header.command_id = IM_PDU_TYPE_MSG_FILE_TRANSFER_REQ;
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);
    
    
    os  m_from_id;
    is >> m_to_id;
    m_file_name = is.ReadString(m_file_name_len);
    is >> m_file_length;
    m_task_id = is.ReadString(m_task_id_len);
    is >> m_trans_mode;
    m_attach_data = is.ReadData(m_attach_len);
    
    PARSE_PACKET_ASSERT
}

CImPduMsgFileTransferRsp::CImPduMsgFileTransferRsp(uint32_t result, uint32_t from_id, uint32_t to_id, uint32_t attach_len, uchar_t* attach_data)
{
    m_pdu_header.module_id = SID_OTHER;
	m_pdu_header.command_id = IM_PDU_TYPE_MSG_FILE_TRANSFER_RSP;
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);
    
    os size();
        os  0) {
            for (list::iterator it = ip_list->begin(); it != ip_list->end(); it++)
            {
                svr_ip_addr_t& ip_addr = *it;
                os.WriteString(ip_addr.ip.c_str(), ip_addr.ip.length());
                os  m_from_id;
    is >> m_to_id;
	m_file_name = is.ReadString(m_file_name_len);
    is >> m_file_size;
    m_task_id = is.ReadString(m_task_id_len);
	is >> m_ip_addr_cnt;
    
    if (m_ip_addr_cnt > 0)
    {
        m_ip_addr_list = new ip_addr_t [m_ip_addr_cnt];
		ALLOC_FAIL_ASSERT(m_ip_addr_list);
        
		for (uint32_t i = 0; i < m_ip_addr_cnt; i++) {
            m_ip_addr_list[i].ip = is.ReadString(m_ip_addr_list[i].ip_len);
            is >> m_ip_addr_list[i].port;
		}
    }
    
    is >> m_trans_mode;
    is >> m_offline_ready;
	PARSE_PACKET_ASSERT
}

CImPduFileNotify::CImPduFileNotify(uint32_t from_id, uint32_t to_id, const char* file_name,
        uint32_t file_size, const char* task_id, const list* ip_addr_list,
                                   uint32_t trans_mode, uint32_t offline_ready)
{
	m_pdu_header.module_id = SID_OTHER;
	m_pdu_header.command_id = IM_PDU_TYPE_FILE_NOTIFY;
    
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);

    os > m_file_list[i].from_id;
            m_file_list[i].task_id = is.ReadString(m_file_list[i].task_id_len);
            m_file_list[i].file_name = is.ReadString(m_file_list[i].file_name_len);
            is >> m_file_list[i].file_size;
        }
	}
    m_attach_data = is.ReadData(m_attach_len);

	PARSE_PACKET_ASSERT
}

CImPduFileHasOfflineRes::~CImPduFileHasOfflineRes()
{
	if (m_file_list) {
		delete [] m_file_list;
		m_file_list = NULL;
	}
}

CImPduFileAddOfflineReq::CImPduFileAddOfflineReq(uint32_t req_user_id, uint32_t from_id,
        uint32_t to_id, const char* task_id, const char* file_name, uint32_t file_size)
{
	m_pdu_header.command_id = IM_PDU_TYPE_FILE_ADD_OFFLINE_REQ;
	CByteStream os(&m_buf, IM_PDU_HEADER_LEN);
	m_buf.Write(NULL, IM_PDU_HEADER_LEN);

	os 

Web Proxy Viewer  |  New URL  |  Original Page