最后一站 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