public static void SendSessionClientActor(this User user, IActorMessage message) { if (user.GetComponent <UserGateActorIdComponent>() != null) { long actorId = user.GetComponent <UserGateActorIdComponent>().ActorId; ActorHelp.SendActor(actorId, message); } }
//投票超时处理 public static void RoomVoteOverTime(this MatchRoom matchRoom) { //超时默认结果为同意 matchRoom.VoteDissolveResult.Result = VoteResultType.Consent; //广播投票的消息 matchRoom.BroadcastActorMessage(matchRoom.VoteDissolveResult); //通知游戏服 房间解散 销毁游戏服的房间 游戏服会通知匹配服的 ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_RoomDissolve()); }
//判断用户在不在游戏 如果在 就通知客户端玩家在游戏中 public static bool JudgeUserIsGameIn(this MatchRoomComponent matchRoomComponent, long userId, long userSessionActorId) { if (matchRoomComponent.UserIdInRoomIdDic.ContainsKey(userId)) { ActorHelp.SendeActor(userSessionActorId, new Actor_BeingInGame() { IsGameBeing = true }); //通知客户端 用户在游戏中 return(true); } return(false); }
public static bool IsUserInGame(this MatchRoomComponent matchRoomCom, long userId, long sessionActorId) { if (matchRoomCom.UserIdInRoomDic.ContainsKey(userId)) { ActorHelp.SendActor(sessionActorId, new Actor_BeingInGame() { IsGameBeing = true }); return(true); } return(false); }
//玩家投票解散房间 public static void PlayerVoteDissolveRoom(this MatchRoom matchRoom, long userId, bool isConsent) { if (!matchRoom.IsVoteDissolveIn)//不是投票中收到投票消息 不予理会 { return; } VoteInfo voteInfo = new VoteInfo(); voteInfo.UserId = userId; voteInfo.IsConsent = isConsent; matchRoom.VoteDissolveResult.VoteInfos.Add(voteInfo); matchRoom.VoteDissolveResult.Result = VoteResultType.BeingVote; if (!isConsent) { //一个人不同意 直接不解散 matchRoom.VoteDissolveResult.Result = VoteResultType.NoConsent; } else { //检测是否所有人都同意 if (matchRoom.VoteDissolveResult.VoteInfos.Count == matchRoom.PlayerInfoDic.Count) { matchRoom.VoteDissolveResult.Result = VoteResultType.Consent; } } //广播投票的消息 matchRoom.BroadcastActorMessage(matchRoom.VoteDissolveResult); if (matchRoom.VoteDissolveResult.Result != VoteResultType.BeingVote)//如果结论不是投票中 就表示已经投票结束 { if (MatchRoomComponent.Ins.VoteInRooms.Contains(matchRoom)) { MatchRoomComponent.Ins.VoteInRooms.Remove(matchRoom);//把自己房间 从投票超时房间里面移除 } if (matchRoom.VoteDissolveResult.Result == VoteResultType.NoConsent) { //让游戏服的房间开始游戏 ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_PauseRoomGame() { IsPause = false }); } else if (matchRoom.VoteDissolveResult.Result == VoteResultType.Consent) { //通知游戏服 房间解散 销毁游戏服的房间 游戏服会通知匹配服的 ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_RoomDissolve()); } matchRoom.IsVoteDissolveIn = false; //改变投票状态 matchRoom.VoteDissolveResult = null; //清空投票信息 } }
public static void Broadcast(IActorMessage message) { Unit[] units = Game.Scene.GetComponent <UnitComponent>().GetAll(); ActorMessageSenderComponent actorLocationSenderComponent = Game.Scene.GetComponent <ActorMessageSenderComponent>(); foreach (Unit unit in units) { UnitGateComponent unitGateComponent = unit.GetComponent <UnitGateComponent>(); if (unitGateComponent.IsDisconnect) { continue; } ActorHelp.SendeActor(unitGateComponent.GateSessionActorId, message); } }
//进入投票状态 public static void RommEnterVoteDissolve(this MatchRoom matchRoom, long userId) { if (matchRoom.IsVoteDissolveIn) { return; //已经在投票状态 无法再次投票 } matchRoom.IsVoteDissolveIn = true; //状态改为投票中 matchRoom.VoteTimeResidue = FiveStarOverTime.DissolveOverTime; //更改投票 超时剩余时间 MatchRoomComponent.Ins.VoteInRooms.Add(matchRoom); //把自己房间 加入到 投票超时房间里面 //让游戏服的房间暂停游戏 ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, new Actor_PauseRoomGame() { IsPause = true }); matchRoom.VoteDissolveResult = new Actor_VoteDissolveRoomResult(); //new 出发送个客户端的投票结果 matchRoom.VoteDissolveResult.SponsorUserId = userId; //记录发起人的UserId matchRoom.PlayerVoteDissolveRoom(userId, true); //发起投票解散房间 }
//玩家下线事件 public static void UserOffline(this GateUserComponent gateUserComponent, long userId) { long gamerSeesionActorId = 0; if (gateUserComponent.mUserDic.ContainsKey(userId)) { gamerSeesionActorId = gateUserComponent.mUserDic[userId].GetUserClientSession().GetComponent <SessionUserComponent>().GamerSessionActorId; } if (gamerSeesionActorId != 0) { ActorHelp.SendeActor(gamerSeesionActorId, new Actor_UserOffLine());//告诉游戏服 用户下线 } if (gateUserComponent.mUserDic.ContainsKey(userId)) { gateUserComponent.mUserDic.Remove(userId); } //给其他服务器广播玩家下线消息 gateUserComponent.BroadcastOnAndOffLineMessage(new G2S_UserOffline() { UserId = userId }); }
protected override void Run(Session session, C2M_GetReconnectionRoomInfo message, Action <M2C_GetReconnectionRoomInfo> reply) { M2C_GetReconnectionRoomInfo response = new M2C_GetReconnectionRoomInfo(); try { MatchRoom matchRoom = MatchRoomComponent.Ins.GetRoomUserIdIn(message.UserId); if (matchRoom == null) { response.IsGameBeing = false; response.Message = "房间已经结算"; reply(response); return; } response.IsGameBeing = true; if (matchRoom.IsGameBeing) { Actor_UserRequestReconnectionRoom m2SUserRequest = new Actor_UserRequestReconnectionRoom(); m2SUserRequest.UserId = message.UserId; m2SUserRequest.UserActorId = matchRoom.GetPlayerInfo(message.UserId).SessionActorId; ActorHelp.SendeActor(matchRoom.GameServeRoomActorId, m2SUserRequest); if (matchRoom.IsVoteDissolveIn)//如果正在投票解散中 补发一条投票结果消息 { ActorHelp.SendeActor(m2SUserRequest.UserActorId, matchRoom.VoteDissolveResult); } } else { response.RoomInfos = RoomInfoFactory.Creator(matchRoom); } reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }