crusader c8503a3eaf ing
2017-08-29 13:07:39 +09:00

84 lines
1.7 KiB
Go

package web
import (
"context"
"log"
"strings"
"google.golang.org/grpc/metadata"
backGRpc "git.loafle.net/overflow/overflow_api_server/golang"
"git.loafle.net/overflow/overflow_gateway_web/handler"
gws "git.loafle.net/overflow/overflow_gateway_websocket"
"git.loafle.net/overflow/overflow_gateway_websocket/protocol/jsonrpc"
grpcPool "git.loafle.net/overflow/overflow_grpc_pool"
)
type WebHandler interface {
handler.Handler
}
type webHandler struct {
so *gws.SocketOptions
ro *jsonrpc.Options
handler gws.MessageHandler
pool grpcPool.Pool
}
func New(pool grpcPool.Pool) WebHandler {
h := &webHandler{
pool: pool,
}
h.ro = &jsonrpc.Options{
OnRequest: h.onRequest,
OnNotify: h.onNotify,
}
h.handler = jsonrpc.NewHandler(h.ro)
h.so = &gws.SocketOptions{
Handler: h.handler,
}
return h
}
func (h *webHandler) GetSocketOption() *gws.SocketOptions {
return h.so
}
func (h *webHandler) onRequest(soc gws.Socket, method string, params []string) (interface{}, error) {
log.Printf("path: %s, m: %s, params: %v", soc.Path(), method, params)
c, err := h.pool.Get()
if err != nil {
log.Println("cannot retrive GRPC Client")
return nil, err
}
defer h.pool.Put(c)
sm := strings.Split(method, ".")
si := &backGRpc.ServerInput{
Target: sm[0],
Method: sm[1],
Params: params,
}
md := metadata.Pairs("email", "overflow@loafle.com")
ctx := metadata.NewOutgoingContext(context.Background(), md)
so, err := c.(backGRpc.OverflowApiServerClient).Exec(ctx, si)
if err != nil {
return nil, err
}
return so.Result, nil
}
func (h *webHandler) onNotify(soc gws.Socket, method string, params []string) error {
log.Printf("path: %s, m: %s, params: %v", soc.Path(), method, params)
return nil
}