package server import ( "log" "net" rpcServer "git.loafle.net/commons_go/rpc/server" "git.loafle.net/commons_go/server" ) type ServerHandlers struct { server.ServerHandlers RPCServerHandler rpcServer.ServerHandler } func (sh *ServerHandlers) Handle(conn net.Conn, stopChan <-chan struct{}, doneChan chan<- struct{}) { contentType := "json" codec, err := sh.RPCServerHandler.GetCodec(contentType) if nil != err { log.Printf("RPC Handle: %v", err) doneChan <- struct{}{} return } for { if err := rpcServer.Handle(sh.RPCServerHandler, codec, conn, conn); nil != err { if server.IsClientDisconnect(err) { doneChan <- struct{}{} return } log.Printf("RPC: %v", err) } select { case <-stopChan: return default: } } } func (sh *ServerHandlers) Validate() { sh.ServerHandlers.Validate() if nil == sh.RPCServerHandler { panic("RPCServerHandler must be specified.") } }