package jsonrpc import ( "encoding/json" "fmt" "io" "log" gws "git.loafle.net/overflow/overflow_gateway_websocket" ) type MessageHandler interface { gws.MessageHandler } type messageHandler struct { o *Options } func NewHandler(o *Options) MessageHandler { h := &messageHandler{ o: o, } return h } func (h *messageHandler) OnMessage(c gws.Client, messageType int, r io.Reader) []byte { var err error req := &ServerRequest{} err = json.NewDecoder(r).Decode(req) if err != nil { } var result []byte if nil != req.Id { result = h.onRequest(c, req) } else { h.onNotify(c, req) } return result } func (h *messageHandler) onRequest(c gws.Client, req *ServerRequest) []byte { var err error result, err := h.o.OnRequest(c, req.Method, req.Params) res := &ServerResponse{ Id: req.Id, Result: result, Error: err, } j, err := json.Marshal(res) if nil != err { log.Println(fmt.Errorf("%v", err)) } return j } func (h *messageHandler) onNotify(c gws.Client, req *ServerRequest) { err := h.o.OnNotify(c, req.Method, req.Params) if nil != err { log.Println(fmt.Errorf("%v", err)) } }