diff --git a/server/masterserver/GGListener.cc b/server/masterserver/GGListener.cc index 60cbc29..8529711 100644 --- a/server/masterserver/GGListener.cc +++ b/server/masterserver/GGListener.cc @@ -86,7 +86,7 @@ void GGListener::Init() tcp_listener_->on_error = GSListeneron_error; tcp_listener_->bind_address = "0.0.0.0"; - tcp_listener_->bind_port = JsonDataMgr::Instance()->GetConf()->At("listen_port")->AsXValue(); + tcp_listener_->bind_port = JsonDataMgr::Instance()->GetConf()->At("wsproxy_listen_port")->AsXValue(); tcp_listener_->Open(); } diff --git a/server/masterserver/IMListener.cc b/server/masterserver/IMListener.cc new file mode 100644 index 0000000..bf6026f --- /dev/null +++ b/server/masterserver/IMListener.cc @@ -0,0 +1,112 @@ +#include "precompile.h" + +#include +#include +#include + +#include "framework/cpp/netmsghandler.h" + +#include "app.h" +#include "IMListener.h" +#include "jsondatamgr.h" +#include "handlermgr.h" + +class IMServerSession: public a8::MixedSession +{ +public: + + virtual void DecodeUserPacket(char* buf, int& offset, unsigned int buflen) override + { + #if 1 + is_activite = true; + #endif + bool warning = false; + while (buflen - offset >= sizeof(f8::PackHead)) { + f8::PackHead* p = (f8::PackHead*)&buf[offset]; + if (p->magic_code == f8::MAGIC_CODE) { + if (buflen - offset < sizeof(f8::PackHead) + p->packlen) { + break; + } + App::Instance()->AddSocketMsg(SF_IMServer, + socket_handle, + saddr, + p->msgid, + p->seqid, + &buf[offset + sizeof(f8::PackHead)], + p->packlen); + offset += sizeof(f8::PackHead) + p->packlen; + } else { + warning = true; + offset++; + continue; + } + } + + if (warning) { + a8::UdpLog::Instance()->Warning("收到imserver非法数据包", {}); + } + } + + virtual void OnRawHttpGet(const std::string& url, const std::string& querystr, + std::string& response) override + { + App::Instance()->AddIMMsg(IM_ExecGM, + a8::XParams() + .SetSender(socket_handle) + .SetParam1(url) + .SetParam2(querystr) + .SetParam3(saddr) + ); + } + + virtual void OnDisConnect() override + { + App::Instance()->AddIMMsg(IM_IMSSocketDisconnect, + a8::XParams() + .SetSender(socket_handle) + .SetParam1(1)); + } + +}; + +static void CreateIMServerSocket(a8::TcpSession **p) +{ + *p = new IMServerSession(); +} + +static void GSListeneron_error(a8::TcpListener*, int type, int errorid) +{ + a8::UdpLog::Instance()->Debug("IMListeneron_error %d %d", {type, errorid}); +} + +void IMListener::Init() +{ + tcp_listener_ = new a8::TcpListener(); + tcp_listener_->on_create_client_socket = CreateIMServerSocket; + tcp_listener_->on_error = GSListeneron_error; + + tcp_listener_->bind_address = "0.0.0.0"; + tcp_listener_->bind_port = JsonDataMgr::Instance()->GetConf()->At("imserver_listen_port")->AsXValue(); + tcp_listener_->Open(); +} + +void IMListener::UnInit() +{ + delete tcp_listener_; + tcp_listener_ = nullptr; +} + +void IMListener::SendText(int sockhandle, const std::string& text) +{ + tcp_listener_->SendClientMsg(sockhandle, text.data(), text.size()); +} + +void IMListener::ForceCloseClient(int sockhandle) +{ + tcp_listener_->ForceCloseClient(sockhandle); +} + +void IMListener::MarkClient(int sockhandle, bool is_active) +{ + tcp_listener_->MarkClient(sockhandle, is_active); +} diff --git a/server/masterserver/IMListener.h b/server/masterserver/IMListener.h new file mode 100644 index 0000000..b269e8b --- /dev/null +++ b/server/masterserver/IMListener.h @@ -0,0 +1,33 @@ +#pragma once + +//imserver listener +namespace a8 +{ + class TcpListener; +} + +class IMListener : public a8::Singleton +{ + private: + IMListener() {}; + friend class a8::Singleton; + + public: + void Init(); + void UnInit(); + + template + void SendMsg(int sockhandle, T& msg) + { + static int msgid = f8::Net_GetMessageId(msg); + f8::Net_SendMsg(tcp_listener_, sockhandle, 0, msgid, msg); + } + + void SendText(int sockhandle, const std::string& text); + + void ForceCloseClient(int sockhandle); + void MarkClient(int sockhandle, bool is_active); + + private: + a8::TcpListener *tcp_listener_ = nullptr; +}; diff --git a/server/masterserver/constant.h b/server/masterserver/constant.h index b6f7c90..a9acaa3 100755 --- a/server/masterserver/constant.h +++ b/server/masterserver/constant.h @@ -3,16 +3,14 @@ enum SocketFrom_e { SF_GameGate, + SF_IMServer, }; enum InnerMesssage_e { IM_ClientSocketDisconnect = 100, - IM_PlayerOffline, + IM_IMSSocketDisconnect, IM_ExecGM, - IM_DBSConnDisconnect, - IM_BSConnDisconnect, - IM_LoadConfig, IM_HttpResponse, }; @@ -27,5 +25,4 @@ const char* const PROJ_ROOT_FMT = "/data/logs/%s"; const float TEN_W = 10000 * 10; -const int MAX_NODE_ID = 8; -const int MAX_INSTANCE_ID = 500; +const int MAX_INSTANCE_ID = 1023;