crusader ab4f7f28be ing
2017-08-30 11:59:08 +09:00

71 lines
1.2 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(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.Println(fmt.Errorf("%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.Println(fmt.Errorf("%v", err))
}
}