计划完 Transport/Protocol/Processor 三个通讯处理赏罚条理后,就必要一个组合这三个条理的代码,那就是 Server 类。这个类在 Init() 的时辰,必要上面三个范例的子类作为参数,以组合成差异成果的处事器,如:
- TlvProtocol tlv_protocol; // Type Length Value 名目分包协议,必要和客户端同等
- TcpTransport tcp_transport; // 行使 TCP 的通讯协议,默认监听 0.0.0.0:6666
- EchoProcessor echo_processor; // 营业逻辑处理赏罚器
- Server server; // DenOS 的收集处事器主工具
- server.Init(&tcp_transport, &tlv_protocol, &echo_processor); // 组装一个游戏处事器工具:TLV 编码、TCP 通讯和覆信处事
Server 范例还必要一个 Update() 函数,让用户历程的“主轮回”不断的挪用,用来驱动整个措施的运行。这个 Update() 函数的内容很是明晰:
- 搜查收集是否稀有据必要处理赏罚(通过 Transport 工具)
- 稀有据的话就举办解码处理赏罚(通过 Protocol 工具)
- 解码乐成后举办营业逻辑的分发挪用(通过 Processor 工具)
其它,Server 还必要处理赏罚一些特另外成果,好比维护一个会话缓存池(Session),提供发送 Response 和 Notice 动静的接口。当这些事变都完成后,整套体系已经可以用来作为一个较量“通用”的收集动静处事器框架存在了。剩下的就是添加各类 Transport/Protocol/Processor 子类的事变。
- class Server {
-
- public:
- Server();
- virtual ~Server();
-
- /**
- * 初始化处事器,必要选择组装你的通讯协议链
- */
- int Init(Transport* transport, Protocol* protocol, Processor* processor, Config* config = NULL);
-
- /**
- * 阻塞要领,进入主轮回。
- */
- void Start();
-
- /**
- * 必要轮回挪用驱动的要领。假如返回值是0暗示空闲。其他返回值暗示处理赏罚过的使命数。
- */
- virtual int Update();
- void ClosePeer(Peer* peer, bool is_clear = false); //封锁当个毗连,is_clear 暗示是否最终整体整理
-
- /**
- * 封锁处事器
- */
- void Close();
-
- /**
- * 对某个客户端发送关照动静,
- * 参数peer代表要关照的对端。
- */
- int Inform(const Notice& notice, const Peer& peer);
-
- /**
- * 对某个 Session ID 对应的客户端发送关照动静,返回 0 暗示可以发送,其他值为发送失败。
- * 此接口能支持断线重连,只要客户端已经乐成毗连,并行使旧的 Session ID,同样有用。
- */
- int Inform(const Notice& notice, const std::string& session_id);
-
- /**
- * 对某个客户端发来的Request发回回应动静。
- * 参数response的成员seqid必需正确填写,才气正确回应。
- * 返回0乐成,其余值(-1)暗示失败。
- */
- int Reply(Response* response, const Peer& peer);
-
- /**
- * 对某个 Session ID 对应的客户端发送回应动静。
- * 参数 response 的 seqid 成员体系会自动填写会话中记录的数值。
- * 此接口能支持断线重连,只要客户端已经乐成毗连,并行使旧的 Session ID,同样有用。
- * 返回0乐成,其余值(-1)暗示失败。
- */
- int Reply(Response* response, const std::string& session_id);
-
- /**
- * 会话成果
- */
- Session* GetSession(const std::string& session_id = "", bool use_this_id = false);
- Session* GetSessionByNumId(int session_id = 0);
- bool IsExist(const std::string& session_id);
-
- };
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|