From 8598d59ab46f0f7a295b10acb6629926fa10e74e Mon Sep 17 00:00:00 2001 From: mountain Date: Mon, 10 Jul 2023 13:04:45 +0900 Subject: [PATCH] =?UTF-8?q?receiver=20=ED=95=A8=EC=88=98=EB=A5=BC=20region?= =?UTF-8?q?=20=EB=B3=84=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wshandler/wshandler.go | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/wshandler/wshandler.go b/wshandler/wshandler.go index 7170bbd..9bb7acb 100644 --- a/wshandler/wshandler.go +++ b/wshandler/wshandler.go @@ -83,7 +83,7 @@ type subhandler struct { type WebsocketHandler struct { authCaches map[string]*subhandler RedisSync *redis.Client - receiverChain []WebSocketMessageReceiver + receiverChain map[string][]WebSocketMessageReceiver } type wsConfig struct { @@ -130,22 +130,26 @@ func NewWebsocketHandler(authglobal gocommon.AuthCollectionGlobal) (wsh *Websock } return &WebsocketHandler{ - authCaches: authCaches, - RedisSync: redisSync, + authCaches: authCaches, + RedisSync: redisSync, + receiverChain: make(map[string][]WebSocketMessageReceiver), } } -func (ws *WebsocketHandler) RegisterReceiver(receiver WebSocketMessageReceiver) { - ws.receiverChain = append(ws.receiverChain, receiver) +func (ws *WebsocketHandler) RegisterReceiver(region string, receiver WebSocketMessageReceiver) { + ws.receiverChain[region] = append(ws.receiverChain[region], receiver) } func (ws *WebsocketHandler) Start(ctx context.Context) { - for _, sh := range ws.authCaches { - if len(ws.receiverChain) == 1 { - sh.callReceiver = ws.receiverChain[0] + for region, sh := range ws.authCaches { + chain := ws.receiverChain[region] + if len(chain) == 0 { + sh.callReceiver = func(accid primitive.ObjectID, alias string, messageType WebSocketMessageType, body io.Reader) {} + } else if len(chain) == 1 { + sh.callReceiver = chain[0] } else { sh.callReceiver = func(accid primitive.ObjectID, alias string, messageType WebSocketMessageType, body io.Reader) { - for _, r := range ws.receiverChain { + for _, r := range chain { r(accid, alias, messageType, body) } }