service/websocket.go

40 lines
1.0 KiB
Go
Raw Permalink Normal View History

package service
import (
"apigo.cc/go/log"
"github.com/gorilla/websocket"
"net/http"
"reflect"
)
var defaultUpgrader = &websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true },
}
func doWebsocketService(ws *websocketServiceType, request *Request, response *Response, logger *log.Logger) {
conn, err := defaultUpgrader.Upgrade(response.Writer, request.Request, nil)
if err != nil {
logger.Error("websocket upgrade failed", "error", err.Error())
return
}
defer conn.Close()
// 调用业务处理函数,注入依赖
params := make([]reflect.Value, ws.funcType.NumIn())
for i := 0; i < len(params); i++ {
t := ws.funcType.In(i)
if t == reflect.TypeOf(request) {
params[i] = reflect.ValueOf(request)
} else if t == reflect.TypeOf(logger) {
params[i] = reflect.ValueOf(logger)
} else if t == reflect.TypeOf(conn) {
params[i] = reflect.ValueOf(conn)
} else if obj := GetInject(t); obj != nil {
params[i] = reflect.ValueOf(obj)
} else {
params[i] = reflect.New(t).Elem()
}
}
ws.funcValue.Call(params)
}