Implemented RPC framework
This commit is contained in:
59
etherpc/server.go
Normal file
59
etherpc/server.go
Normal file
@ -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),
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user