http, websocket api handler 추가

This commit is contained in:
2023-09-19 18:50:17 +09:00
parent 1af5d72819
commit 49a3722a7e
5 changed files with 221 additions and 64 deletions

View File

@ -85,6 +85,8 @@ type send_msg_queue_elem struct {
}
type WebsocketHandler struct {
WebsocketApiBroker
redisMsgChanName string
redisCmdChanName string
redisSync *redis.Client
@ -93,7 +95,6 @@ type WebsocketHandler struct {
localDeliveryChan chan any
sendMsgChan chan send_msg_queue_elem
wsApiBroker WebsocketApiBroker
connWaitGroup sync.WaitGroup
sessionConsumer session.Consumer
}
@ -121,7 +122,7 @@ func NewWebsocketHandler(consumer session.Consumer, redisUrl string) (*Websocket
redisSync, err := gocommon.NewRedisClient(redisUrl)
if err != nil {
return nil, err
return nil, logger.ErrorWithCallStack(err)
}
sendchan := make(chan send_msg_queue_elem, 1000)
@ -153,10 +154,6 @@ func NewWebsocketHandler(consumer session.Consumer, redisUrl string) (*Websocket
}, nil
}
func (ws *WebsocketHandler) RegisterApiHandler(handler WebsocketApiHandler) {
ws.wsApiBroker.AddHandler(handler)
}
func (ws *WebsocketHandler) Start(ctx context.Context) {
ws.connWaitGroup.Add(1)
go ws.mainLoop(ctx)
@ -260,7 +257,7 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) {
defer func() {
for _, conn := range entireConns {
ws.wsApiBroker.Call(conn.sender, ClientDisconnected, nil)
ws.Call(conn.sender, ClientDisconnected, nil)
conn.Close()
}
}()
@ -414,10 +411,12 @@ func (ws *WebsocketHandler) mainLoop(ctx context.Context) {
case c := <-ws.connInOutChan:
if c.Conn == nil {
delete(entireConns, c.sender.Accid.Hex())
go ws.wsApiBroker.Call(c.sender, ClientDisconnected, nil)
logger.Println("ClientDisconnected :", c.sender.Alias)
go ws.ClientDisconnected(c)
} else {
entireConns[c.sender.Accid.Hex()] = c
go ws.wsApiBroker.Call(c.sender, ClientConnected, nil)
logger.Println("ClientConnected :", c.sender.Alias)
go ws.ClientConnected(c)
}
}
}
@ -451,7 +450,7 @@ func upgrade_core(ws *WebsocketHandler, conn *websocket.Conn, accid primitive.Ob
r.Read(size[:])
cmd := make([]byte, size[0])
r.Read(cmd)
ws.wsApiBroker.Call(newconn.sender, string(cmd), r)
ws.Call(newconn.sender, string(cmd), r)
}
}
ws.connWaitGroup.Done()