From 23231dc6d705be8bbfaafac0b22531de4f2271db Mon Sep 17 00:00:00 2001 From: mountain Date: Fri, 8 Sep 2023 18:19:16 +0900 Subject: [PATCH] =?UTF-8?q?room=EA=B3=BC=20conn=EC=9D=98=20=EC=83=81?= =?UTF-8?q?=ED=98=B8=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wshandler/wshandler.go | 40 ++++------------------------------------ 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/wshandler/wshandler.go b/wshandler/wshandler.go index fa2a5d2..10ba250 100644 --- a/wshandler/wshandler.go +++ b/wshandler/wshandler.go @@ -13,7 +13,6 @@ import ( "net/http" "strings" "sync" - "time" "go.mongodb.org/mongo-driver/bson/primitive" "repositories.action2quare.com/ayo/gocommon" @@ -29,31 +28,7 @@ var noAuthFlag = flagx.Bool("noauth", false, "") type wsconn struct { *websocket.Conn - sender *Sender - joinedRooms []*room -} - -func (conn *wsconn) popRoom(r *room) int { - for i, jr := range conn.joinedRooms { - if jr == r { - conn.joinedRooms = append(conn.joinedRooms[:i], conn.joinedRooms[i+1:]...) - break - } - } - return len(conn.joinedRooms) -} - -func (conn *wsconn) pushRoom(r *room) { - conn.joinedRooms = append(conn.joinedRooms, r) -} - -func (conn *wsconn) isInRoom(roomname string) bool { - for _, r := range conn.joinedRooms { - if r.name == roomname { - return true - } - } - return false + sender *Sender } type UpstreamMessage struct { @@ -312,7 +287,7 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) { } if len(roomid) > 0 { - if !conn.isInRoom(roomid) { + if room := findRoom(roomid, false); room == nil { return false } } @@ -344,7 +319,7 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) { if conn == nil { return false, nil } - conn.pushRoom(findRoom(roomName, true).in(conn)) + findRoom(roomName, true).in(conn) case commandType_LeaveRoom: if len(usermsg.Args) != 2 { @@ -362,10 +337,7 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) { return false, errProcessFailed_NotInRoom } - if conn.popRoom(room.out(conn)) == 0 { - closeMsg := websocket.FormatCloseMessage(websocket.CloseNormalClosure, "") - conn.WriteControl(websocket.CloseMessage, closeMsg, time.Time{}) - } + room.out(conn) } return true, nil } @@ -448,10 +420,6 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) { case c := <-ws.connInOutChan: if c.Conn == nil { delete(entireConns, c.sender.Accid.Hex()) - for _, room := range c.joinedRooms { - room.out(c) - } - c.joinedRooms = nil go ws.wsApiBroker.Call(c.sender, ClientDisconnected, nil) } else { entireConns[c.sender.Accid.Hex()] = c