Fix: send table-order when joining room

This commit is contained in:
2020-04-30 11:54:12 +08:00
parent cebf623eaf
commit e0177b1467
2 changed files with 23 additions and 2 deletions
+21 -1
View File
@@ -18,6 +18,7 @@ type ConnManager struct {
gameResultCh chan message.GameResultMsg
getReadyCh chan message.GetReadyMsg
chatCh chan message.ChatMsg
exitCh chan bool
}
func NewConnManager(playersCount int,
@@ -26,7 +27,8 @@ func NewConnManager(playersCount int,
tableOrderCh chan int,
gameResultCh chan message.GameResultMsg,
getReadyCh chan message.GetReadyMsg,
chatCh chan message.ChatMsg) *ConnManager {
chatCh chan message.ChatMsg,
exitCh chan bool) *ConnManager {
connManager := ConnManager{playersCount: playersCount,
conns: make([]*websocket.Conn, 0),
gameRecvCh: gameRecvCh,
@@ -35,12 +37,19 @@ func NewConnManager(playersCount int,
gameResultCh: gameResultCh,
getReadyCh: getReadyCh,
chatCh: chatCh,
exitCh: exitCh,
}
go connManager.Broadcaster()
return &connManager
}
func (m *ConnManager) AddConn(conn *websocket.Conn) {
index:= len(m.conns)
msg := message.TableOrderMsg{
MsgType: config.TableOrderMsgType,
TableOrder: index,
}
conn.WriteJSON(msg)
m.conns = append(m.conns, conn)
go m.connListener(conn, m.gameRecvCh, m.chatCh)
}
@@ -72,6 +81,10 @@ func (m *ConnManager) Broadcaster() {
for _, conn := range m.conns {
conn.WriteJSON(msg)
}
case msg := <-m.exitCh:
if msg {
return
}
}
}
}
@@ -84,11 +97,18 @@ func (m *ConnManager) SendMsgTo(order int, msg []byte) {
}
func (m *ConnManager) checkConn(c *websocket.Conn) {
var user int
for index, conn := range m.conns {
if c == conn {
log.Println("user: ", index, " disconnected")
user = index
}
}
u := user
user = u
for _, conn := range m.conns {
conn.Close()
}
}
func (m *ConnManager) connListener(conn *websocket.Conn, gameRecvCh chan message.GameMsgRecv, chatCh chan message.ChatMsg) {
+2 -1
View File
@@ -29,6 +29,7 @@ func NewRoom(rule rule.MahjongRule) *Room {
gameResultChannel := make(chan message.GameResultMsg)
getReadyChannel := make(chan message.GetReadyMsg)
chatChannel := make(chan message.ChatMsg)
exitChannel := make(chan bool)
return &Room{
gameRecvCh: gameRecvChannel,
gameSendCh: gameSendChannel,
@@ -36,7 +37,7 @@ func NewRoom(rule rule.MahjongRule) *Room {
gameResultCh: gameResultChannel,
getReadyCh: getReadyChannel,
chatCh: chatChannel,
connManager: NewConnManager(4, gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel, chatChannel),
connManager: NewConnManager(4, gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel, chatChannel, exitChannel),
mahjongManager: game.NewMahjongManager(gameRecvChannel, gameSendChannel, tableOrderChannel, gameResultChannel, getReadyChannel, chatChannel, rule),
}
}