消息通信Client端
基于boost实现的消息通信Client端,目前仅用于发送消息。
1 #ifndef __cooper_client_h_ 2 #define __cooper_client_h_ 3 4 #include "cooper_message.h" 5 6 using boost::asio::ip::tcp; 7 8 //---------------------------------------------------------------------- 9 10 class CooperClient 11 { 12 public: 13 CooperClient(boost::asio::io_service& io_service, 14 tcp::resolver::iterator endpoint_iterator); 15 ~CooperClient(); 16 void AsyncWrite(msg_ptr msg); 17 18 private: 19 void HandleConnect(const boost::system::error_code& error, 20 tcp::resolver::iterator endpoint_iterator); 21 void HandleWrite(const boost::system::error_code& error); 22 void Close(); 23 24 private: 25 tcp::socket socket_; 26 boost::asio::io_service& io_service_; 27 }; 28 29 #endif // __cooper_client_h_
1 #include "cooper_client.h" 2 3 //---------------------------------------------------------------------- 4 5 CooperClient::CooperClient(boost::asio::io_service& io_service, 6 tcp::resolver::iterator endpoint_iterator) 7 : socket_(io_service), io_service_(io_service) 8 { 9 tcp::endpoint endpoint = *endpoint_iterator; 10 socket_.async_connect(endpoint, 11 boost::bind(&CooperClient::HandleConnect, this, 12 boost::asio::placeholders::error, ++endpoint_iterator)); 13 } 14 15 CooperClient::~CooperClient() 16 { 17 printf("client exit\n"); 18 Close(); 19 } 20 21 void CooperClient::AsyncWrite(msg_ptr msg) 22 { 23 boost::asio::async_write(socket_, 24 boost::asio::buffer(msg->get_data(), msg->get_data_length()), 25 boost::bind(&CooperClient::HandleWrite, this, 26 boost::asio::placeholders::error)); 27 } 28 29 void CooperClient::HandleConnect(const boost::system::error_code& error, 30 tcp::resolver::iterator endpoint_iterator) 31 { 32 if (error) { 33 Close(); 34 } else if (endpoint_iterator != tcp::resolver::iterator()) { 35 socket_.close(); 36 tcp::endpoint endpoint = *endpoint_iterator; 37 socket_.async_connect(endpoint, 38 boost::bind(&CooperClient::HandleConnect, this, 39 boost::asio::placeholders::error, ++endpoint_iterator)); 40 } 41 } 42 43 void CooperClient::HandleWrite(const boost::system::error_code& error) 44 { 45 printf("Write msg done.\n"); 46 Close(); 47 } 48 49 void CooperClient::Close() 50 { 51 socket_.close(); 52 io_service_.stop(); 53 }