diff options
author | Maran <maran.hidskes@gmail.com> | 2014-05-02 19:35:25 +0800 |
---|---|---|
committer | Maran <maran.hidskes@gmail.com> | 2014-05-02 19:35:25 +0800 |
commit | ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e (patch) | |
tree | fc485913dc46347cc3e09e813ccb65c6e6553334 /etherpc/server.go | |
parent | d2ab322267e489f47b4b908d060411eb0554a029 (diff) | |
download | dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.tar dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.tar.gz dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.tar.bz2 dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.tar.lz dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.tar.xz dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.tar.zst dexon-ebdf339a614b9d03a0b0a0292d1ea24f854d6b3e.zip |
Implemented RPC framework
Diffstat (limited to 'etherpc/server.go')
-rw-r--r-- | etherpc/server.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/etherpc/server.go b/etherpc/server.go new file mode 100644 index 000000000..ba0c51006 --- /dev/null +++ b/etherpc/server.go @@ -0,0 +1,59 @@ +package etherpc + +import ( + "github.com/ethereum/eth-go/ethutil" + "net" + "net/rpc" + "net/rpc/jsonrpc" +) + +type JsonRpcServer struct { + quit chan bool + listener net.Listener +} + +func (s *JsonRpcServer) exitHandler() { +out: + for { + select { + case <-s.quit: + s.listener.Close() + break out + } + } + + ethutil.Config.Log.Infoln("[JSON] Shutdown JSON-RPC server") +} + +func (s *JsonRpcServer) Stop() { + close(s.quit) +} + +func (s *JsonRpcServer) Start() { + ethutil.Config.Log.Infoln("[JSON] Starting JSON-RPC server") + go s.exitHandler() + rpc.Register(new(MainPackage)) + rpc.HandleHTTP() + + for { + conn, err := s.listener.Accept() + if err != nil { + ethutil.Config.Log.Infoln("[JSON] Error starting JSON-RPC:", err) + continue + } + ethutil.Config.Log.Debugln("[JSON] Incoming request.") + go jsonrpc.ServeConn(conn) + } +} + +func NewJsonRpcServer() *JsonRpcServer { + l, err := net.Listen("tcp", ":30304") + if err != nil { + ethutil.Config.Log.Infoln("Error starting JSON-RPC") + } + + return &JsonRpcServer{ + listener: l, + quit: make(chan bool), + } +} |