save
This commit is contained in:
parent
22031c44ef
commit
5ddd1c748d
@ -18,6 +18,7 @@ type Room interface {
|
||||
|
||||
type RoomMgr interface {
|
||||
ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr)
|
||||
RemoveRoomMember(*f5.MsgHdr)
|
||||
}
|
||||
|
||||
type Player interface {
|
||||
|
@ -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
|
||||
|
@ -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; //错误描述
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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())
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user