alias만으로도 메시지를 보낼 수 있다.

This commit is contained in:
2023-08-06 11:49:17 +09:00
parent 165d75a21f
commit d6738b2b70

View File

@ -149,21 +149,6 @@ func init() {
} }
func NewWebsocketHandler() (*WebsocketHandler, error) { func NewWebsocketHandler() (*WebsocketHandler, error) {
// decoder := func(r io.Reader) *T {
// if r == nil {
// // 접속이 끊겼을 때.
// return nil
// }
// var m T
// dec := json.NewDecoder(r)
// if err := dec.Decode(&m); err != nil {
// logger.Println(err)
// }
// // decoding 실패하더라도 빈 *T를 내보냄
// return &m
// }
subhandlers := make(map[string]*subhandler) subhandlers := make(map[string]*subhandler)
for region, cfg := range config.RegionStorage { for region, cfg := range config.RegionStorage {
redisSync, err := gocommon.NewRedisClient(cfg.Redis["wshandler"]) redisSync, err := gocommon.NewRedisClient(cfg.Redis["wshandler"])
@ -371,6 +356,7 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
}() }()
entireConns := make(map[string]*wsconn) entireConns := make(map[string]*wsconn)
entireAlias := make(map[string]*wsconn)
rooms := make(map[string]*room) rooms := make(map[string]*room)
roomDestroyChan := make(chan string, 1000) roomDestroyChan := make(chan string, 1000)
findRoom := func(name string, create bool) *room { findRoom := func(name string, create bool) *room {
@ -385,6 +371,7 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
} }
defer func() { defer func() {
entireAlias = nil
for _, conn := range entireConns { for _, conn := range entireConns {
var roomnames []string var roomnames []string
for _, room := range conn.joinedRooms { for _, room := range conn.joinedRooms {
@ -410,7 +397,14 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
} else { } else {
accid = target accid = target
} }
conn := entireConns[accid]
var conn *wsconn
if accid[0] == '@' {
conn = entireAlias[accid[1:]]
} else {
conn = entireConns[accid]
}
if conn == nil { if conn == nil {
return false, nil return false, nil
} }
@ -556,6 +550,7 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
case c := <-sh.connInOutChan: case c := <-sh.connInOutChan:
if c.Conn == nil { if c.Conn == nil {
delete(entireConns, c.sender.Accid.Hex()) delete(entireConns, c.sender.Accid.Hex())
delete(entireAlias, c.sender.Alias)
var roomnames []string var roomnames []string
for _, room := range c.joinedRooms { for _, room := range c.joinedRooms {
roomnames = append(roomnames, room.name) roomnames = append(roomnames, room.name)
@ -567,6 +562,7 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
go sh.callReceiver.OnClientMessageReceived(c.sender, Disconnected, bytes.NewBuffer(bt)) go sh.callReceiver.OnClientMessageReceived(c.sender, Disconnected, bytes.NewBuffer(bt))
} else { } else {
entireConns[c.sender.Accid.Hex()] = c entireConns[c.sender.Accid.Hex()] = c
entireAlias[c.sender.Alias] = c
go sh.callReceiver.OnClientMessageReceived(c.sender, Connected, nil) go sh.callReceiver.OnClientMessageReceived(c.sender, Connected, nil)
} }
} }