room과 conn의 상호 의존성 제거

This commit is contained in:
2023-09-08 18:19:16 +09:00
parent 46ce5f0989
commit 23231dc6d7

View File

@ -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