最后一站 session相关
来源:互联网 发布:淘宝客机器人免费软件 编辑:程序博客网 时间:2024/06/15 16:11
class ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* poConnection) = 0;};
class CGateSessionFactory : public ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection);};
下面是BSNetSessionMgr.cpp
#include "../stdafx.h"#include "BSNetSessionMgr.h"#include "B2LSession.h"#include "GateSession.h"#include "ClientSession.h"CGateSessionFactory gGateSessionFactory;CClientSessionFactory gClientSessionFactory;CBSNetSessionMgr::CBSNetSessionMgr(){}CBSNetSessionMgr::~CBSNetSessionMgr(){}ICliSession* UCAPI CBSNetSessionMgr::CreateConnectorSession(SESSION_TYPE type){ ICliSession* pSession = NULL; if (type==ST_CLIENT_B2L) { pSession = new CB2LSession(); pSession->SetType(ST_CLIENT_B2L); pSession->SetMsgHandle(&CB2LSession::mHandles); } return pSession;}ISDSession* UCAPI CGateSessionFactory::CreateSession( ISDConnection* pConnection ){ CGateSession* pSession = new CGateSession(); pSession->SetType(ST_SERVER_BS_OnlyGS); pSession->SetMsgHandle(&CGateSession::mHandles); return pSession;}ISDSession* UCAPI CClientSessionFactory::CreateSession( ISDConnection* pConnection ){ CClientSession* pSession = new CClientSession(); pSession->SetType(ST_SERVER_BS_OnlyGC); pSession->SetMsgHandle(&CClientSession::mHandles); return pSession;}
下面是BSNetSessionMgr.h
#pragma once#include "../../../Share/Net/INetSessionMgr.h"class CBSNetSessionMgr : public INetSessionMgr{public: CBSNetSessionMgr(); virtual ~CBSNetSessionMgr();public: bool getnetip(string& ipaddr,int pos) { char host_name[255]; if (gethostname(host_name, sizeof(host_name)) == SOCKET_ERROR) { return false; } struct hostent *phe = gethostbyname(host_name); if (phe == 0) { return false; } for (int i = 0; phe->h_addr_list[i] != 0; ++i) { if (pos==i) { struct in_addr addr; memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr)); ipaddr = inet_ntoa(addr); return true; } } return false; }public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection) { return NULL; /*重写*/} virtual ICliSession* UCAPI CreateConnectorSession(SESSION_TYPE type);};class CGateSessionFactory : public ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection);};class CClientSessionFactory : public ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection);};extern CGateSessionFactory gGateSessionFactory;extern CClientSessionFactory gClientSessionFactory;
下面是CSNetSessionMgr.cpp
#include "../stdafx.h"#include "CSNetSessionMgr.h"#include "GateSession.h"#include "SceneSession.h"#include "RemoteConsoleSession.h"#include "CSLogSession.h"#include "RedisSession.h"#include "LogicRedisSession.h"CGateSessionFactory gGateSessionFactory;CSceneSessionFactory gSceneSessionFactory;CRemoteConsoleSessionFactory gRemoteConsoleFactory;CSNetSessionMgr::CSNetSessionMgr(){}CSNetSessionMgr::~CSNetSessionMgr(){}ICliSession* UCAPI CSNetSessionMgr::CreateConnectorSession(SESSION_TYPE type){ ICliSession* pSession = NULL; if (type==ST_CLIENT_C2R) { pSession = new CRedisSession(); pSession->SetType(ST_CLIENT_C2R); pSession->SetMsgHandle(&CRedisSession::mHandles); } else if (type==ST_CLIENT_C2LogicRedis){ pSession = new CLogicRedisSession(); pSession->SetType(ST_CLIENT_C2LogicRedis); } else if (type == ST_CLIENT_C2Log){ pSession = new CCSLogSession(); pSession->SetType(ST_CLIENT_C2Log); pSession->SetMsgHandle(&CCSLogSession::mHandles); } return pSession;}bool CSNetSessionMgr::CreateConnector(SESSION_TYPE type, const char* ip, int port, int recvsize, int sendsize, int logicId){ ISDConnector* pConnector = mNetModule->CreateConnector(NETIO_COMPLETIONPORT); ICliSession* pSession = CreateConnectorSession(type); UINT32 sId = AddSession(pSession); Assert(sId!=PP_INVALID); pSession->SetID(sId); pSession->SetLogicID(logicId); pSession->SetConnector(pConnector); pSession->SetRemoteEndPointer(ip,port); pConnector->SetSession(pSession); if (type == ST_CLIENT_C2R || type == ST_CLIENT_C2LogicRedis) pConnector->SetPacketParser(&m_CSParser); else pConnector->SetPacketParser(this); pConnector->SetBufferSize(recvsize,sendsize); return pConnector->Connect(ip,port);}ISDSession* UCAPI CGateSessionFactory::CreateSession( ISDConnection* pConnection ){ CGateSession* pSession = new CGateSession(); pSession->SetType(ST_SERVER_CS_OnlyGS); pSession->SetMsgHandle(&CGateSession::mHandles); return pSession;}ISDSession* UCAPI CSceneSessionFactory::CreateSession( ISDConnection* pConnection ){ CSceneSession* pSession = new CSceneSession(); pSession->SetType(ST_SERVER_CS_OnlySS); pSession->SetMsgHandle(&CSceneSession::mHandles); return pSession;}ISDSession* UCAPI CRemoteConsoleSessionFactory::CreateSession( ISDConnection* pConnection ){ CRemoteConsoleSession* pSession = new CRemoteConsoleSession(); pSession->SetType(ST_SERVER_CS_OnlyRC); pSession->SetMsgHandle(&CRemoteConsoleSession::mHandles); return pSession;}
下面是CSNetSessionMgr.h
#pragma once#include "../../Share/Net/INetSessionMgr.h"#include "ParsePacket.h"class CSNetSessionMgr : public INetSessionMgr{public: CSNetSessionMgr(); virtual ~CSNetSessionMgr();public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection) { return NULL; /*重写*/} virtual ICliSession* UCAPI CreateConnectorSession(SESSION_TYPE type); virtual bool CreateConnector(SESSION_TYPE type, const char* ip, int port, int recvsize, int sendsize, int logicId);private: CSParser m_CSParser;};class CGateSessionFactory : public ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection);};class CSceneSessionFactory : public ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection);};class CRemoteConsoleSessionFactory : public ISDSessionFactory{public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection);};extern CGateSessionFactory gGateSessionFactory;extern CSceneSessionFactory gSceneSessionFactory;extern CRemoteConsoleSessionFactory gRemoteConsoleFactory;
下面是GSNetSessionMgr.cpp
#include "stdafx.h"#include "GSNetSessionMgr.h"#include "ClientSession.h"#include "M2CSession.h"#include "M2SSession.h"#include "M2BSession.h"SProfileNet gProfileNet = {0};GSNetSessionMgr::GSNetSessionMgr(){}GSNetSessionMgr::~GSNetSessionMgr(){}ISDSession* UCAPI GSNetSessionMgr::CreateSession( ISDConnection* pConnection ){ CClientSession* pSession = new CClientSession(); pSession->SetType(ST_SERVER_GS); pSession->SetMsgHandle(&CClientSession::mHandles); return pSession;}ICliSession* UCAPI GSNetSessionMgr::CreateConnectorSession( SESSION_TYPE type ){ ICliSession* pSession = NULL; if (type==ST_CLIENT_G2C) { pSession = new CM2CSession(); pSession->SetType(ST_CLIENT_G2C); pSession->SetMsgHandle(&CM2CSession::mHandles); } else if (type==ST_CLIENT_G2S) { pSession = new CM2SSession(); pSession->SetType(ST_CLIENT_G2S); pSession->SetMsgHandle(&CM2SSession::mHandles); } else if (type==ST_CLIENT_G2B) { pSession = new CM2BSession(); pSession->SetType(ST_CLIENT_G2B); pSession->SetMsgHandle(&CM2BSession::mHandles); } return pSession;}
下面是GSNetSessionMgr .h
#pragma once#include "../../Share/Net/INetSessionMgr.h"#include "ClientSession.h"struct SProfileNet{ UINT32 mClientCount; UINT32 mTimeForDealWithMsg;//处理消息时间// UINT32 mTimeForDealWithOther;//其他网络时间// std::map<UINT32,UINT32> mMessageCount;//消息数量//};extern SProfileNet gProfileNet;class GSNetSessionMgr : public INetSessionMgr{public: GSNetSessionMgr(); virtual ~GSNetSessionMgr();public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection); virtual ICliSession* UCAPI CreateConnectorSession(SESSION_TYPE type);};
下面是SSBattleNetSessionMgr.h
#pragma once#include "../../Share/Net/INetSessionMgr.h"class SSBattleNetSessionMgr : public INetSessionMgr{public: SSBattleNetSessionMgr(); virtual ~SSBattleNetSessionMgr();public: virtual ISDSession* UCAPI CreateSession(ISDConnection* pConnection); virtual ICliSession* UCAPI CreateConnectorSession(SESSION_TYPE type);};
SSBattleNetSessionMgr.cpp
#include "../stdafx.h"#include "SSBattleNetSessionMgr.h"#include "GateSession.h"#include "CentralSession.h"#include "SSLogSession.h"SSBattleNetSessionMgr::SSBattleNetSessionMgr(){ mIsUnSafeSend = true;}SSBattleNetSessionMgr::~SSBattleNetSessionMgr(){}ISDSession* UCAPI SSBattleNetSessionMgr::CreateSession( ISDConnection* pConnection ){ CGateSession* pSession = new CGateSession(); pSession->SetType(ST_SERVER_SS); pSession->SetMsgHandle(&CGateSession::mHandles); return pSession;}ICliSession* UCAPI SSBattleNetSessionMgr::CreateConnectorSession( SESSION_TYPE type ){ ICliSession* pSession = NULL; if (type==ST_CLIENT_S2C) { pSession = new CCentralSession(); pSession->SetType(ST_CLIENT_S2C); pSession->SetMsgHandle(&CCentralSession::mHandles); } else if (type == ST_CLIENT_S2Log){ pSession = new CSSLogSession(); pSession->SetType(ST_CLIENT_S2Log); pSession->SetMsgHandle(&CSSLogSession::mHandles); } return pSession;}
下面是ucnet.h
class ISDSessionFactory{public: /** * @brief Create an user implemented ISDSession object * @param poConnection : ISDConnection instance pointer * @return ISDSession instance pointer */ virtual ISDSession* UCAPI CreateSession(ISDConnection* poConnection) = 0;};
FR:海涛高软(hunk Xu) QQ技术交流群:386476712
阅读全文
0 0
- 最后一站 session相关
- 《c++最后一站》
- 最后一站 登录点击
- session相关
- Session 相关
- Session相关
- Session 相关
- session相关
- session相关
- 大学~恋爱的最后一站
- 最后一站网络模块图解
- 最后一站 消息注册及发送
- 节前最后一“枪”
- 最后一招
- 最后一门考试
- 最后一门考试
- 节前最后一“博”
- 2007最后一贴
- Batch Normalization 学习笔记(一))
- 【JavaWeb】Log4j2的使用(二)
- 用宏实现函数—1.写一个宏可以将一个数字的奇数位和偶数位交换 2.求两个数中求较大值
- 01js语法基础_初识JS
- leetCode-Subsets II
- 最后一站 session相关
- 学习笔记5
- hdu1512 Monkey King(可并堆插入+删除)
- java面向对象之抽象, 接口
- 3-sum问题
- 三级菜单
- 基于openerp的erpcmsone:可当网站程序可当内部知识管理及ERP,及前后端合一的通用网站程序选型,设计与部署
- 机器学习实战K-近邻算法
- 欢迎使用CSDN-markdown编辑器