From 5ddd1c748d98a8a49bf572a8db911f2167b91d7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Tue, 10 Oct 2023 15:51:00 +0800 Subject: [PATCH] save --- server/hallserver/common/types.go | 1 + server/hallserver/player/playermgr.go | 51 ++++++++++++++------------ server/hallserver/proto/cs_proto.proto | 24 ++++++++++++ server/hallserver/room/constant.go | 6 +++ server/hallserver/room/room.go | 24 ++++++++++-- server/hallserver/room/roommgr.go | 7 ++++ 6 files changed, 86 insertions(+), 27 deletions(-) diff --git a/server/hallserver/common/types.go b/server/hallserver/common/types.go index 54ea2c4e..4a5a1fe4 100644 --- a/server/hallserver/common/types.go +++ b/server/hallserver/common/types.go @@ -18,6 +18,7 @@ type Room interface { type RoomMgr interface { ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr) + RemoveRoomMember(*f5.MsgHdr) } type Player interface { diff --git a/server/hallserver/player/playermgr.go b/server/hallserver/player/playermgr.go index 03b3f52e..945f1bdf 100644 --- a/server/hallserver/player/playermgr.go +++ b/server/hallserver/player/playermgr.go @@ -2,32 +2,32 @@ package player import ( "cs" - "ss" "encoding/json" "f5" "fmt" - "net" - "mt" - "q5" - "main/constant" - "main/common" "github.com/golang/protobuf/proto" + "main/common" + "main/constant" . "main/global" + "mt" + "net" + "q5" + "ss" ) type pendingLoginRequest struct { - hdr *f5.MsgHdr - msg *cs.CMLogin + hdr *f5.MsgHdr + msg *cs.CMLogin addTick int64 - reqId int64 + reqId int64 } type playerMgr struct { cs.MsgHandlerImpl - accountIdHash map[string]*player - socketHash map[f5.WspCliConn]*player + accountIdHash map[string]*player + socketHash map[f5.WspCliConn]*player pendingLoginHash map[string]*pendingLoginRequest - currReqId int64 + currReqId int64 } func (this *playerMgr) Init() { @@ -48,15 +48,15 @@ func (this *playerMgr) Init() { }) f5.GetApp().RegisterIMMsgHandle( constant.IM_WSP_CLOSE, - func (args q5.Args) { + func(args q5.Args) { conn := args[0].(net.Conn) deletedPlayers := make(map[f5.WspCliConn]*player) - for socket, hum := range(this.socketHash) { + for socket, hum := range this.socketHash { if conn == socket.Conn { deletedPlayers[socket] = hum } } - for socket, _ := range(deletedPlayers) { + for socket, _ := range deletedPlayers { this.onSocketClose(socket) } }) @@ -75,7 +75,9 @@ func (this *playerMgr) CMLogin(hdr *f5.MsgHdr, msg *cs.CMLogin) { rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo()) oldHum.reBind(hdr.GetSocket()) oldHum.SendMsg(&rspMsg) - return; + GetRoomMgr().RemoveRoomMember(hdr) + + return } } { @@ -87,17 +89,19 @@ func (this *playerMgr) CMLogin(hdr *f5.MsgHdr, msg *cs.CMLogin) { rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo()) oldHum.reBind(hdr.GetSocket()) oldHum.SendMsg(&rspMsg) - return; + GetRoomMgr().RemoveRoomMember(hdr) + + return } } reqId := this.genSeqId() pendingReq := this.getPendingRequest(msg.GetAccountId()) if pendingReq == nil { this.pendingLoginHash[msg.GetAccountId()] = &pendingLoginRequest{ - hdr: hdr, - msg: msg, + hdr: hdr, + msg: msg, addTick: q5.GetTickCount(), - reqId: *reqId, + reqId: *reqId, } } else { if pendingReq.msg.GetAccountId() == msg.GetAccountId() && @@ -151,7 +155,7 @@ func (this *playerMgr) apiAuthCb(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.HttpCli Name string `json:"name"` HeadId string `json:"head_id"` HeroId string `json:"hero_id"` - HeadFrame string `json:"head_frame"` + HeadFrame string `json:"head_frame"` } `json:"info"` }{} { @@ -179,6 +183,7 @@ func (this *playerMgr) apiAuthCb(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.HttpCli rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo()) GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, &rspMsg) + GetRoomMgr().RemoveRoomMember(hdr) } func (this *playerMgr) reportServerState(masterIp string, masterPort int32) { @@ -235,7 +240,7 @@ func (this *playerMgr) internalGetPlayerBySocket(socket f5.WspCliConn) *player { return nil } -func (this* playerMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr) { +func (this *playerMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr) { switch handler.HandlerId { case constant.PLAYER_MGR_HANDLER_ID: cs.DispatchMsg(handler, hdr, this) @@ -247,7 +252,7 @@ func (this* playerMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr) } } -func (this *playerMgr) getPendingRequest(accountId string)* pendingLoginRequest { +func (this *playerMgr) getPendingRequest(accountId string) *pendingLoginRequest { req, ok := this.pendingLoginHash[accountId] if ok { return req diff --git a/server/hallserver/proto/cs_proto.proto b/server/hallserver/proto/cs_proto.proto index fe40d268..1c8fb54b 100644 --- a/server/hallserver/proto/cs_proto.proto +++ b/server/hallserver/proto/cs_proto.proto @@ -352,3 +352,27 @@ message SMRoomGameStartNotify optional string team_uuid = 3; //CMJoin战斗服时用 optional string custom_room_payload = 4; //自定义房间透传数据 } + +//进入观察队伍 +message CMEnterObserver +{ + optional string room_id = 1; //房间号 +} + +message SMEnterObserver +{ + optional int32 errcode = 1; //错误码 0:成功 1:权限不足 + optional string errmsg = 2; //错误描述 +} + +//离开观察队伍 +message CMLeaveObserver +{ + optional string room_id = 1; //房间号 +} + +message SMLeaveObserver +{ + optional int32 errcode = 1; //错误码 0:成功 1:权限不足 + optional string errmsg = 2; //错误描述 +} diff --git a/server/hallserver/room/constant.go b/server/hallserver/room/constant.go index 62163f1f..cc1b9014 100644 --- a/server/hallserver/room/constant.go +++ b/server/hallserver/room/constant.go @@ -15,4 +15,10 @@ const ( ROOM_MANUAL_START_TYPE ) +const ( + ROOM_DISBAND_DEFAULT_REASON = iota + ROOM_DISBAND_1_REASON + ROOM_DISBAND_NO_NEXT_OWNER_REASON +) + const ROOM_MIN_START_TEAM_NUM = 2 diff --git a/server/hallserver/room/room.go b/server/hallserver/room/room.go index a502afaa..3f651333 100644 --- a/server/hallserver/room/room.go +++ b/server/hallserver/room/room.go @@ -110,7 +110,7 @@ func (this *room) canJoin(member common.Player, msg *cs.CMJoinRoom) bool { if member.GetRoom() != nil { return false } - if int32(len(this.teamUuidHash)) >= this.config.maxTeamNum { + if this.getTeamNum() >= this.config.maxTeamNum { return false } if this.getMember(member.GetAccountId()) != nil { @@ -193,7 +193,7 @@ func (this *room) CMDisbandRoom(hdr *f5.MsgHdr, msg *cs.CMDisbandRoom) { return } if this.roomState == ROOM_INIT_STATE { - this.doDisband(1) + this.doDisband(ROOM_DISBAND_1_REASON) } hum.SendMsg(rspMsg) } @@ -205,7 +205,7 @@ func (this *room) CMLeaveRoom(hdr *f5.MsgHdr, msg *cs.CMLeaveRoom) { if this.isOwner(hum) { nextOwner := this.getNextOwner() if nextOwner == nil { - this.doDisband(1) + this.doDisband(ROOM_DISBAND_NO_NEXT_OWNER_REASON) return } else { this.removeMember(this.owner.hum.GetAccountId()) @@ -295,6 +295,22 @@ func (this *room) CMCloseNotify(hdr *f5.MsgHdr, msg *cs.CMCloseNotify) { } } +func (this *room) CMEnterObserver(hdr *f5.MsgHdr, msg *cs.CMEnterObserver) { + //hum := hdr.Context.(common.Player) + //m := this.getMember(hum.GetAccountId()) + // if this.isOwner(hum) { + // t := this.owner.team + // } +} + +func (this *room) CMLeaveObserver(hdr *f5.MsgHdr, msg *cs.CMLeaveObserver) { + //hum := hdr.Context.(common.Player) + //m := this.getMember(hum.GetAccountId()) + // if this.isOwner(hum) { + // t := this.owner.team + // } +} + func (this *room) broadcastMsg(msg proto.Message) { for _, m := range this.members { if m.hum.GetRoom() == this { @@ -308,7 +324,7 @@ func (this *room) autoStart() { if this.canStart() { this.doStart(0) } else { - this.doDisband(0) + this.doDisband(ROOM_DISBAND_DEFAULT_REASON) } } } diff --git a/server/hallserver/room/roommgr.go b/server/hallserver/room/roommgr.go index 862bcaa4..c0d50044 100644 --- a/server/hallserver/room/roommgr.go +++ b/server/hallserver/room/roommgr.go @@ -146,3 +146,10 @@ func (this *roomMgr) CMGetCurrentRoom(hdr *f5.MsgHdr, msg *cs.CMGetCurrentRoom) } hum.SendMsg(rspMsg) } + +func (this *roomMgr) RemoveRoomMember(hdr *f5.MsgHdr) { + hum := GetPlayerMgr().GetPlayerBySocket(hdr.GetSocket()) + if roomPtr, ok := hum.GetRoom().(*room); ok { + roomPtr.removeMember(hum.GetAccountId()) + } +}