|
|
@@ -16,28 +16,33 @@ boost::asio::ip::tcp::socket& RpcCommunicator::Socket()
|
|
|
return socket_;
|
|
|
}
|
|
|
|
|
|
-void RpcCommunicator::RecvMeta()
|
|
|
+void RpcCommunicator::Stop()
|
|
|
+{
|
|
|
+ socket_.close();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void RpcCommunicator::RecvMeta(RpcMetaPtr meta, StringPtr message)
|
|
|
{
|
|
|
- RpcMetaPtr meta(new RpcMeta());
|
|
|
boost::asio::async_read(socket_,
|
|
|
boost::asio::buffer(reinterpret_cast<char*>(meta.get()), sizeof(*meta)),
|
|
|
- boost::bind(&RpcCommunicator::RecvMessage, this, meta,
|
|
|
- boost::asio::placeholders::error));
|
|
|
+ boost::bind(&RpcCommunicator::RecvMessage, this,
|
|
|
+ meta, message, boost::asio::placeholders::error));
|
|
|
}
|
|
|
|
|
|
-void RpcCommunicator::RecvMessage(RpcMetaPtr meta, const boost::system::error_code& err)
|
|
|
+void RpcCommunicator::RecvMessage(RpcMetaPtr meta, StringPtr message,
|
|
|
+ const boost::system::error_code& err)
|
|
|
{
|
|
|
if (err)
|
|
|
{
|
|
|
LOG(ERROR) << "receive message size failed: " << err.message();
|
|
|
return;
|
|
|
}
|
|
|
- StringPtr message(new std::string(meta->size, '\0'));
|
|
|
+ message->resize(meta->size, '\0');
|
|
|
boost::asio::async_read(socket_,
|
|
|
boost::asio::buffer(reinterpret_cast<char*>(&message->at(0)), meta->size),
|
|
|
boost::bind(&RpcCommunicator::RecvDone, this,
|
|
|
- meta, message,
|
|
|
- boost::asio::placeholders::error));
|
|
|
+ meta, message, boost::asio::placeholders::error));
|
|
|
}
|
|
|
|
|
|
void RpcCommunicator::RecvDone(RpcMetaPtr meta, StringPtr message,
|
|
|
@@ -51,48 +56,46 @@ void RpcCommunicator::RecvDone(RpcMetaPtr meta, StringPtr message,
|
|
|
OnRecvMessage(meta, message);
|
|
|
}
|
|
|
|
|
|
-void RpcCommunicator::SendMeta(RpcMeta meta, std::string message)
|
|
|
+void RpcCommunicator::OnRecvMessage(RpcMetaPtr meta, StringPtr message)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void RpcCommunicator::SendMeta(RpcMetaPtr meta, StringPtr message)
|
|
|
{
|
|
|
- CHECK_EQ(meta.size, message.size()) << "meta and message size not match!";
|
|
|
+ CHECK_EQ(meta->size, message->size()) << "meta and message size not match!";
|
|
|
boost::asio::async_write(socket_,
|
|
|
- boost::asio::buffer(reinterpret_cast<char*>(&meta), sizeof(meta)),
|
|
|
- boost::bind(&RpcCommunicator::SendMessage, this, message,
|
|
|
- boost::asio::placeholders::error));
|
|
|
+ boost::asio::buffer(reinterpret_cast<char*>(meta.get()), sizeof(*meta)),
|
|
|
+ boost::bind(&RpcCommunicator::SendMessage, this,
|
|
|
+ meta, message, boost::asio::placeholders::error));
|
|
|
}
|
|
|
|
|
|
-void RpcCommunicator::SendMessage(std::string message, const boost::system::error_code& err)
|
|
|
+void RpcCommunicator::SendMessage(RpcMetaPtr meta, StringPtr message,
|
|
|
+ const boost::system::error_code& err)
|
|
|
{
|
|
|
if (err)
|
|
|
{
|
|
|
LOG(ERROR) << "send message size failed: " << err.message();
|
|
|
return;
|
|
|
}
|
|
|
- boost::asio::async_write(socket_, boost::asio::buffer(message),
|
|
|
+ boost::asio::async_write(socket_, boost::asio::buffer(*message),
|
|
|
boost::bind(&RpcCommunicator::SendDone, this,
|
|
|
- boost::asio::placeholders::error));
|
|
|
+ meta, message, boost::asio::placeholders::error));
|
|
|
}
|
|
|
|
|
|
-void RpcCommunicator::SendDone(const boost::system::error_code& err)
|
|
|
+void RpcCommunicator::SendDone(RpcMetaPtr meta, StringPtr message,
|
|
|
+ const boost::system::error_code& err)
|
|
|
{
|
|
|
if (err)
|
|
|
{
|
|
|
LOG(ERROR) << "send message failed: " << err.message();
|
|
|
return;
|
|
|
}
|
|
|
- OnSendMessage();
|
|
|
-}
|
|
|
-
|
|
|
-void RpcCommunicator::OnRecvMessage(RpcMetaPtr meta, StringPtr message)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-void RpcCommunicator::OnSendMessage()
|
|
|
-{
|
|
|
+ OnSendMessage(meta, message);
|
|
|
}
|
|
|
|
|
|
-void RpcCommunicator::Stop()
|
|
|
+void RpcCommunicator::OnSendMessage(RpcMetaPtr meta, StringPtr message)
|
|
|
{
|
|
|
- socket_.close();
|
|
|
}
|
|
|
|
|
|
} // namespace Egametang
|