From 20803c67edfc53e74414357157722f4e3adefd79 Mon Sep 17 00:00:00 2001 From: mountain Date: Thu, 6 Jul 2023 16:47:36 +0900 Subject: [PATCH] =?UTF-8?q?SendUpstreamMessage=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wshandler/wshandler.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/wshandler/wshandler.go b/wshandler/wshandler.go index 60eb526..e606797 100644 --- a/wshandler/wshandler.go +++ b/wshandler/wshandler.go @@ -4,6 +4,7 @@ import ( "context" "encoding/hex" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -168,6 +169,23 @@ func (ws *WebsocketHandler) SetState(region string, accid primitive.ObjectID, st ws.RedisSync.SetArgs(context.Background(), accid.Hex(), state, redis.SetArgs{Mode: "XX"}).Result() } +var errNoRegion = errors.New("region is not valid") + +func (ws *WebsocketHandler) SendUpstreamMessage(region string, msg *UpstreamMessage) error { + sh := ws.authCaches[region] + if sh == nil { + return errNoRegion + } + + bt, err := json.Marshal(msg) + if err != nil { + return err + } + + _, err = sh.redisSync.Publish(context.Background(), sh.redisMsgChanName, bt).Result() + return err +} + func (sh *subhandler) mainLoop(ctx context.Context) { defer func() { s := recover() @@ -240,6 +258,10 @@ func (sh *subhandler) mainLoop(ctx context.Context) { } } else if target[0] == '@' { // TODO : 특정 유저에게만 + conn := entireConns[target[1:]] + if conn != nil { + conn.WriteMessage(websocket.TextMessage, usermsg.Body) + } } case *CommandMessage: