diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 1bd53e3d..bc9d06e2 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -59,6 +59,25 @@ func (p *Player) HandleMsg(m *msg.Msg) { } } +func getCardInfoFromExtra(extra interface{}) (card.CardInfo, bool) { + switch v := extra.(type) { + case card.CardInfo: + return v, true + case *card.CardInfo: + if v == nil { + return card.CardInfo{}, false + } + return *v, true + case **card.CardInfo: + if v == nil || *v == nil { + return card.CardInfo{}, false + } + return **v, true + default: + return card.CardInfo{}, false + } +} + // 消息处理 func (p *Player) handle(m *msg.Msg) error { switch m.Type { @@ -116,7 +135,7 @@ func (p *Player) handle(m *msg.Msg) error { }) case msg.HANDLE_TYPE_REQ_CARD: // 卡牌申请 FriendMod := p.PlayMod.getFriendMod() - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } @@ -156,9 +175,9 @@ func (p *Player) handle(m *msg.Msg) error { p.PlayMod.save() p.PushClientRes(InviteMod.NotifySuccess()) case msg.HANDLE_TYPE_SEND_CARD: // B收到A赠送的卡牌 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { - log.Error("Failed to cast m.Extra to card.CardInfo") + log.Error("handle type send card,Failed to cast m.Extra to card.CardInfo") return nil } FriendMod := p.PlayMod.getFriendMod() @@ -171,9 +190,9 @@ func (p *Player) handle(m *msg.Msg) error { ) p.PlayMod.save() case msg.HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT: // A收到B置换卡牌选择超时 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { - log.Error("Failed to cast m.Extra to card.CardInfo") + log.Error("handle type ex card select timeout,Failed to cast m.Extra to card.CardInfo") return nil } CardMod := p.PlayMod.getCardMod() @@ -182,9 +201,9 @@ func (p *Player) handle(m *msg.Msg) error { p.PushClientRes(CardMod.NotifyCard()) p.PushClientRes(CardMod.NotifyTimes()) case msg.HANDLE_TYPE_EX_CARD_TIMEOUT: // B收到A同意置换卡牌超时 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { - log.Error("Failed to cast m.Extra to card.CardInfo") + log.Error("handle type ex card timeout,Failed to cast m.Extra to card.CardInfo") return nil } CardMod := p.PlayMod.getCardMod() @@ -192,9 +211,9 @@ func (p *Player) handle(m *msg.Msg) error { p.PushClientRes(CardMod.NotifyCard()) p.PushClientRes(CardMod.NotifyTimes()) case msg.HANDLE_TYPE_REG_CARD_FINISH, msg.HANDLE_TYPE_AGREE_CARD_FAIL: // B收到A的请求已结束 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { - log.Error("Failed to cast m.Extra to card.CardInfo") + log.Error("handle type reg card finish or agree card fail,Failed to cast m.Extra to card.CardInfo") return nil } FriendMod := p.PlayMod.getFriendMod() @@ -206,8 +225,9 @@ func (p *Player) handle(m *msg.Msg) error { ) p.PlayMod.save() case msg.HANDLE_TYPE_AGREE_CARD: // A收到B同意卡牌 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { + log.Error("handle type agree card,Failed to cast m.Extra to card.CardInfo") return nil } CardMod := p.PlayMod.getCardMod() @@ -221,7 +241,7 @@ func (p *Player) handle(m *msg.Msg) error { } for k, v := range otherUid { // 通知好友请求已结束 v.Status = card.STATUS_CARD_GIVE_3 - FriendMgrSend(&msg.Msg{Type: msg.HANDLE_TYPE_REG_CARD_FINISH, From: k, Extra: &v}) + FriendMgrSend(&msg.Msg{Type: msg.HANDLE_TYPE_REG_CARD_FINISH, From: k, Extra: *v}) CardMod.DelRequestCard(k) } p.PlayMod.save() @@ -232,7 +252,7 @@ func (p *Player) handle(m *msg.Msg) error { ) p.PushClientRes(CardMod.NotifyTimes()) case msg.HANDLE_TYPE_REG_CARD_REFUSE: // A收到B拒绝索要卡牌 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } @@ -244,7 +264,7 @@ func (p *Player) handle(m *msg.Msg) error { p.PushClientRes(CardMod.NotifyCard()) case msg.HANDLE_TYPE_EX_CARD: // B收到A置换卡牌 FriendMod := p.PlayMod.getFriendMod() - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } @@ -258,7 +278,7 @@ func (p *Player) handle(m *msg.Msg) error { ) case msg.HANDLE_TYPE_SELECT_EX_CARD: // A收到B选择卡牌进行置换 FriendMod := p.PlayMod.getFriendMod() - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } @@ -270,7 +290,7 @@ func (p *Player) handle(m *msg.Msg) error { }, ) case msg.HANDLE_TYPE_ARGREE_EX_CARD: // B收到A同意置换卡牌 - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } @@ -284,7 +304,7 @@ func (p *Player) handle(m *msg.Msg) error { p.PlayMod.save() case msg.HANDLE_TYPE_REFUSE_SELECT_CARD: // A收到B拒绝置换卡牌 CardMod := p.PlayMod.getCardMod() - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } @@ -296,7 +316,7 @@ func (p *Player) handle(m *msg.Msg) error { p.PlayMod.save() case msg.HANDLE_TYPE_REFUSE_EX_CARD: // B收到A拒绝置换卡牌 CardMod := p.PlayMod.getCardMod() - cardInfo, ok := m.Extra.(card.CardInfo) + cardInfo, ok := getCardInfoFromExtra(m.Extra) if !ok { return nil } diff --git a/src/server/game/player_chess_mod.go b/src/server/game/player_chess_mod.go index 7218b7a9..c9e1cd39 100644 --- a/src/server/game/player_chess_mod.go +++ b/src/server/game/player_chess_mod.go @@ -280,6 +280,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa "chess_name": mergeDataCfg.GetNameById(chessId), }) ChessMod.RemoveChess(chessId) + } }