crusader 4a99cee3bc ing
2017-08-25 14:40:04 +09:00

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))
}
}