MCPcopy Create free account
hub / github.com/devfeel/dotweb / wrapWebSocketHandle

Method wrapWebSocketHandle

router.go:633–678  ·  view source on GitHub ↗

wrap HttpHandle to websocket.Handle

(handler HttpHandle)

Source from the content-addressed store, hash-verified

631
632// wrap HttpHandle to websocket.Handle
633func (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
681func transferHandlerFunc(handlerFunc http.HandlerFunc) HttpHandle {

Callers 1

RegisterRouteMethod · 0.95

Calls 13

CatchErrorFunction · 0.92
logWebsocketContextFunction · 0.85
AddErrorCountMethod · 0.80
UrlMethod · 0.80
GetMethod · 0.65
resetMethod · 0.65
RequestMethod · 0.65
ErrorMethod · 0.65
PathMethod · 0.65
DebugMethod · 0.65
releaseMethod · 0.65
LoggerMethod · 0.45

Tested by

no test coverage detected