Tang Hai 14 лет назад
Родитель
Сommit
1058864357

+ 3 - 3
Src/CMakeLists.txt

@@ -13,6 +13,8 @@ ENDIF()
 
 INCLUDE_DIRECTORIES(Egametang)
 INCLUDE_DIRECTORIES(ThirdParty)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/Egametang)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/ThirdParty)
 
 FIND_PACKAGE(Protobuf REQUIRED)
 INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS})
@@ -28,6 +30,4 @@ SET(Boost_USE_STATIC_RUNTIME OFF)
 INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIRS})
 
 ADD_SUBDIRECTORY(Egametang)
-ADD_SUBDIRECTORY(ThirdParty)
-
-
+ADD_SUBDIRECTORY(ThirdParty)

+ 5 - 2
Src/Egametang/Rpc/CMakeLists.txt

@@ -1,14 +1,17 @@
 PROTOBUF_GENERATE_CPP(proto_srcs proto_hdrs 
-	RpcProtobufData.proto 
-	RpcChannelTest.proto
+	RpcData.proto 
+	Echo.proto
 	)
 
 SET(RpcSrc 
 	RpcCommunicator.cc
+	RpcController.cc
+	RpcHandler.cc
 	RpcChannel.cc
 	${proto_srcs}
 	)
 
+
 ADD_LIBRARY(Rpc ${RpcSrc})
 
 ADD_EXECUTABLE(RpcCommunicatorTest RpcCommunicatorTest.cc)

+ 13 - 0
Src/Egametang/Rpc/Echo.proto

@@ -0,0 +1,13 @@
+package Egametang;
+
+message EchoRequest {
+	required int32 num = 1;
+};
+
+message EchoResponse {
+	required int32 num = 1;
+};
+
+service EchoService {
+  rpc Echo(EchoRequest) returns (EchoResponse);
+};

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

@@ -2,10 +2,11 @@
 #include <boost/bind.hpp>
 #include <glog/logging.h>
 #include <google/protobuf/message.h>
+#include <google/protobuf/descriptor.h>
 #include "Rpc/RpcCommunicator.h"
 #include "Rpc/RpcChannel.h"
 #include "Rpc/RpcHandler.h"
-#include "Rpc/RpcProtobufData.pb.h"
+#include "Rpc/RpcData.pb.h"
 
 namespace Egametang {
 
@@ -21,6 +22,10 @@ RpcChannel::RpcChannel(boost::asio::io_service& io_service, std::string host, in
 					boost::asio::placeholders::error));
 }
 
+RpcChannel::~RpcChannel()
+{
+}
+
 void RpcChannel::OnAsyncConnect(const boost::system::error_code& err)
 {
 	if (err)
@@ -34,7 +39,7 @@ void RpcChannel::OnAsyncConnect(const boost::system::error_code& err)
 void RpcChannel::OnRecvMessage(StringPtr ss)
 {
 	RpcResponse response;
-	Response->ParseFromString(*ss);
+	response.ParseFromString(*ss);
 	RpcHandlerPtr handler = handlers_[response.id()];
 	handler->GetResponse()->ParseFromString(response.response());
 

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

@@ -1,5 +1,5 @@
-#ifndef RPC_RPC_CHANNEL_H
-#define RPC_RPC_CHANNEL_H
+#ifndef RPC_RPCCHANNEL_H
+#define RPC_RPCCHANNEL_H
 
 #include <google/protobuf/service.h>
 #include <boost/unordered_map.hpp>
@@ -41,4 +41,4 @@ public:
 
 } // namespace Egametang
 
-#endif // RPC_RPC_CHANNEL_H
+#endif // RPC_RPCCHANNEL_H

+ 20 - 9
Src/Egametang/Rpc/RpcChannelTest.cc

@@ -2,8 +2,10 @@
 #include <gflags/gflags.h>
 #include <glog/logging.h>
 #include "Rpc/RpcChannel.h"
-#include "Rpc/RpcProtobufData.pb.h"
-#include "Rpc/RpcChannelTest.pb.h"
+#include "Thread/CountBarrier.h"
+#include "Rpc/RpcController.h"
+#include "Rpc/RpcData.pb.h"
+#include "Rpc/Echo.pb.h"
 
 namespace Egametang {
 
@@ -56,7 +58,7 @@ public:
 		// 接收消息
 		RpcRequest rpc_request;
 		rpc_request.ParseFromString(*ss);
-		RpcChannelTestRequest request;
+		EchoRequest request;
 		request.ParseFromString(rpc_request.request());
 
 		num_ = request.num();
@@ -64,9 +66,9 @@ public:
 		// 回一个消息
 		RpcResponse rpc_response;
 		rpc_response.set_id(rpc_request.id());
-		rpc_response.set_type(ResponseType::RESPONSE_TYPE_OK);
+		rpc_response.set_type(RESPONSE_TYPE_OK);
 
-		RpcChannelTestResponse response;
+		EchoResponse response;
 		response.set_num(num_);
 		rpc_response.set_response(response.SerializeAsString());
 
@@ -88,7 +90,7 @@ private:
 
 public:
 	RpcChannelTest():
-		rpc_server_(io_service_, global_port, barrier_)
+		barrier_(2), rpc_server_(io_service_, global_port, barrier_)
 	{
 	}
 };
@@ -98,11 +100,11 @@ TEST_F(RpcChannelTest, CallMethod)
 {
 	RpcChannel rpc_channel(io_service_, "127.0.0.1", global_port);
 
-	RpcChannelTestService service(rpc_channel);
+	EchoService_Stub service(&rpc_channel);
 
-	RpcChannelTestRequest request;
+	EchoRequest request;
 	request.set_num(100);
-	RpcChannelTestResponse response;
+	EchoResponse response;
 	RpcController controller;
 
 	ASSERT_EQ(0, response.num());
@@ -116,3 +118,12 @@ TEST_F(RpcChannelTest, CallMethod)
 }
 
 } // namespace Egametang
+
+
+int main(int argc, char* argv[])
+{
+	testing::InitGoogleTest(&argc, argv);
+	google::ParseCommandLineFlags(&argc, &argv, true);
+	google::InitGoogleLogging(argv[0]);
+	return RUN_ALL_TESTS();
+}

+ 0 - 13
Src/Egametang/Rpc/RpcChannelTest.proto

@@ -1,13 +0,0 @@
-package Egametang;
-
-message RpcChannelTestRequest {
-	required int32 num = 1;
-};
-
-message RpcChannelTestResponse {
-	required int32 num = 1;
-};
-
-service RpcChannelTestService {
-  rpc Echo(RpcChannelTestRequest) returns (RpcChannelTestResponse);
-};

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

@@ -31,7 +31,7 @@ void RpcController::StartCancel()
 {
 }
 
-void RpcController::SetFailed(const string & reason)
+void RpcController::SetFailed(const std::string& reason)
 {
 }
 
@@ -39,7 +39,7 @@ bool RpcController::IsCanceled() const
 {
 }
 
-void RpcController::NotifyOnCancel(Closure *callback)
+void RpcController::NotifyOnCancel(google::protobuf::Closure *callback)
 {
 }
 

+ 5 - 5
Src/Egametang/Rpc/RpcController.h

@@ -1,5 +1,5 @@
-#ifndef RPC_RPC_CONTROLLER_H
-#define RPC_RPC_CONTROLLER_H
+#ifndef RPC_RPCCONTROLLER_H
+#define RPC_RPCCONTROLLER_H
 
 #include <google/protobuf/service.h>
 
@@ -23,11 +23,11 @@ public:
 	virtual void StartCancel();
 
 	// server
-	virtual void SetFailed(const string& reason);
+	virtual void SetFailed(const std::string& reason);
 	virtual bool IsCanceled() const;
-	virtual void NotifyOnCancel(Closure* callback);
+	virtual void NotifyOnCancel(google::protobuf::Closure* callback);
 };
 
 } // namespace Egametang
 
-#endif // RPC_RPC_CONTROLLER_H
+#endif // RPC_RPCCONTROLLER_H

+ 0 - 0
Src/Egametang/Rpc/RpcProtobufData.proto → Src/Egametang/Rpc/RpcData.proto