wshandler reciever 함수 추가 수정
This commit is contained in:
@ -83,7 +83,7 @@ type subhandler struct {
|
|||||||
type WebsocketHandler struct {
|
type WebsocketHandler struct {
|
||||||
authCaches map[string]*subhandler
|
authCaches map[string]*subhandler
|
||||||
RedisSync *redis.Client
|
RedisSync *redis.Client
|
||||||
ClientMessageReceiver WebSocketMessageReceiver
|
receiverChain []WebSocketMessageReceiver
|
||||||
}
|
}
|
||||||
|
|
||||||
type wsConfig struct {
|
type wsConfig struct {
|
||||||
@ -132,7 +132,26 @@ func NewWebsocketHandler(authglobal gocommon.AuthCollectionGlobal) (wsh *Websock
|
|||||||
return &WebsocketHandler{
|
return &WebsocketHandler{
|
||||||
authCaches: authCaches,
|
authCaches: authCaches,
|
||||||
RedisSync: redisSync,
|
RedisSync: redisSync,
|
||||||
ClientMessageReceiver: func(primitive.ObjectID, string, WebSocketMessageType, io.Reader) {},
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ws *WebsocketHandler) RegisterReceiver(receiver WebSocketMessageReceiver) {
|
||||||
|
ws.receiverChain = append(ws.receiverChain, receiver)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ws *WebsocketHandler) Start(ctx context.Context) {
|
||||||
|
for _, sh := range ws.authCaches {
|
||||||
|
if len(ws.receiverChain) == 1 {
|
||||||
|
sh.callReceiver = ws.receiverChain[0]
|
||||||
|
} else {
|
||||||
|
sh.callReceiver = func(accid primitive.ObjectID, alias string, messageType WebSocketMessageType, body io.Reader) {
|
||||||
|
for _, r := range ws.receiverChain {
|
||||||
|
r(accid, alias, messageType, body)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
go sh.mainLoop(ctx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +161,7 @@ func (ws *WebsocketHandler) Cleanup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *WebsocketHandler) RegisterHandlers(ctx context.Context, serveMux *http.ServeMux, prefix string) error {
|
func (ws *WebsocketHandler) RegisterHandlers(serveMux *http.ServeMux, prefix string) error {
|
||||||
for region, sh := range ws.authCaches {
|
for region, sh := range ws.authCaches {
|
||||||
if region == "default" {
|
if region == "default" {
|
||||||
region = ""
|
region = ""
|
||||||
@ -153,8 +172,6 @@ func (ws *WebsocketHandler) RegisterHandlers(ctx context.Context, serveMux *http
|
|||||||
} else {
|
} else {
|
||||||
serveMux.HandleFunc(url, sh.upgrade)
|
serveMux.HandleFunc(url, sh.upgrade)
|
||||||
}
|
}
|
||||||
sh.callReceiver = ws.ClientMessageReceiver
|
|
||||||
go sh.mainLoop(ctx)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user