diff --git a/server/matchserver/common/types.go b/server/matchserver/common/types.go index 1499e78d..ecc2e82c 100644 --- a/server/matchserver/common/types.go +++ b/server/matchserver/common/types.go @@ -14,6 +14,7 @@ type Team interface { GetTeamUuid() string CanJoin(string) bool Join(Player) bool + GetMemberByAccountId(string) Player OnPlayerOffline(Player) OnPlayerOnline(Player) } @@ -25,6 +26,7 @@ type TeamMgr interface { } type Player interface { + GetSocket() f5.WspCliConn GetAccountId() string GetSessionId() string GetName() string diff --git a/server/matchserver/player/player.go b/server/matchserver/player/player.go index c9f1bb92..c85ea7b1 100644 --- a/server/matchserver/player/player.go +++ b/server/matchserver/player/player.go @@ -42,6 +42,23 @@ func (this *player) init(req *pendingLoginRequest, name string, avatarUrl string this.headFrame = headFrame } +func (this *player) againInit(req *pendingLoginRequest, name string, avatarUrl string, heroId string, + headFrame string){ + this.socket = req.hdr.GetSocket() + this.accountId = req.msg.GetAccountId() + this.sessionId = req.msg.GetSessionId() + this.zoneId = req.msg.GetZoneId() + this.nodeId = req.msg.GetNodeId() + this.name = name + this.avatarUrl = avatarUrl + this.heroId = heroId + this.headFrame = headFrame +} + +func (this *player) GetSocket() f5.WspCliConn { + return this.socket +} + func (this *player) onOffline(){ this.socket.Reset() } diff --git a/server/matchserver/player/playermgr.go b/server/matchserver/player/playermgr.go index 8fb10ef6..9853bc90 100644 --- a/server/matchserver/player/playermgr.go +++ b/server/matchserver/player/playermgr.go @@ -193,17 +193,34 @@ func (this *playerMgr) apiAuthCb(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.HttpCli GetWspListener().SendProxyMsg(pendingReq.hdr.Conn, pendingReq.hdr.SocketHandle, &rspMsg) return } + member := team.GetMemberByAccountId(msg.GetAccountId()) if !team.CanJoin(msg.GetAccountId()) { rspMsg.Errcode = proto.Int32(103) rspMsg.Errmsg = proto.String("join team error") GetWspListener().SendProxyMsg(pendingReq.hdr.Conn, pendingReq.hdr.SocketHandle, &rspMsg) return } - - hum := new(player) - hum.init(pendingReq, rspObj.Info.Name, rspObj.Info.HeadId, rspObj.Info.HeroId, rspObj.Info.HeadFrame) - this.socketHash[pendingReq.hdr.GetSocket()] = hum - team.Join(hum) + if member != nil { + hum := member.(*player) + if hum.socket.IsValid() { + delete(this.socketHash, hum.socket) + } + hum.againInit(pendingReq, + rspObj.Info.Name, + rspObj.Info.HeadId, + rspObj.Info.HeroId, + rspObj.Info.HeadFrame) + this.socketHash[pendingReq.hdr.GetSocket()] = hum + } else { + hum := new(player) + hum.init(pendingReq, + rspObj.Info.Name, + rspObj.Info.HeadId, + rspObj.Info.HeroId, + rspObj.Info.HeadFrame) + this.socketHash[pendingReq.hdr.GetSocket()] = hum + team.Join(hum) + } rspMsg.TeamUuid = proto.String(team.GetTeamUuid()) rspMsg.ServerInfo = proto.String(mt.Table.MatchCluster.GetServerInfo())