From 9c0856c2a5c9eec3a351b3abc6a11a04a112e863 Mon Sep 17 00:00:00 2001 From: crusader Date: Mon, 28 Aug 2017 18:41:41 +0900 Subject: [PATCH] ing --- glide.yaml | 8 +++++++- handler/file/file.go | 4 ++-- handler/web/web.go | 42 +++++++++++++++++++++++++++++++++++++----- main.go | 25 ++++++++++++++++++++++++- 4 files changed, 70 insertions(+), 9 deletions(-) diff --git a/glide.yaml b/glide.yaml index 1c53346..3be4433 100644 --- a/glide.yaml +++ b/glide.yaml @@ -1,3 +1,9 @@ package: git.loafle.net/overflow/overflow_gateway_web import: -- package: git.loafle.net/overflow/overflow_gateway_websocket \ No newline at end of file +- package: git.loafle.net/overflow/overflow_gateway_websocket +- package: google.golang.org/grpc + version: v1.5.2 +- package: git.loafle.net/overflow/overflow_api_server + subpackages: + - golang +- package: git.loafle.net/overflow/overflow_grpc_pool diff --git a/handler/file/file.go b/handler/file/file.go index e5c0fd0..7027e25 100644 --- a/handler/file/file.go +++ b/handler/file/file.go @@ -39,11 +39,11 @@ func (h *fileHandler) GetSocketOption() *gws.SocketOptions { return h.co } -func (h *fileHandler) onRequest(soc gws.Socket, method string, params interface{}) (interface{}, error) { +func (h *fileHandler) onRequest(soc gws.Socket, method string, params []string) (interface{}, error) { log.Printf("path: %s, m: %s, params: %v", soc.Path(), method, params) return nil, nil } -func (h *fileHandler) onNotify(soc gws.Socket, method string, params interface{}) error { +func (h *fileHandler) onNotify(soc gws.Socket, method string, params []string) error { return nil } diff --git a/handler/web/web.go b/handler/web/web.go index c47e124..564f010 100644 --- a/handler/web/web.go +++ b/handler/web/web.go @@ -1,11 +1,17 @@ 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 { @@ -16,10 +22,13 @@ type webHandler struct { co *gws.SocketOptions ho *jsonrpc.Options handler gws.MessageHandler + pool grpcPool.Pool } -func New() WebHandler { - h := &webHandler{} +func New(pool grpcPool.Pool) WebHandler { + h := &webHandler{ + pool: pool, + } h.ho = &jsonrpc.Options{ OnRequest: h.onRequest, @@ -39,12 +48,35 @@ func (h *webHandler) GetSocketOption() *gws.SocketOptions { return h.co } -func (h *webHandler) onRequest(soc gws.Socket, method string, params interface{}) (interface{}, error) { +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) - return nil, nil + + c, err := h.pool.Get() + if err != nil { + log.Println("cannot retrive GRPC Client") + return nil, err + } + + 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 interface{}) error { +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 } diff --git a/main.go b/main.go index 7988fd1..bc6853d 100644 --- a/main.go +++ b/main.go @@ -3,11 +3,15 @@ package main import ( "log" + "google.golang.org/grpc" + "github.com/valyala/fasthttp" + backGRpc "git.loafle.net/overflow/overflow_api_server/golang" "git.loafle.net/overflow/overflow_gateway_web/handler/file" "git.loafle.net/overflow/overflow_gateway_web/handler/web" gws "git.loafle.net/overflow/overflow_gateway_websocket" + grpcPool "git.loafle.net/overflow/overflow_grpc_pool" ) func main() { @@ -18,7 +22,26 @@ func main() { } s := gws.NewServer(o) - wh := web.New() + bo := &grpcPool.Options{ + MaxIdle: 1, + MaxCapacity: 3, + + Creators: func() (*grpc.ClientConn, interface{}, error) { + var err error + conn, err := grpc.Dial(":50006", grpc.WithInsecure()) + if nil != err { + return nil, nil, err + } + c := backGRpc.NewOverflowApiServerClient(conn) + return conn, c, nil + }, + } + bPool, err := grpcPool.New(bo) + if nil != err { + log.Panic("Cannot create Pool of GRPC") + } + + wh := web.New(bPool) fh := file.New() s.HandleSocket("/web", wh.GetSocketOption())