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 {
ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr)
RemoveRoomMember(*f5.MsgHdr)
}
type Player interface {

View File

@ -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

View File

@ -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; //
}

View File

@ -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

View File

@ -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)
}
}
}

View File

@ -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())
}
}