Преглед изворни кода

准备实现RpcChannelTest

tanghai пре 14 година
родитељ
комит
6a7b8de233

+ 2 - 2
Src/Egametang/Rpc/RpcChannel.cc

@@ -34,9 +34,9 @@ void RpcChannel::OnRecvMessage(StringPtr ss)
 	RpcHandlerPtr handler = handlers_[response.id()];
 	handler->GetResponse()->ParseFromString(response.response());
 
-	if (handler->done_ != NULL)
+	if (handler->GetDone() != NULL)
 	{
-		handler->done_->Run();
+		handler->GetDone()->Run();
 	}
 
 	handlers_.erase(response.id());

+ 2 - 2
Src/Egametang/Rpc/RpcChannel.h

@@ -25,9 +25,9 @@ private:
 
 	void OnAsyncConnect(const boost::system::error_code& err);
 	void SendRequest(RpcRequestPtr request);
-	// recieve response
+
 	virtual void OnRecvMessage(StringPtr ss);
-	virtual void OnSendMessage(int32 id, RpcHandlerPtr handler);
+	virtual void OnSendMessage();
 
 public:
 	RpcChannel(boost::asio::io_service& service, std::string& host, int port);

+ 49 - 27
Src/Egametang/Rpc/RpcChannelTest.cc

@@ -7,52 +7,74 @@ namespace Egametang {
 
 static int port = 10001;
 
-class RpcServerTest
+class RPCServerTest: public RPCCommunicator
 {
 public:
-	boost::asio::io_service io_service_;
+	CountBarrier& barrier_;
+	std::string recv_string_;
 	boost::asio::ip::tcp::acceptor acceptor_;
-	boost::asio::ip::tcp::socket socket_;
-
-	int size;
 
 public:
-	RpcServerTest(boost::asio::io_service& service, int port):
-		io_service_(service), size(0)
+	RPCServerTest(boost::asio::io_service& io_service, int port, CountBarrier& barrier):
+		RPCCommunicator(io_service), acceptor_(io_service),
+		barrier_(barrier)
 	{
 		boost::asio::ip::address address;
-		address.from_string("localhost");
+		address.from_string("127.0.0.1");
 		boost::asio::ip::tcp::endpoint endpoint(address, port);
-		boost::asio::ip::tcp::acceptor acceptor;
-		acceptor.open(endpoint.protocol());
-		acceptor.set_option(
-		boost::asio::ip::tcp::acceptor::reuse_address(true));
-		acceptor.bind(endpoint);
-		acceptor.listen();
-		acceptor.async_accept(socket_);
+		acceptor_.open(endpoint.protocol());
+		acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
+		acceptor_.bind(endpoint);
+		acceptor_.listen();
+		acceptor_.async_accept(socket_,
+				boost::bind(&RPCServerTest::OnAsyncAccept, this,
+						boost::asio::placeholders::error));
 	}
-	~RpcServerTest();
 
-	void RecvMessageSize()
+	void OnAsyncAccept(const boost::system::error_code& err)
 	{
+		if (err)
+		{
+			LOG(ERROR) << "async accept failed: " << err.message();
+			return;
+		}
+		RecvSize();
 	}
-};
 
-class RpcChannelTest: public testing::Test
-{
-private:
-	int port;
-public:
-	RpcChannelTest()
+	void Start()
 	{
+		VLOG(2) << "Start Server";
+		io_service_.run();
 	}
 
-	void SetUp()
+	void Stop()
 	{
-		port = 10001;
+		acceptor_.close();
+		socket_.close();
 	}
 
-	void TearDown()
+	virtual void OnRecvMessage(StringPtr ss)
+	{
+		VLOG(2) << "Server Recv string: " << *ss;
+		recv_string_ = *ss;
+		std::string send_string("response test rpc communicator string");
+		SendSize(send_string.size(), send_string);
+		barrier_.Signal();
+	}
+	virtual void OnSendMessage()
+	{
+	}
+};
+
+class RpcChannelTest: public testing::Test
+{
+private:
+	boost::asio::io_service io_server_;
+	boost::asio::io_service io_client_;
+	RPCServerTest rpc_server_;
+
+public:
+	RpcChannelTest(): rpc_server_()
 	{
 	}
 };

+ 5 - 6
Src/Egametang/Rpc/RpcSession.cc

@@ -7,10 +7,6 @@ RpcSession::RpcSession(RpcServer& rpc_server):
 {
 }
 
-void RpcSession::OnSendMessage(int32 id, RpcHandlerPtr handler)
-{
-}
-
 void RpcSession::OnRecvMessage(StringPtr ss)
 {
 	RpcRequestPtr request(new RpcRequest);
@@ -25,11 +21,14 @@ void RpcSession::OnRecvMessage(StringPtr ss)
 	rpc_server_.RunService(shared_from_this(), request,
 			boost::bind(&RpcSession::SendResponse,
 					shared_from_this(), response));
-
 	// read size
 	RecvSize();
 }
 
+void RpcSession::OnSendMessage()
+{
+}
+
 void RpcSession::SendResponse(RpcResponsePtr response)
 {
 	int size = response->ByteSize();
@@ -48,4 +47,4 @@ void RpcSession::Stop()
 	rpc_server_.RemoveSession(shared_from_this());
 }
 
-}
+} // namespace Egametang

+ 3 - 3
Src/Egametang/Rpc/RpcSession.h

@@ -19,9 +19,9 @@ private:
 	RpcServer& rpc_server_;
 
 	void SendResponse(RpcResponsePtr response);
-	virtual void OnRecvMessage(StringPtr ss, const boost::system::error_code& err);
-	virtual void OnSendMessage(int32 id, RpcHandlerPtr handler,
-			const boost::system::error_code& err);
+
+	virtual void OnRecvMessage(StringPtr ss);
+	virtual void OnSendMessage();
 
 public:
 	RpcSession(RpcServer& server);