Feature: chat
This commit is contained in:
+2
-2
@@ -29,7 +29,7 @@ const (
|
||||
TableOrderMsgType
|
||||
GameResultMsgType
|
||||
GetReadyMsgType
|
||||
UserOrderMsgType
|
||||
RoomControl
|
||||
ChatMsgType
|
||||
UserJoinMsgType
|
||||
RoomControl
|
||||
)
|
||||
|
||||
@@ -17,6 +17,7 @@ type ConnManager struct {
|
||||
tableOrderCh chan int
|
||||
gameResultCh chan message.GameResultMsg
|
||||
getReadyCh chan message.GetReadyMsg
|
||||
chatCh chan message.ChatMsg
|
||||
}
|
||||
|
||||
func NewConnManager(playersCount int,
|
||||
@@ -24,7 +25,8 @@ func NewConnManager(playersCount int,
|
||||
gameSendCh chan message.GameMsgSend,
|
||||
tableOrderCh chan int,
|
||||
gameResultCh chan message.GameResultMsg,
|
||||
getReadyCh chan message.GetReadyMsg) *ConnManager {
|
||||
getReadyCh chan message.GetReadyMsg,
|
||||
chatCh chan message.ChatMsg) *ConnManager {
|
||||
connManager := ConnManager{playersCount: playersCount,
|
||||
conns: make([]*websocket.Conn, 0),
|
||||
gameRecvCh: gameRecvCh,
|
||||
@@ -32,6 +34,7 @@ func NewConnManager(playersCount int,
|
||||
tableOrderCh: tableOrderCh,
|
||||
gameResultCh: gameResultCh,
|
||||
getReadyCh: getReadyCh,
|
||||
chatCh: chatCh,
|
||||
}
|
||||
go connManager.Broadcaster()
|
||||
return &connManager
|
||||
@@ -39,7 +42,7 @@ func NewConnManager(playersCount int,
|
||||
|
||||
func (m *ConnManager) AddConn(conn *websocket.Conn) {
|
||||
m.conns = append(m.conns, conn)
|
||||
go m.connListener(conn, m.gameRecvCh, m.gameSendCh)
|
||||
go m.connListener(conn, m.gameRecvCh, m.chatCh)
|
||||
}
|
||||
|
||||
func (m *ConnManager) Broadcaster() {
|
||||
@@ -88,7 +91,7 @@ func (m *ConnManager) checkConn(c *websocket.Conn) {
|
||||
}
|
||||
}
|
||||
|
||||
func (m *ConnManager) connListener(conn *websocket.Conn, gameRecvCh chan message.GameMsgRecv, gameSendCh chan message.GameMsgSend) {
|
||||
func (m *ConnManager) connListener(conn *websocket.Conn, gameRecvCh chan message.GameMsgRecv, chatCh chan message.ChatMsg) {
|
||||
for {
|
||||
commonMsg := message.CommonMsg{}
|
||||
_, msg, err := conn.ReadMessage()
|
||||
@@ -112,6 +115,16 @@ func (m *ConnManager) connListener(conn *websocket.Conn, gameRecvCh chan message
|
||||
panic("fail to decode game msg")
|
||||
}
|
||||
gameRecvCh <- gameMsg
|
||||
case config.ChatMsgType:
|
||||
log.Println("got a chat msg")
|
||||
var chatMsg message.ChatMsg
|
||||
err = json.Unmarshal(msg, &chatMsg)
|
||||
if err != nil {
|
||||
panic("fail to decode chat msg")
|
||||
}
|
||||
for _, conn := range m.conns {
|
||||
conn.WriteJSON(chatMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -16,6 +16,7 @@ type Room struct {
|
||||
tableOrderCh chan int
|
||||
gameResultCh chan message.GameResultMsg
|
||||
getReadyCh chan message.GetReadyMsg
|
||||
chatCh chan message.ChatMsg
|
||||
|
||||
password string
|
||||
playerCount int
|
||||
@@ -27,14 +28,16 @@ func NewRoom(rule rule.MahjongRule) *Room {
|
||||
tableOrderChannel := make(chan int)
|
||||
gameResultChannel := make(chan message.GameResultMsg)
|
||||
getReadyChannel := make(chan message.GetReadyMsg)
|
||||
chatChannel := make(chan message.ChatMsg)
|
||||
return &Room{
|
||||
gameRecvCh: gameRecvChannel,
|
||||
gameSendCh: gameSendChannel,
|
||||
tableOrderCh: tableOrderChannel,
|
||||
gameResultCh: gameResultChannel,
|
||||
getReadyCh: getReadyChannel,
|
||||
connManager: NewConnManager(4, gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel),
|
||||
mahjongManager: game.NewMahjongManager(gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel, rule),
|
||||
chatCh: chatChannel,
|
||||
connManager: NewConnManager(4, gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel, chatChannel),
|
||||
mahjongManager: game.NewMahjongManager(gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel, chatChannel, rule),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ type MahjongManager struct {
|
||||
tableOrderCh chan int
|
||||
gameResultCh chan message.GameResultMsg
|
||||
getReadyCh chan message.GetReadyMsg
|
||||
chatCh chan message.ChatMsg
|
||||
|
||||
lastTableOrder int
|
||||
currentTableOrder int
|
||||
@@ -36,6 +37,7 @@ func NewMahjongManager(gameRecvCh chan message.GameMsgRecv,
|
||||
tableOrderCh chan int,
|
||||
gameResultCh chan message.GameResultMsg,
|
||||
getReadyCh chan message.GetReadyMsg,
|
||||
chatCh chan message.ChatMsg,
|
||||
r rule.MahjongRule) *MahjongManager {
|
||||
mahjong := MahjongManager{}
|
||||
mahjong.rules = r
|
||||
@@ -47,6 +49,7 @@ func NewMahjongManager(gameRecvCh chan message.GameMsgRecv,
|
||||
mahjong.tableOrderCh = tableOrderCh
|
||||
mahjong.gameResultCh = gameResultCh
|
||||
mahjong.getReadyCh = getReadyCh
|
||||
mahjong.chatCh = chatCh
|
||||
return &mahjong
|
||||
}
|
||||
|
||||
|
||||
@@ -26,3 +26,9 @@ type GetReadyMsg struct {
|
||||
MsgType int `json:"msg_type"`
|
||||
ReadyList [4]bool `json:"ready_list"`
|
||||
}
|
||||
|
||||
type ChatMsg struct {
|
||||
MsgType int `json:"msg_type"`
|
||||
From int `json:"from"`
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user