Răsfoiți Sursa

支持生成protobuf

Tang Hai 14 ani în urmă
părinte
comite
480d529c0a

+ 24 - 8
Src/CMakeLists.txt

@@ -1,12 +1,28 @@
-project(Cpp)
-cmake_minimum_required(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 
 
-enable_testing()
+SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
+SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
 
 
-include_directories(Egametang)
-include_directories(ThirdParty)
+PROJECT(Cpp)
+
+OPTION(BUILD_TESTS "Decide if the test suite shall be built or not" ON)
+
+IF(BUILD_TESTS)
+	ENABLE_TESTING()
+ENDIF()
+
+INCLUDE_DIRECTORIES(Egametang)
+INCLUDE_DIRECTORIES(ThirdParty)
+
+FIND_PACKAGE(Protobuf REQUIRED)
+INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS})
+LINK_DIRECTORIES(${PROTOBUF_LIBRARIES})
+
+FIND_PACKAGE(PythonLibs REQUIRED)
+INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
+LINK_DIRECTORIES(${PYTHON_LIBRARIES})
+
+ADD_SUBDIRECTORY(Egametang)
+ADD_SUBDIRECTORY(ThirdParty)
 
 
-link_directories(/usr/local/lib)
 
 
-add_subdirectory(Egametang)
-add_subdirectory(ThirdParty)

+ 14 - 16
Src/Egametang/Python/CMakeLists.txt

@@ -1,28 +1,26 @@
-set(PythonSrc 
+SET(PythonSrc 
 	PythonInit.cc 
 	PythonInit.cc 
 	PythonEntry.cc
 	PythonEntry.cc
 )
 )
-add_library(PythonEntry ${PythonSrc})
+ADD_LIBRARY(PythonEntry ${PythonSrc})
 
 
-include_directories(/usr/include/python2.6)
+ADD_EXECUTABLE(PythonInitTest PythonInitTest.cc)
+ADD_EXECUTABLE(PythonEntryTest PythonEntryTest.cc)
 
 
-add_executable(PythonInitTest PythonInitTest.cc)
-add_executable(PythonEntryTest PythonEntryTest.cc)
-
-set(Excutes 
+SET(Excutes 
 	PythonInitTest 
 	PythonInitTest 
 	PythonEntryTest
 	PythonEntryTest
 )
 )
 
 
-foreach(Excute ${Excutes})
-	target_link_libraries(${Excute}
+FOREACH(Excute ${Excutes})
+	TARGET_LINK_LIBRARIES(${Excute}
 		PythonEntry
 		PythonEntry
 		boost_python
 		boost_python
-		python2.6
-		glog
-		gflags
-		gtest
-		gmock
+		${PYTHON_LIBRARIES}
+		Glog
+		Gflags
+		Gtest
+		Gmock
 	)
 	)
-	add_test(${Excute} ${Excute})
-endforeach()
+	ADD_TEST(${Excute} ${Excute})
+ENDFOREACH()

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

@@ -1,5 +1,8 @@
+protobuf_generate_cpp(proto_srcs proto_hdrs RpcProtobufData.proto)
+
 set(RpcSrc 
 set(RpcSrc 
 	RPCCommunicator.cc
 	RPCCommunicator.cc
+	${proto_srcs}
 	)
 	)
 
 
 add_library(Rpc ${RpcSrc})
 add_library(Rpc ${RpcSrc})
@@ -14,13 +17,13 @@ foreach(Excute ${Excutes})
 	target_link_libraries(${Excute}
 	target_link_libraries(${Excute}
 		Rpc
 		Rpc
 		Thread
 		Thread
+		${protobuf_library}
 		boost_thread
 		boost_thread
 		boost_system
 		boost_system
-		protobuf
-		glog
-		gflags
-		gtest
-		gmock
+		Glog
+		Gflags
+		Gtest
+		Gmock
 	)
 	)
 	add_test(${Excute} ${Excute})
 	add_test(${Excute} ${Excute})
 endforeach()
 endforeach()

+ 1 - 2
Src/Egametang/Rpc/RPCCommunicatorTest.cc

@@ -146,13 +146,12 @@ public:
 TEST_F(RPCCommunicatorTest, ClientSendString)
 TEST_F(RPCCommunicatorTest, ClientSendString)
 {
 {
 	ThreadPool thread_pool(2);
 	ThreadPool thread_pool(2);
-	thread_pool.Start();
 	thread_pool.PushTask(boost::bind(&RPCServerTest::Start, &rpc_server_));
 	thread_pool.PushTask(boost::bind(&RPCServerTest::Start, &rpc_server_));
 	thread_pool.PushTask(boost::bind(&RPCClientTest::Start, &rpc_client_));
 	thread_pool.PushTask(boost::bind(&RPCClientTest::Start, &rpc_client_));
 	barrier_.Wait();
 	barrier_.Wait();
 	ASSERT_EQ(std::string("send test rpc communicator string"), rpc_server_.recv_string_);
 	ASSERT_EQ(std::string("send test rpc communicator string"), rpc_server_.recv_string_);
 	ASSERT_EQ(std::string("response test rpc communicator string"), rpc_client_.recv_string_);
 	ASSERT_EQ(std::string("response test rpc communicator string"), rpc_client_.recv_string_);
-	thread_pool.Stop();
+	thread_pool.Wait();
 	rpc_server_.Stop();
 	rpc_server_.Stop();
 	rpc_client_.Stop();
 	rpc_client_.Stop();
 }
 }

+ 1 - 1
Src/Egametang/Rpc/RpcProtobufData.proto

@@ -1,4 +1,4 @@
-package Hainan;
+package Egametang;
 
 
 enum ResponseType
 enum ResponseType
 {
 {

+ 4 - 9
Src/Egametang/Rpc/RpcServer.cc

@@ -19,8 +19,8 @@ RpcServer::RpcServer(boost::asio::io_service& io_service, int port, ThreadPool&
 	acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
 	acceptor_.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
 	acceptor_.bind(endpoint);
 	acceptor_.bind(endpoint);
 	acceptor_.listen();
 	acceptor_.listen();
-	RpcSessionPtr new_session(new RpcSession(sessions_));
-	acceptor_.async_accept(new_session->socket(),
+	RpcSessionPtr new_session(new RpcSession(*this));
+	acceptor_.async_accept(new_session->Socket(),
 			boost::bind(&RpcServer::OnAsyncAccept, this,
 			boost::bind(&RpcServer::OnAsyncAccept, this,
 					new_session, boost::asio::placeholders::error));
 					new_session, boost::asio::placeholders::error));
 }
 }
@@ -35,7 +35,7 @@ void RpcServer::OnAsyncAccept(RpcSessionPtr session, const boost::system::error_
 	session->Start();
 	session->Start();
 	sessions_.insert(session);
 	sessions_.insert(session);
 	RpcSessionPtr new_session(new RpcSession(*this));
 	RpcSessionPtr new_session(new RpcSession(*this));
-	acceptor_.async_accept(new_session->socket(),
+	acceptor_.async_accept(new_session->Socket(),
 			boost::bind(&RpcServer::OnAsyncAccept, this,
 			boost::bind(&RpcServer::OnAsyncAccept, this,
 					boost::asio::placeholders::error));
 					boost::asio::placeholders::error));
 }
 }
@@ -43,7 +43,7 @@ void RpcServer::OnAsyncAccept(RpcSessionPtr session, const boost::system::error_
 void RpcServer::Callback(RpcSessionPtr session,
 void RpcServer::Callback(RpcSessionPtr session,
 		boost::function<void (RpcSessionPtr, RpcResponsePtr)> handler)
 		boost::function<void (RpcSessionPtr, RpcResponsePtr)> handler)
 {
 {
-	session->socket.get_io_service().post(handler);
+	session->Socket().get_io_service().post(handler);
 }
 }
 
 
 void RpcServer::Stop()
 void RpcServer::Stop()
@@ -71,11 +71,6 @@ void RpcServer::RegisterService(ProtobufServicePtr service)
 
 
 }
 }
 
 
-void RpcServer::Start()
-{
-	io_service_.run();
-}
-
 void RpcServer::RemoveSession(RpcSessionPtr& session)
 void RpcServer::RemoveSession(RpcSessionPtr& session)
 {
 {
 	sessions_.erase(session);
 	sessions_.erase(session);

+ 1 - 3
Src/Egametang/Rpc/RpcServer.h

@@ -24,14 +24,12 @@ private:
 public:
 public:
 	RpcServer(boost::asio::io_service& io_service, int port, ThreadPool& thread_pool);
 	RpcServer(boost::asio::io_service& io_service, int port, ThreadPool& thread_pool);
 	~RpcServer();
 	~RpcServer();
-	void Start();
-	void Stop();
 
 
-	boost::asio::io_service& IOService();
 	void RunService(RpcSessionPtr session, RpcRequestPtr request,
 	void RunService(RpcSessionPtr session, RpcRequestPtr request,
 			boost::function<void (RpcSessionPtr, RpcResponsePtr)> handler);
 			boost::function<void (RpcSessionPtr, RpcResponsePtr)> handler);
 	void RegisterService(ProtobufServicePtr service);
 	void RegisterService(ProtobufServicePtr service);
 	void RemoveSession(RpcSessionPtr& session);
 	void RemoveSession(RpcSessionPtr& session);
+	void Stop();
 };
 };
 
 
 } // namespace Egametang
 } // namespace Egametang

+ 4 - 4
Src/Egametang/Thread/CMakeLists.txt

@@ -16,10 +16,10 @@ foreach(Excute ${Excutes})
 	target_link_libraries(${Excute}
 	target_link_libraries(${Excute}
 		Thread
 		Thread
 		boost_thread
 		boost_thread
-		glog
-		gflags
-		gtest
-		gmock
+		Glog
+		Gflags
+		Gtest
+		Gmock
 	)
 	)
 	add_test(${Excute} ${Excute})
 	add_test(${Excute} ${Excute})
 endforeach()
 endforeach()

+ 1 - 2
Src/Egametang/Thread/CountBarrierTest.cc

@@ -44,7 +44,6 @@ TEST_F(CountBarrierTest, WaitAndSignal)
 {
 {
 	CountBarrier barrier(10);
 	CountBarrier barrier(10);
 	ThreadPool pool(10);
 	ThreadPool pool(10);
-	pool.Start();
 	for (int i = 0; i < 10; ++i)
 	for (int i = 0; i < 10; ++i)
 	{
 	{
 		pool.PushTask(
 		pool.PushTask(
@@ -54,7 +53,7 @@ TEST_F(CountBarrierTest, WaitAndSignal)
 	ASSERT_EQ(0, this->count_);
 	ASSERT_EQ(0, this->count_);
 	barrier.Wait();
 	barrier.Wait();
 	ASSERT_EQ(10, this->count_);
 	ASSERT_EQ(10, this->count_);
-	pool.Stop();
+	pool.Wait();
 }
 }
 
 
 } // namespace Egametang
 } // namespace Egametang

+ 6 - 25
Src/Egametang/Thread/ThreadPool.cc

@@ -4,21 +4,12 @@
 namespace Egametang {
 namespace Egametang {
 
 
 ThreadPool::ThreadPool(int num) :
 ThreadPool::ThreadPool(int num) :
-	thread_num_(num), running_(false), work_num_(0)
+	thread_num_(num), running_(true), work_num_(0)
 {
 {
 	if (num == 0)
 	if (num == 0)
 	{
 	{
 		thread_num_ = boost::thread::hardware_concurrency();
 		thread_num_ = boost::thread::hardware_concurrency();
 	}
 	}
-}
-
-ThreadPool::~ThreadPool()
-{
-}
-
-void ThreadPool::Start()
-{
-	running_ = true;
 	for (int i = 0; i < thread_num_; ++i)
 	for (int i = 0; i < thread_num_; ++i)
 	{
 	{
 		ThreadPtr t(new boost::thread(
 		ThreadPtr t(new boost::thread(
@@ -29,46 +20,39 @@ void ThreadPool::Start()
 	}
 	}
 }
 }
 
 
-void ThreadPool::Stop()
+ThreadPool::~ThreadPool()
+{
+}
+
+void ThreadPool::Wait()
 {
 {
-	VLOG(3)<< "Stop";
 	boost::mutex::scoped_lock lock(mutex_);
 	boost::mutex::scoped_lock lock(mutex_);
 	running_ = false;
 	running_ = false;
 	cond_.notify_all();
 	cond_.notify_all();
 	while (work_num_ > 0)
 	while (work_num_ > 0)
 	{
 	{
-		VLOG(3) << "done tasks size = " << tasks_.size();
 		done_.wait(lock);
 		done_.wait(lock);
 	}
 	}
 }
 }
 
 
 void ThreadPool::Runner()
 void ThreadPool::Runner()
 {
 {
-	VLOG(3) << "thread start";
 	bool continued = true;
 	bool continued = true;
 	while (continued)
 	while (continued)
 	{
 	{
 		boost::function<void (void)> task;
 		boost::function<void (void)> task;
 		{
 		{
-			VLOG(3) << "loop lock";
 			boost::mutex::scoped_lock lock(mutex_);
 			boost::mutex::scoped_lock lock(mutex_);
-			VLOG(3) << "loop lock ok";
 			while (running_ && tasks_.empty())
 			while (running_ && tasks_.empty())
 			{
 			{
 				cond_.wait(lock);
 				cond_.wait(lock);
-				VLOG(3) << "cond";
 			}
 			}
 			if (!tasks_.empty())
 			if (!tasks_.empty())
 			{
 			{
-				VLOG(3) << "fetch task";
 				task = tasks_.front();
 				task = tasks_.front();
 				tasks_.pop_front();
 				tasks_.pop_front();
 			}
 			}
 			continued = running_ || !tasks_.empty();
 			continued = running_ || !tasks_.empty();
-			VLOG(3) << "continued = " << continued
-					<< " running = " << running_
-					<< " tasks size = " << tasks_.size();
-			VLOG(3) << "loop unlock";
 		}
 		}
 
 
 		if (task)
 		if (task)
@@ -78,14 +62,12 @@ void ThreadPool::Runner()
 	}
 	}
 	if (--work_num_ == 0)
 	if (--work_num_ == 0)
 	{
 	{
-		VLOG(3) << "work_num = " << work_num_;
 		done_.notify_one();
 		done_.notify_one();
 	}
 	}
 }
 }
 
 
 bool ThreadPool::PushTask(boost::function<void (void)> task)
 bool ThreadPool::PushTask(boost::function<void (void)> task)
 {
 {
-	VLOG(3) << "push task";
 	{
 	{
 		boost::mutex::scoped_lock lock(mutex_);
 		boost::mutex::scoped_lock lock(mutex_);
 		if (!running_)
 		if (!running_)
@@ -94,7 +76,6 @@ bool ThreadPool::PushTask(boost::function<void (void)> task)
 		}
 		}
 		tasks_.push_back(task);
 		tasks_.push_back(task);
 	}
 	}
-	VLOG(3) << "push task unlock";
 	cond_.notify_one();
 	cond_.notify_one();
 	return true;
 	return true;
 }
 }

+ 5 - 5
Src/Egametang/Thread/ThreadPool.h

@@ -1,11 +1,12 @@
-#ifndef THREAD_THREAD_POOL_H
-#define THREAD_THREAD_POOL_H
+#ifndef THREAD_THREADPOOL_H
+#define THREAD_THREADPOOL_H
 
 
 #include <list>
 #include <list>
 #include <boost/thread.hpp>
 #include <boost/thread.hpp>
 #include <boost/function.hpp>
 #include <boost/function.hpp>
 #include <boost/detail/atomic_count.hpp>
 #include <boost/detail/atomic_count.hpp>
 #include "Thread/ThreadTypedef.h"
 #include "Thread/ThreadTypedef.h"
+#include "Base/Marcos.h"
 
 
 namespace Egametang {
 namespace Egametang {
 
 
@@ -26,10 +27,9 @@ public:
 	ThreadPool(int num = 0);
 	ThreadPool(int num = 0);
 	~ThreadPool();
 	~ThreadPool();
 
 
-	virtual void Start();
-	virtual void Stop();
+	virtual void Wait();
 	virtual bool PushTask(boost::function<void (void)> task);
 	virtual bool PushTask(boost::function<void (void)> task);
 };
 };
 
 
 } // namespace Egametang
 } // namespace Egametang
-#endif // THREAD_THREAD_POOL_H
+#endif // THREAD_THREADPOOL_H

+ 1 - 2
Src/Egametang/Thread/ThreadPoolTest.cc

@@ -23,7 +23,6 @@ public:
 
 
 TEST_F(ThreadPoolTest, Test1)
 TEST_F(ThreadPoolTest, Test1)
 {
 {
-	pool_.Start();
 	std::vector<int> x(100, 8);
 	std::vector<int> x(100, 8);
 	std::vector<int> y(100, 9);
 	std::vector<int> y(100, 9);
 	std::vector<int> z(100, 0);
 	std::vector<int> z(100, 0);
@@ -33,7 +32,7 @@ TEST_F(ThreadPoolTest, Test1)
 				boost::bind(&ThreadPoolTest::Max,
 				boost::bind(&ThreadPoolTest::Max,
 						this, x[i], y[i], &z[i]));
 						this, x[i], y[i], &z[i]));
 	}
 	}
-	pool_.Stop();
+	pool_.Wait();
 	for (int i = 0; i < 100; ++i)
 	for (int i = 0; i < 100; ++i)
 	{
 	{
 		ASSERT_EQ(9, z[i]) << "i = " << i;
 		ASSERT_EQ(9, z[i]) << "i = " << i;

+ 2 - 2
Src/ThirdParty/gflags/CMakeLists.txt

@@ -1,4 +1,4 @@
-set(GFlags 
+set(Gflags 
 	src/gflags_completions.cc
 	src/gflags_completions.cc
 	src/gflags_nc.cc
 	src/gflags_nc.cc
 	src/gflags_reporting.cc
 	src/gflags_reporting.cc
@@ -7,4 +7,4 @@ set(GFlags
 
 
 include_directories(./src)
 include_directories(./src)
 
 
-add_library(gflags ${GFlags})
+add_library(Gflags ${Gflags})

+ 2 - 2
Src/ThirdParty/glog/CMakeLists.txt

@@ -1,4 +1,4 @@
-set(GLog
+set(Glog
 	src/demangle.cc
 	src/demangle.cc
 	src/logging.cc
 	src/logging.cc
 	src/raw_logging.cc
 	src/raw_logging.cc
@@ -10,4 +10,4 @@ set(GLog
 
 
 include_directories(./src)
 include_directories(./src)
 
 
-add_library(glog ${GLog})
+add_library(Glog ${Glog})

+ 2 - 2
Src/ThirdParty/gmock/CMakeLists.txt

@@ -1,5 +1,5 @@
-set(GMock src/gmock-all.cc)
+set(Gmock src/gmock-all.cc)
 
 
 include_directories(.)
 include_directories(.)
 
 
-add_library(gmock ${GMock})
+add_library(Gmock ${Gmock})

+ 2 - 2
Src/ThirdParty/gtest/CMakeLists.txt

@@ -1,5 +1,5 @@
-set(GTest src/gtest-all.cc)
+set(Gtest src/gtest-all.cc)
 
 
 include_directories(.)
 include_directories(.)
 
 
-add_library(gtest ${GTest})
+add_library(Gtest ${Gtest})