マルチクライアント/サーバーシステムを構築します。次のように動作すると予想されます。
クライアントは TCP/IP を使用してサーバーと通信します
クライアントがサーバーに接続すると、クライアントはコマンド文字列を送信します。サーバーはコマンド文字列を受信すると、それを解析し、必要な作業を行ってから、クライアントに応答を送信します。
クライアントが TCP 接続を閉じると、サーバーはこのクライアントに関連するリソースを破棄します。
サーバーはマルチスレッド プログラムです。command
receive
、 commandparse
、 command 、deal
およびクライアントへの応答は、それぞれ別のスレッドにある場合があります。
CmdTcpContext
ここで、クライアントに関連するデータを含むクラスを定義したいと思います。
class CmdTcpContext
18 {
19 public:
20 CmdTcpContext(){recv_buff_.SetRecvList(&recv_list_);}
21 ~CmdTcpContext(){}
22
23 CmdRecvBuffer & recv_buff(){return recv_buff_;}
24 SendBuffer & send_buff(){return send_buff_;}
25
26 RecvList<CmdPackage> & recv_list(){return recv_list_;}
27 RecvList<CmdPackage> & send_list(){return send_list_;}
28
29 InetAddr & inet_addr(){return addr_;}
30 SockStream & sock_stream(){return stream_;}
31
32 EventHandler * event_handler(){return handler_;}
33 void event_handler(EventHandler * eh){handler_ = eh;}
34 private:
35 SockStream stream_;
36 InetAddr addr_;
37
38 CmdRecvBuffer recv_buff_;
39 SendBuffer send_buff_;
40
41 RecvList<CmdPackage> recv_list_;
42 RecvList<CmdPackage> send_list_;
43
44 EventHandler *handler_;
45 };
CmdTcpContext
私の問題は、クライアントが接続を閉じたときにオブジェクトを破棄するにはどうすればよいですか?