有了 Server 范例,必定也必要有 Client 范例。而 Client 范例的计划和 Server 相同,但就不是行使 Transport 接口作为传输层,而是 Connector 接口。不外 Protocol 的抽象层是完全重用的。Client 并不必要 Processor 这种情势的回调,而是直接传入接管数据动静就提倡回调的接口工具 ClientCallback。
- class ClientCallback {
-
- public:
-
- ClientCallback() {
- }
- virtual ~ClientCallback() {
- // Do nothing
- }
-
- /**
- * 当毗连成立乐成时回调此要领。
- * @return 返回 -1 暗示不接管这个毗连,必要封锁掉此毗连。
- */
- virtual int OnConnected() {
- return 0;
- }
-
- /**
- * 当收集毗连被封锁的时辰,挪用此要领
- */
- virtual void OnDisconnected() { // Do nothing
- }
-
- /**
- * 收到相应,可能哀求超时,此要了解被挪用。
- * @param response 从处事器发来的回应
- * @return 假如返回非0值,处事器会打印一行错误日记。
- */
- virtual int Callback(const Response& response) {
- return 0;
- }
-
- /**
- * 当哀求产生错误,好比超时的时辰,返回这个错误
- * @param err_code 错误码
- */
- virtual void OnError(int err_code){
- WARN_LOG("The request is timeout, err_code: %d", err_code);
- }
-
- /**
- * 收到关照动静时,此要了解被挪用
- */
- virtual int Callback(const Notice& notice) {
- return 0;
- }
-
- /**
- * 返回此工具是否应该被删除。此要了解被在 Callback() 挪用前挪用。
- * @return 假如返回 true,则会挪用 delete 此工具的指针。
- */
- virtual bool ShouldBeRemoved() {
- return false;
- }
- };
-
- class Client : public Updateable {
-
- public:
- Client(); virtual ~Client();
-
- /**
- * 毗连处事器
- * @param connector 传输协议,如 TCP, UDP ...
- * @param protocol 分包协议,如 TLV, Line, TDR ...
- * @param notice_callback 收到关照后触发的回调工具,假如传输协议有“毗连观念”(如TCP/TCONND),成立、封锁毗连时也会挪用。
- * @param config 设置文件工具,将读取以下设置项目:MAX_TRANSACTIONS_OF_CLIENT 客户端最大并发毗连数; BUFFER_LENGTH_OF_CLIENT客户端收包缓存;CLIENT_RESPONSE_TIMEOUT 客户端相应守候超时时刻。
- * @return 返回 0 暗示乐成,其他暗示失败
- */
- int Init(Connector* connector, Protocol* protocol,
- ClientCallback* notice_callback = NULL, Config* config = NULL);
-
- /**
- * callback 参数可觉得 NULL,暗示不必要回应,只是纯真的发包即可。
- */
- virtual int SendRequest(Request* request, ClientCallback* callback = NULL);
-
- /**
- * 返回值暗示有几多数据必要处理赏罚,返回-1为堕落,必要封锁毗连。返回0暗示没稀有据必要处理赏罚。
- */
- virtual int Update();
- virtual void OnExit();
- void Close();
- Connector* connector() ;
- ClientCallback* notice_callback() ;
- Protocol* protocol() ;
- };
至此,客户端和处事器端根基计划完成,可以直接通过编写测试代码,来搜查是否运行正常。
关于作者:韩伟,腾讯互娱高级工程师,今朝在Next产物中心研发创新范例游戏。 , (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|