有了 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产品中心研发创新类型游戏。 , (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|