51 lines
924 B
Go
51 lines
924 B
Go
|
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.")
|
||
|
}
|
||
|
}
|