receiver 함수를 region 별로 분리

This commit is contained in:
2023-07-10 13:04:45 +09:00
parent 1f668586f2
commit 8598d59ab4

View File

@ -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
receiverChain []WebSocketMessageReceiver receiverChain map[string][]WebSocketMessageReceiver
} }
type wsConfig struct { type wsConfig struct {
@ -132,20 +132,24 @@ func NewWebsocketHandler(authglobal gocommon.AuthCollectionGlobal) (wsh *Websock
return &WebsocketHandler{ return &WebsocketHandler{
authCaches: authCaches, authCaches: authCaches,
RedisSync: redisSync, RedisSync: redisSync,
receiverChain: make(map[string][]WebSocketMessageReceiver),
} }
} }
func (ws *WebsocketHandler) RegisterReceiver(receiver WebSocketMessageReceiver) { func (ws *WebsocketHandler) RegisterReceiver(region string, receiver WebSocketMessageReceiver) {
ws.receiverChain = append(ws.receiverChain, receiver) ws.receiverChain[region] = append(ws.receiverChain[region], receiver)
} }
func (ws *WebsocketHandler) Start(ctx context.Context) { func (ws *WebsocketHandler) Start(ctx context.Context) {
for _, sh := range ws.authCaches { for region, sh := range ws.authCaches {
if len(ws.receiverChain) == 1 { chain := ws.receiverChain[region]
sh.callReceiver = ws.receiverChain[0] 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 { } else {
sh.callReceiver = func(accid primitive.ObjectID, alias string, messageType WebSocketMessageType, body io.Reader) { 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) r(accid, alias, messageType, body)
} }
} }