#ifndef RPC_RPCSERVER_H #define RPC_RPCSERVER_H #include #include #include #include #include #include #include "Base/Marcos.h" #include "Thread/ThreadPool.h" #include "Rpc/RpcTypedef.h" namespace Egametang { typedef boost::unordered_set RpcSessionSet; typedef boost::unordered_map MethodMap; class RpcServer: public boost::noncopyable, public boost::enable_shared_from_this { private: friend class RpcServerTest; boost::asio::io_service& ioService; boost::asio::ip::tcp::acceptor acceptor; ThreadPool threadPool; RpcSessionSet sessions; MethodMap methods; void OnAsyncAccept(RpcSessionPtr session, const boost::system::error_code& err); void OnCallMethod(RpcSessionPtr session, ResponseHandlerPtr responseHandler); public: RpcServer(boost::asio::io_service& service, int port); virtual ~RpcServer(); virtual void RunService(RpcSessionPtr session, RpcMetaPtr meta, StringPtr message, MessageHandler messageHandler); virtual void Register(ProtobufServicePtr service); virtual void Remove(RpcSessionPtr& session); virtual void Stop(); }; } // namespace Egametang #endif // RPC_RPCSERVER_H