diff --git a/server/hallserver/common/types.go b/server/hallserver/common/types.go index 2bee2b0e..772aaa55 100644 --- a/server/hallserver/common/types.go +++ b/server/hallserver/common/types.go @@ -22,6 +22,7 @@ type Player interface { GetRoom() Room SetRoom(Room) GetAccountId() string + GetSessionId() string GetName() string GetAvatarUrl() string GetHeroId() int32 diff --git a/server/hallserver/player/player.go b/server/hallserver/player/player.go index 53c775db..a4f6522d 100644 --- a/server/hallserver/player/player.go +++ b/server/hallserver/player/player.go @@ -74,3 +74,7 @@ func (this *player) GetZoneId() int32 { func (this *player) GetNodeId() int32 { return 0 } + +func (this *player) GetSessionId() string { + return this.sessionId +} diff --git a/server/hallserver/player/playermgr.go b/server/hallserver/player/playermgr.go index 364860ca..a370c8f3 100644 --- a/server/hallserver/player/playermgr.go +++ b/server/hallserver/player/playermgr.go @@ -238,3 +238,25 @@ func (this *playerMgr) SS_WSP_SocketDisconnect(hdr *f5.MsgHdr, msg *ss.SS_WSP_So delete(this.socketHash, hdr.GetSocket()) hum.onOffline() } + +func (this *playerMgr) CMReconnect(hdr *f5.MsgHdr, msg *cs.CMReconnect) { + hum := this.internalGetPlayerByAccountId(msg.GetAccountId()) + rspMsg := &cs.SMReconnect{} + if hum == nil { + rspMsg.Errcode = proto.Int32(1) + rspMsg.Errmsg = proto.String("") + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) + return + } + if hum.GetSessionId() != msg.GetSessionId() { + rspMsg.Errcode = proto.Int32(1) + rspMsg.Errmsg = proto.String("") + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) + return + } + if hum.socket.IsValid() { + delete(this.socketHash, hum.socket) + } + this.socketHash[hdr.GetSocket()] = hum + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) +} diff --git a/server/hallserver/proto/cs_proto.proto b/server/hallserver/proto/cs_proto.proto index 73ee0234..b1ed41b9 100644 --- a/server/hallserver/proto/cs_proto.proto +++ b/server/hallserver/proto/cs_proto.proto @@ -181,7 +181,8 @@ message SMReconnect //创建房间 message CMCreateRoom { - optional string passwd = 1; //密码,空:无密码 + optional int32 map_id = 1; //地图id + optional string passwd = 2; //密码,空:无密码 } message SMCreateRoom diff --git a/server/hallserver/room/room.go b/server/hallserver/room/room.go index 0ae08e95..6f0a6588 100644 --- a/server/hallserver/room/room.go +++ b/server/hallserver/room/room.go @@ -29,10 +29,13 @@ type room struct { startTimer *f5.TimerWp } -func (this *room) init(roomId string, roomIdx int64, owner common.Player, passwd string) { +func (this *room) init(roomId string, roomIdx int64, mapId int32, owner common.Player, passwd string) { this.roomId = roomId this.roomIdx = roomIdx this.entry.Init(this) + this.config.mapId = mapId + this.config.zoneId = owner.GetZoneId() + this.config.nodeId = owner.GetNodeId() this.config.passwd = passwd this.owner = newMember(owner) this.members = map[string]*member{ diff --git a/server/hallserver/room/roommgr.go b/server/hallserver/room/roommgr.go index 64fb0cb2..3d6bef15 100644 --- a/server/hallserver/room/roommgr.go +++ b/server/hallserver/room/roommgr.go @@ -62,7 +62,7 @@ func (this *roomMgr) CMCreateRoom(hdr *f5.MsgHdr, msg *cs.CMCreateRoom) { return } m := new(room) - m.init(q5.ToString(this.genRoomId()), this.genRoomIdx(), hum, msg.GetPasswd()) + m.init(q5.ToString(this.genRoomId()), this.genRoomIdx(), msg.GetMapId(), hum, msg.GetPasswd()) this.idHash[m.roomId] = m hum.SendMsg(rspMsg)