diff --git a/server/imserver/IMListener.h b/server/imserver/IMListener.h index f1e2d13..90ea5cb 100644 --- a/server/imserver/IMListener.h +++ b/server/imserver/IMListener.h @@ -1,6 +1,7 @@ #pragma once #include "framework/cpp/netmsghandler.h" +#include "app.h" //imserver listener namespace a8 @@ -30,7 +31,29 @@ class IMListener : public a8::Singleton void SendMsg(int socket_handle, T& msg) { static int msgid = f8::Net_GetMessageId(msg); - f8::Net_SendMsg(tcp_listener_, socket_handle, 0, msgid, msg); + if (socket_handle != 0) { + f8::Net_SendMsg(tcp_listener_, socket_handle, 0, msgid, msg); + } else { + int packlen = msg.ByteSize(); + char* buff = nullptr; + if (packlen > 0) { + buff = (char*)malloc(packlen); + msg.SerializeToArray(buff, packlen); + } + App::Instance()->AddSocketMsg + ( + SF_IMServer, + 0, + 0, + msgid, + 0, + buff, + packlen + ); + if (buff) { + free(buff); + } + } #ifdef DEBUG f8::DumpMsgToLog(msg, "<<<<<<