receiver 타입 변경
This commit is contained in:
@ -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())
|
||||
|
||||
Reference in New Issue
Block a user