receiver 타입 변경
This commit is contained in:
@ -50,6 +50,20 @@ type CommandMessage struct {
|
|||||||
Args []string
|
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 {
|
type subhandler struct {
|
||||||
name string
|
name string
|
||||||
authCache *gocommon.AuthCollection
|
authCache *gocommon.AuthCollection
|
||||||
@ -58,8 +72,7 @@ type subhandler struct {
|
|||||||
redisSync *redis.Client
|
redisSync *redis.Client
|
||||||
connInOutChan chan *wsconn
|
connInOutChan chan *wsconn
|
||||||
deliveryChan chan any
|
deliveryChan chan any
|
||||||
|
callReceiver WebSocketMessageReceiver
|
||||||
callReceiver func(primitive.ObjectID, string, io.Reader)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// WebsocketHandler :
|
// WebsocketHandler :
|
||||||
@ -72,7 +85,7 @@ type wsConfig struct {
|
|||||||
SyncPipeline string `json:"ws_sync_pipeline"`
|
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
|
var config wsConfig
|
||||||
gocommon.LoadConfig(&config)
|
gocommon.LoadConfig(&config)
|
||||||
|
|
||||||
@ -81,20 +94,20 @@ func NewWebsocketHandler[T any](authglobal gocommon.AuthCollectionGlobal, receiv
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
decoder := func(r io.Reader) *T {
|
// decoder := func(r io.Reader) *T {
|
||||||
if r == nil {
|
// if r == nil {
|
||||||
// 접속이 끊겼을 때.
|
// // 접속이 끊겼을 때.
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
var m T
|
// var m T
|
||||||
dec := json.NewDecoder(r)
|
// dec := json.NewDecoder(r)
|
||||||
if err := dec.Decode(&m); err != nil {
|
// if err := dec.Decode(&m); err != nil {
|
||||||
logger.Println(err)
|
// logger.Println(err)
|
||||||
}
|
// }
|
||||||
|
|
||||||
// decoding 실패하더라도 빈 *T를 내보냄
|
// // decoding 실패하더라도 빈 *T를 내보냄
|
||||||
return &m
|
// return &m
|
||||||
}
|
// }
|
||||||
|
|
||||||
authCaches := make(map[string]*subhandler)
|
authCaches := make(map[string]*subhandler)
|
||||||
for _, region := range authglobal.Regions() {
|
for _, region := range authglobal.Regions() {
|
||||||
@ -106,9 +119,7 @@ func NewWebsocketHandler[T any](authglobal gocommon.AuthCollectionGlobal, receiv
|
|||||||
redisSync: redisSync,
|
redisSync: redisSync,
|
||||||
connInOutChan: make(chan *wsconn),
|
connInOutChan: make(chan *wsconn),
|
||||||
deliveryChan: make(chan any, 1000),
|
deliveryChan: make(chan any, 1000),
|
||||||
callReceiver: func(accid primitive.ObjectID, alias string, r io.Reader) {
|
callReceiver: receiver,
|
||||||
receiver(accid, alias, decoder(r))
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
authCaches[region] = sh
|
authCaches[region] = sh
|
||||||
@ -254,7 +265,7 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
|
|||||||
for _, room := range rooms {
|
for _, room := range rooms {
|
||||||
room.out(c)
|
room.out(c)
|
||||||
}
|
}
|
||||||
sh.callReceiver(c.accid, c.alias, nil)
|
sh.callReceiver(c.accid, c.alias, Connected, nil)
|
||||||
} else {
|
} else {
|
||||||
entireConns[c.alias] = c
|
entireConns[c.alias] = c
|
||||||
}
|
}
|
||||||
@ -285,7 +296,9 @@ func upgrade_core(sh *subhandler, conn *websocket.Conn, accid primitive.ObjectID
|
|||||||
|
|
||||||
if messageType == websocket.TextMessage {
|
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())
|
sh.redisSync.HDel(context.Background(), sh.name, accid.Hex())
|
||||||
|
|||||||
Reference in New Issue
Block a user