wrap HttpHandle to websocket.Handle
(handler HttpHandle)
| 631 | |
| 632 | // wrap HttpHandle to websocket.Handle |
| 633 | func (r *router) wrapWebSocketHandle(handler HttpHandle) websocket.Handler { |
| 634 | return func(ws *websocket.Conn) { |
| 635 | // get from pool |
| 636 | req := r.server.pool.request.Get().(*Request) |
| 637 | httpCtx := r.server.pool.context.Get().(*HttpContext) |
| 638 | httpCtx.reset(nil, req, r.server, nil, nil, handler) |
| 639 | req.reset(ws.Request(), httpCtx) |
| 640 | httpCtx.webSocket = &WebSocket{ |
| 641 | Conn: ws, |
| 642 | } |
| 643 | httpCtx.isWebSocket = true |
| 644 | |
| 645 | startTime := time.Now() |
| 646 | defer func() { |
| 647 | var errmsg string |
| 648 | if err := recover(); err != nil { |
| 649 | errmsg = exception.CatchError("httpserver::WebsocketHandle", LogTarget_HttpServer, err) |
| 650 | |
| 651 | // record access log |
| 652 | headinfo := fmt.Sprintln(httpCtx.webSocket.Request().Header) |
| 653 | logJson := LogJson{ |
| 654 | RequestUrl: httpCtx.webSocket.Request().RequestURI, |
| 655 | HttpHeader: headinfo, |
| 656 | HttpBody: errmsg, |
| 657 | } |
| 658 | logString := jsonutil.GetJsonString(logJson) |
| 659 | r.server.Logger().Error(logString, LogTarget_HttpServer) |
| 660 | |
| 661 | // increment error count |
| 662 | r.server.StateInfo().AddErrorCount(httpCtx.Request().Path(), fmt.Errorf("%v", err), 1) |
| 663 | } |
| 664 | timetaken := int64(time.Now().Sub(startTime) / time.Millisecond) |
| 665 | // HttpServer Logging |
| 666 | r.server.Logger().Debug(httpCtx.Request().Url()+" "+logWebsocketContext(httpCtx, timetaken), LogTarget_HttpRequest) |
| 667 | |
| 668 | // release request |
| 669 | req.release() |
| 670 | r.server.pool.request.Put(req) |
| 671 | // release context |
| 672 | httpCtx.release() |
| 673 | r.server.pool.context.Put(httpCtx) |
| 674 | }() |
| 675 | |
| 676 | handler(httpCtx) |
| 677 | } |
| 678 | } |
| 679 | |
| 680 | // transferHandlerFunc transfer HandlerFunc to HttpHandle |
| 681 | func transferHandlerFunc(handlerFunc http.HandlerFunc) HttpHandle { |
no test coverage detected