int CBaseCommand::DoMessage(IMessage* pMessage, bool& bDeleteFlag) { //__ENTER_FUNCTION是自动给你的函数追加try的宏,用于捕捉错误,你可以使用__THROW_FUNCTION()抛出你的错误 //比如__THROW_FUNCTION("hello"); 它会自动在Log文件夹下的assert.log记录文件名,函数名,行数,描述。 //推荐你使用这个宏,记住一定要在函数的结束使用__LEAVE_FUNCTION或者__LEAVE_FUNCTION_WITHRETURN与之配对。 //__LEAVE_FUNCTION_WITHRETURN和__LEAVE_FUNCTION不同是前者可以支持函数退出的时候返回一个变量 //比如这个函数是返回一个int //那么末尾就是__LEAVE_FUNCTION_WITHRETURN(0); 0就是返回的int,当然,也支持别的类型变量,具体看你自己的函数。 //如果函数不返回任何变量,你可以使用__LEAVE_FUNCTION即可。 __ENTER_FUNCTION(); if(m_pServerObject == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] m_pServerObject is NULL.\n")); return -1; } if(pMessage == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] pMessage is NULL.\n")); return -1; } //处理链接建立信息 MESSAGE_FUNCTION_BEGIN(pMessage->GetMessageBase()->m_u2Cmd); MESSAGE_FUNCTION(CLIENT_LINK_CONNECT, Do_Connect, pMessage); MESSAGE_FUNCTION(CLIENT_LINK_CDISCONNET, Do_DisConnect, pMessage); MESSAGE_FUNCTION(CLINET_LINK_SENDTIMEOUT, Do_ClientSendTimeout, pMessage); MESSAGE_FUNCTION(COMMAND_LOGIC_CLIENAT_LOGIN, Do_Logic_Client_Login, pMessage); MESSAGE_FUNCTION_END; return 0; __LEAVE_FUNCTION_WITHRETURN(0); }
int CBaseCommand::DoMessage(IMessage* pMessage, bool& bDeleteFlag) { __ENTER_FUNCTION(); if(m_pServerObject == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] m_pServerObject is NULL(%d).\n", bDeleteFlag)); return -1; } if(pMessage == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] pMessage is NULL.\n")); return -1; } //处理链接建立信息 if(pMessage->GetMessageBase()->m_u2Cmd == CLIENT_LINK_CONNECT) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] CLIENT_LINK_CONNECT OK.\n")); return 0; } //处理链接断开信息 if(pMessage->GetMessageBase()->m_u2Cmd == CLIENT_LINK_CDISCONNET) { LeaveFtpUser(pMessage->GetMessageBase()->m_u4ConnectID); OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] CLIENT_LINK_CDISCONNET OK.\n")); return 0; } //用户登陆 if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_LOGIN) { Do_Ftp_Login(pMessage); } else if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_LOGOUT) { Do_Ftp_Logout(pMessage); } else if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_FILELIST) { Do_Ftp_FileList(pMessage); } else if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_FILE_DOWNLOAD) { Do_Ftp_FileDownLoad(pMessage); } else if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_FILE_UPLOAD) { Do_Ftp_FileUpLoad(pMessage); } return 0; __LEAVE_FUNCTION_WITHRETURN(0); }
int CBaseCommand::DoMessage(IMessage* pMessage, bool& bDeleteFlag) { //__ENTER_FUNCTION是自动给你的函数追加try的宏,用于捕捉错误,你可以使用__THROW_FUNCTION()抛出你的错误 //比如__THROW_FUNCTION("hello"); 它会自动在Log文件夹下的assert.log记录文件名,函数名,行数,描述。 //推荐你使用这个宏,记住一定要在函数的结束使用__LEAVE_FUNCTION或者__LEAVE_FUNCTION_WITHRETURN与之配对。 //__LEAVE_FUNCTION_WITHRETURN和__LEAVE_FUNCTION不同是前者可以支持函数退出的时候返回一个变量 //比如这个函数是返回一个int //那么末尾就是__LEAVE_FUNCTION_WITHRETURN(0); 0就是返回的int,当然,也支持别的类型变量,具体看你自己的函数。 //如果函数不返回任何变量,你可以使用__LEAVE_FUNCTION即可。 __ENTER_FUNCTION(); if(m_pServerObject == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] m_pServerObject is NULL.\n")); return -1; } if(pMessage == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] pMessage is NULL.\n")); return -1; } //处理链接建立信息 if(pMessage->GetMessageBase()->m_u2Cmd == CLIENT_LINK_CONNECT) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] CLIENT_LINK_CONNECT OK.\n")); return 0; } //处理链接断开信息 if(pMessage->GetMessageBase()->m_u2Cmd == CLIENT_LINK_CDISCONNET) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] CLIENT_LINK_CDISCONNET OK.\n")); return 0; } //处理正常信息 if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_PLUGA) { Do_PlugA_DATA(pMessage); } return 0; __LEAVE_FUNCTION_WITHRETURN(0); }
int CBaseCommand::DoMessage(IMessage* pMessage, bool& bDeleteFlag) { //__ENTER_FUNCTION是自动给你的函数追加try的宏,用于捕捉错误,你可以使用__THROW_FUNCTION()抛出你的错误 //比如__THROW_FUNCTION("hello"); 它会自动在Log文件夹下的assert.log记录文件名,函数名,行数,描述。 //推荐你使用这个宏,记住一定要在函数的结束使用__LEAVE_FUNCTION或者__LEAVE_FUNCTION_WITHRETURN与之配对。 //__LEAVE_FUNCTION_WITHRETURN和__LEAVE_FUNCTION不同是前者可以支持函数退出的时候返回一个变量 //比如这个函数是返回一个int //那么末尾就是__LEAVE_FUNCTION_WITHRETURN(0); 0就是返回的int,当然,也支持别的类型变量,具体看你自己的函数。 //如果函数不返回任何变量,你可以使用__LEAVE_FUNCTION即可。 __ENTER_FUNCTION(); if(NULL == pMessage) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] pMessage is NULL(%d).\n", bDeleteFlag)); } return 0; __LEAVE_FUNCTION_WITHRETURN(0); }
int CBaseCommand::DoMessage(IMessage* pMessage, bool& bDeleteFlag) { //__ENTER_FUNCTION是自动给你的函数追加try的宏,用于捕捉错误,你可以使用__THROW_FUNCTION()抛出你的错误 //比如__THROW_FUNCTION("hello"); 它会自动在Log文件夹下的assert.log记录文件名,函数名,行数,描述。 //推荐你使用这个宏,记住一定要在函数的结束使用__LEAVE_FUNCTION或者__LEAVE_FUNCTION_WITHRETURN与之配对。 //__LEAVE_FUNCTION_WITHRETURN和__LEAVE_FUNCTION不同是前者可以支持函数退出的时候返回一个变量 //比如这个函数是返回一个int //那么末尾就是__LEAVE_FUNCTION_WITHRETURN(0); 0就是返回的int,当然,也支持别的类型变量,具体看你自己的函数。 //如果函数不返回任何变量,你可以使用__LEAVE_FUNCTION即可。 __ENTER_FUNCTION(); if(m_pServerObject == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] m_pServerObject is NULL.\n")); return -1; } if(pMessage == NULL) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] pMessage is NULL.\n")); return -1; } //处理链接建立信息 if(pMessage->GetMessageBase()->m_u2Cmd == CLIENT_LINK_CONNECT) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] CLIENT_LINK_CONNECT OK.\n")); return 0; } //处理链接断开信息 if(pMessage->GetMessageBase()->m_u2Cmd == CLIENT_LINK_CDISCONNET) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] CLIENT_LINK_CDISCONNET OK.\n")); return 0; } //处理正常信息 if(pMessage->GetMessageBase()->m_u2Cmd == COMMAND_BASE) { uint32 u4PacketLen = 0; uint16 u2CommandID = 0; uint64 u8ClientTime = 0; //OUR_DEBUG((LM_INFO, "[CBaseCommand::DoMessage] CommandID = %d", COMMAND_BASE)); IBuffPacket* pBodyPacket = m_pServerObject->GetPacketManager()->Create(); if(NULL == pBodyPacket) { OUR_DEBUG((LM_ERROR, "[CBaseCommand::DoMessage] pBodyPacket is NULL.\n")); return -1; } _PacketInfo BodyPacket; pMessage->GetPacketBody(BodyPacket); pBodyPacket->WriteStream(BodyPacket.m_pData, BodyPacket.m_nDataLen); //(*pBodyPacket) >> u2CommandID; //(*pBodyPacket) >> u8ClientTime; //测试记录二进制日志 //m_pServerObject->GetLogManager()->WriteLogBinary(LOG_SYSTEM, BodyPacket.m_pData, BodyPacket.m_nDataLen); IBuffPacket* pResponsesPacket = m_pServerObject->GetPacketManager()->Create(); uint16 u2PostCommandID = COMMAND_BASE; //数据原样奉还 (*pResponsesPacket) << (uint32)BodyPacket.m_nDataLen; pResponsesPacket->WriteStream(BodyPacket.m_pData, BodyPacket.m_nDataLen); //(*pResponsesPacket) << u2PostCommandID; //(*pResponsesPacket) << u8ClientTime; m_pServerObject->GetPacketManager()->Delete(pBodyPacket); if(NULL != m_pServerObject->GetConnectManager()) { //发送全部数据 m_pServerObject->GetConnectManager()->PostMessage(pMessage->GetMessageBase()->m_u4ConnectID, pResponsesPacket, SENDMESSAGE_JAMPNOMAL, u2PostCommandID, PACKET_SEND_IMMEDIATLY, PACKET_IS_FRAMEWORK_RECYC); } else { OUR_DEBUG((LM_INFO, "[CBaseCommand::DoMessage] m_pConnectManager = NULL")); m_pServerObject->GetPacketManager()->Delete(pResponsesPacket); } } return 0; __LEAVE_FUNCTION_WITHRETURN(0); }