RpcServer.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef NET_RPC_SERVER_H
  2. #define NET_RPC_SERVER_H
  3. #include <boost/asio.hpp>
  4. #include "base/base.h"
  5. namespace Egametang {
  6. class RpcServer: public boost::enable_shared_from_this<RpcServer>
  7. {
  8. private:
  9. typedef boost::unordered_set<RpcSessionPtr> RpcSessionSet;
  10. google::protobuf::Service& service_;
  11. boost::asio::io_service& io_service_;
  12. boost::asio::ip::tcp::acceptor acceptor_;
  13. ThreadPoolIf& thread_pool_;
  14. RpcSessionSet sessions_;
  15. void HandleAsyncAccept(RpcSessionPtr session, const boost::system::error_code& err);
  16. void Callback(RpcSessionPtr session,
  17. boost::function<void (RpcSessionPtr, RpcResponsePtr)> handler);
  18. public:
  19. RpcServer(boost::asio::io_service& io_service, int port, ThreadPool& thread_pool);
  20. ~RpcServer();
  21. void Start();
  22. void Stop();
  23. void RunService(RpcSessionPtr session, RpcRequestPtr request,
  24. boost::function<void (RpcSessionPtr, RpcResponsePtr)> handler);
  25. void RegisterService(ProtobufServicePtr service);
  26. };
  27. } // namespace Egametang
  28. #endif // NET_RPC_SERVER_H