70 lines
1.1 KiB
Go
70 lines
1.1 KiB
Go
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))
|
|
}
|
|
}
|