receiver 타입 변경

This commit is contained in:
2023-07-06 12:35:39 +09:00
parent 7ef3e68d16
commit 2b54d69b9e

View File

@ -50,6 +50,20 @@ type CommandMessage struct {
Args []string
}
type WebSocketMessageType int
const (
TextMessage = WebSocketMessageType(websocket.TextMessage)
BinaryMessage = WebSocketMessageType(websocket.BinaryMessage)
CloseMessage = WebSocketMessageType(websocket.CloseMessage)
PingMessage = WebSocketMessageType(websocket.PingMessage)
PongMessage = WebSocketMessageType(websocket.PongMessage)
Connected = WebSocketMessageType(100)
Disconnected = WebSocketMessageType(101)
)
type WebSocketMessageReceiver func(accid primitive.ObjectID, alias string, messageType WebSocketMessageType, body io.Reader)
type subhandler struct {
name string
authCache *gocommon.AuthCollection
@ -58,8 +72,7 @@ type subhandler struct {
redisSync *redis.Client
connInOutChan chan *wsconn
deliveryChan chan any
callReceiver func(primitive.ObjectID, string, io.Reader)
callReceiver WebSocketMessageReceiver
}
// WebsocketHandler :
@ -72,7 +85,7 @@ type wsConfig struct {
SyncPipeline string `json:"ws_sync_pipeline"`
}
func NewWebsocketHandler[T any](authglobal gocommon.AuthCollectionGlobal, receiver func(primitive.ObjectID, string, *T)) (wsh *WebsocketHandler) {
func NewWebsocketHandler(authglobal gocommon.AuthCollectionGlobal, receiver WebSocketMessageReceiver) (wsh *WebsocketHandler) {
var config wsConfig
gocommon.LoadConfig(&config)
@ -81,20 +94,20 @@ func NewWebsocketHandler[T any](authglobal gocommon.AuthCollectionGlobal, receiv
panic(err)
}
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)
}
// 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
}
// // decoding 실패하더라도 빈 *T를 내보냄
// return &m
// }
authCaches := make(map[string]*subhandler)
for _, region := range authglobal.Regions() {
@ -106,9 +119,7 @@ func NewWebsocketHandler[T any](authglobal gocommon.AuthCollectionGlobal, receiv
redisSync: redisSync,
connInOutChan: make(chan *wsconn),
deliveryChan: make(chan any, 1000),
callReceiver: func(accid primitive.ObjectID, alias string, r io.Reader) {
receiver(accid, alias, decoder(r))
},
callReceiver: receiver,
}
authCaches[region] = sh
@ -254,7 +265,7 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
for _, room := range rooms {
room.out(c)
}
sh.callReceiver(c.accid, c.alias, nil)
sh.callReceiver(c.accid, c.alias, Connected, nil)
} else {
entireConns[c.alias] = c
}
@ -285,7 +296,9 @@ func upgrade_core(sh *subhandler, conn *websocket.Conn, accid primitive.ObjectID
if messageType == websocket.TextMessage {
// 유저가 직접 보낸 메시지
sh.callReceiver(accid, c.alias, r)
sh.callReceiver(accid, c.alias, TextMessage, r)
} else if messageType == websocket.BinaryMessage {
sh.callReceiver(accid, c.alias, BinaryMessage, r)
}
}
sh.redisSync.HDel(context.Background(), sh.name, accid.Hex())