This commit is contained in:
殷勇 2023-10-10 15:51:00 +08:00
parent 22031c44ef
commit 5ddd1c748d
6 changed files with 86 additions and 27 deletions

View File

@ -18,6 +18,7 @@ type Room interface {
type RoomMgr interface { type RoomMgr interface {
ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr) ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr)
RemoveRoomMember(*f5.MsgHdr)
} }
type Player interface { type Player interface {

View File

@ -2,32 +2,32 @@ package player
import ( import (
"cs" "cs"
"ss"
"encoding/json" "encoding/json"
"f5" "f5"
"fmt" "fmt"
"net"
"mt"
"q5"
"main/constant"
"main/common"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"main/common"
"main/constant"
. "main/global" . "main/global"
"mt"
"net"
"q5"
"ss"
) )
type pendingLoginRequest struct { type pendingLoginRequest struct {
hdr *f5.MsgHdr hdr *f5.MsgHdr
msg *cs.CMLogin msg *cs.CMLogin
addTick int64 addTick int64
reqId int64 reqId int64
} }
type playerMgr struct { type playerMgr struct {
cs.MsgHandlerImpl cs.MsgHandlerImpl
accountIdHash map[string]*player accountIdHash map[string]*player
socketHash map[f5.WspCliConn]*player socketHash map[f5.WspCliConn]*player
pendingLoginHash map[string]*pendingLoginRequest pendingLoginHash map[string]*pendingLoginRequest
currReqId int64 currReqId int64
} }
func (this *playerMgr) Init() { func (this *playerMgr) Init() {
@ -48,15 +48,15 @@ func (this *playerMgr) Init() {
}) })
f5.GetApp().RegisterIMMsgHandle( f5.GetApp().RegisterIMMsgHandle(
constant.IM_WSP_CLOSE, constant.IM_WSP_CLOSE,
func (args q5.Args) { func(args q5.Args) {
conn := args[0].(net.Conn) conn := args[0].(net.Conn)
deletedPlayers := make(map[f5.WspCliConn]*player) deletedPlayers := make(map[f5.WspCliConn]*player)
for socket, hum := range(this.socketHash) { for socket, hum := range this.socketHash {
if conn == socket.Conn { if conn == socket.Conn {
deletedPlayers[socket] = hum deletedPlayers[socket] = hum
} }
} }
for socket, _ := range(deletedPlayers) { for socket, _ := range deletedPlayers {
this.onSocketClose(socket) 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()) rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
oldHum.reBind(hdr.GetSocket()) oldHum.reBind(hdr.GetSocket())
oldHum.SendMsg(&rspMsg) 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()) rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
oldHum.reBind(hdr.GetSocket()) oldHum.reBind(hdr.GetSocket())
oldHum.SendMsg(&rspMsg) oldHum.SendMsg(&rspMsg)
return; GetRoomMgr().RemoveRoomMember(hdr)
return
} }
} }
reqId := this.genSeqId() reqId := this.genSeqId()
pendingReq := this.getPendingRequest(msg.GetAccountId()) pendingReq := this.getPendingRequest(msg.GetAccountId())
if pendingReq == nil { if pendingReq == nil {
this.pendingLoginHash[msg.GetAccountId()] = &pendingLoginRequest{ this.pendingLoginHash[msg.GetAccountId()] = &pendingLoginRequest{
hdr: hdr, hdr: hdr,
msg: msg, msg: msg,
addTick: q5.GetTickCount(), addTick: q5.GetTickCount(),
reqId: *reqId, reqId: *reqId,
} }
} else { } else {
if pendingReq.msg.GetAccountId() == msg.GetAccountId() && 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"` Name string `json:"name"`
HeadId string `json:"head_id"` HeadId string `json:"head_id"`
HeroId string `json:"hero_id"` HeroId string `json:"hero_id"`
HeadFrame string `json:"head_frame"` HeadFrame string `json:"head_frame"`
} `json:"info"` } `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()) rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, &rspMsg) GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, &rspMsg)
GetRoomMgr().RemoveRoomMember(hdr)
} }
func (this *playerMgr) reportServerState(masterIp string, masterPort int32) { func (this *playerMgr) reportServerState(masterIp string, masterPort int32) {
@ -235,7 +240,7 @@ func (this *playerMgr) internalGetPlayerBySocket(socket f5.WspCliConn) *player {
return nil 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 { switch handler.HandlerId {
case constant.PLAYER_MGR_HANDLER_ID: case constant.PLAYER_MGR_HANDLER_ID:
cs.DispatchMsg(handler, hdr, this) 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] req, ok := this.pendingLoginHash[accountId]
if ok { if ok {
return req return req

View File

@ -352,3 +352,27 @@ message SMRoomGameStartNotify
optional string team_uuid = 3; //CMJoin战斗服时用 optional string team_uuid = 3; //CMJoin战斗服时用
optional string custom_room_payload = 4; // 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; //
}

View File

@ -15,4 +15,10 @@ const (
ROOM_MANUAL_START_TYPE 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 const ROOM_MIN_START_TEAM_NUM = 2

View File

@ -110,7 +110,7 @@ func (this *room) canJoin(member common.Player, msg *cs.CMJoinRoom) bool {
if member.GetRoom() != nil { if member.GetRoom() != nil {
return false return false
} }
if int32(len(this.teamUuidHash)) >= this.config.maxTeamNum { if this.getTeamNum() >= this.config.maxTeamNum {
return false return false
} }
if this.getMember(member.GetAccountId()) != nil { if this.getMember(member.GetAccountId()) != nil {
@ -193,7 +193,7 @@ func (this *room) CMDisbandRoom(hdr *f5.MsgHdr, msg *cs.CMDisbandRoom) {
return return
} }
if this.roomState == ROOM_INIT_STATE { if this.roomState == ROOM_INIT_STATE {
this.doDisband(1) this.doDisband(ROOM_DISBAND_1_REASON)
} }
hum.SendMsg(rspMsg) hum.SendMsg(rspMsg)
} }
@ -205,7 +205,7 @@ func (this *room) CMLeaveRoom(hdr *f5.MsgHdr, msg *cs.CMLeaveRoom) {
if this.isOwner(hum) { if this.isOwner(hum) {
nextOwner := this.getNextOwner() nextOwner := this.getNextOwner()
if nextOwner == nil { if nextOwner == nil {
this.doDisband(1) this.doDisband(ROOM_DISBAND_NO_NEXT_OWNER_REASON)
return return
} else { } else {
this.removeMember(this.owner.hum.GetAccountId()) 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) { func (this *room) broadcastMsg(msg proto.Message) {
for _, m := range this.members { for _, m := range this.members {
if m.hum.GetRoom() == this { if m.hum.GetRoom() == this {
@ -308,7 +324,7 @@ func (this *room) autoStart() {
if this.canStart() { if this.canStart() {
this.doStart(0) this.doStart(0)
} else { } else {
this.doDisband(0) this.doDisband(ROOM_DISBAND_DEFAULT_REASON)
} }
} }
} }

View File

@ -146,3 +146,10 @@ func (this *roomMgr) CMGetCurrentRoom(hdr *f5.MsgHdr, msg *cs.CMGetCurrentRoom)
} }
hum.SendMsg(rspMsg) 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())
}
}