1
This commit is contained in:
parent
f5a00b3142
commit
4290daef43
@ -86,7 +86,7 @@ void GGListener::Init()
|
|||||||
tcp_listener_->on_error = GSListeneron_error;
|
tcp_listener_->on_error = GSListeneron_error;
|
||||||
|
|
||||||
tcp_listener_->bind_address = "0.0.0.0";
|
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();
|
tcp_listener_->Open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
112
server/masterserver/IMListener.cc
Normal file
112
server/masterserver/IMListener.cc
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
#include "precompile.h"
|
||||||
|
|
||||||
|
#include <google/protobuf/message.h>
|
||||||
|
#include <a8/mixedsession.h>
|
||||||
|
#include <a8/tcplistener.h>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
33
server/masterserver/IMListener.h
Normal file
33
server/masterserver/IMListener.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
//imserver listener
|
||||||
|
namespace a8
|
||||||
|
{
|
||||||
|
class TcpListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
class IMListener : public a8::Singleton<IMListener>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
IMListener() {};
|
||||||
|
friend class a8::Singleton<IMListener>;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void Init();
|
||||||
|
void UnInit();
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
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;
|
||||||
|
};
|
@ -3,16 +3,14 @@
|
|||||||
enum SocketFrom_e
|
enum SocketFrom_e
|
||||||
{
|
{
|
||||||
SF_GameGate,
|
SF_GameGate,
|
||||||
|
SF_IMServer,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum InnerMesssage_e
|
enum InnerMesssage_e
|
||||||
{
|
{
|
||||||
IM_ClientSocketDisconnect = 100,
|
IM_ClientSocketDisconnect = 100,
|
||||||
IM_PlayerOffline,
|
IM_IMSSocketDisconnect,
|
||||||
IM_ExecGM,
|
IM_ExecGM,
|
||||||
IM_DBSConnDisconnect,
|
|
||||||
IM_BSConnDisconnect,
|
|
||||||
IM_LoadConfig,
|
|
||||||
IM_HttpResponse,
|
IM_HttpResponse,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -27,5 +25,4 @@ const char* const PROJ_ROOT_FMT = "/data/logs/%s";
|
|||||||
|
|
||||||
const float TEN_W = 10000 * 10;
|
const float TEN_W = 10000 * 10;
|
||||||
|
|
||||||
const int MAX_NODE_ID = 8;
|
const int MAX_INSTANCE_ID = 1023;
|
||||||
const int MAX_INSTANCE_ID = 500;
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user