package jsonrpc import ( "context" "encoding/json" "io" "log" gws "git.loafle.net/overflow/overflow_gateway_websocket" ) type MessageHandler interface { gws.MessageHandler } type messageHandler struct { ctx context.Context o *Options } func NewHandler(ctx context.Context, o *Options) MessageHandler { h := &messageHandler{ ctx: ctx, o: o, } return h } func (h *messageHandler) OnMessage(soc gws.Socket, 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(soc, req) } else { h.onNotify(soc, req) } return result } func (h *messageHandler) onRequest(soc gws.Socket, req *ServerRequest) []byte { var err error result, err := h.o.OnRequest(soc, req.Method, req.Params) res := &ServerResponse{ Protocol: req.Protocol, Result: result, Error: err, Id: req.Id, } j, err := json.Marshal(res) if nil != err { log.Printf("JSON RPC error: %v", err) } return j } func (h *messageHandler) onNotify(soc gws.Socket, req *ServerRequest) { err := h.o.OnNotify(soc, req.Method, req.Params) if nil != err { log.Printf("JSON RPC error: %v", err) } }