private static void OnGameAllowServerCommandMessageReceived(GameAllowServerCommandMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar document)) { document.AddServerCommand(message.ServerCommand); } }
public override void Destruct() { GameAvatarManager.ExecuteServerCommandsInOfflineMode(this.GameAvatar); GameAvatarManager.Save(this.GameAvatar); GameMatchmakingManager.Enqueue(this.GameAvatar); this.GameAvatar.CurrentSession = null; this.DestructGameState(); base.Destruct(); }
private static void OnNewAvatarStreamMessageReceived(CreateAvatarStreamMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar document)) { ServerRequestManager.Create(new CreateAvatarStreamRequestMessage { OwnerId = document.Id, Entry = message.Entry }, ServerManager.GetDocumentSocket(11, document.Id)).OnComplete = document.OnAvatarStreamCreated; } }
private static void OnAllianceLeavedMessageReceived(AllianceLeavedMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar document)) { if (document.LogicClientAvatar.IsInAlliance() && document.LogicClientAvatar.GetAllianceId().Equals(message.AllianceId)) { LogicLeaveAllianceCommand logicLeaveAllianceCommand = new LogicLeaveAllianceCommand(); logicLeaveAllianceCommand.SetAllianceData(message.AllianceId); document.AddServerCommand(logicLeaveAllianceCommand); } } }
public static void Init() { ServerGame.GameDatabase = new CouchbaseDatabase("magic-players", "game"); GameResourceManager.Init(); GameMatchmakingManager.Init(); GameDuelMatchmakingManager.Init(); GameAvatarManager.Init(); GameSessionManager.Init(); LiveReplayManager.Init(); GameBaseGenerator.Init(); WordCensorUtil.Init(); }
private static void OnGameAvatarRequestMessageReceived(GameAvatarRequestMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar document)) { ServerRequestManager.SendResponse(new GameAvatarResponseMessage { Document = document, Success = true }, message); } else { ServerRequestManager.SendResponse(new GameAvatarResponseMessage(), message); } }
private static void OnForwardLogicMessageRequestMessageReceived(ForwardLogicRequestMessage message) { PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType); if (logicMessage == null) { throw new Exception("logicMessage should not be NULL!"); } logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength); logicMessage.SetMessageVersion(message.MessageVersion); logicMessage.Decode(); if (!logicMessage.IsServerToClientMessage()) { switch (logicMessage.GetMessageType()) { case AskForAvatarProfileMessage.MESSAGE_TYPE: { AskForAvatarProfileMessage askForAvatarProfileMessage = (AskForAvatarProfileMessage)logicMessage; LogicLong avatarId = askForAvatarProfileMessage.RemoveAvatarId(); if (GameAvatarManager.TryGet(avatarId, out GameAvatar document)) { AvatarProfileMessage avatarProfileMessage = new AvatarProfileMessage(); AvatarProfileFullEntry avatarProfileFullEntry = new AvatarProfileFullEntry(); avatarProfileFullEntry.SetLogicClientAvatar(document.LogicClientAvatar); avatarProfileFullEntry.SetCompressedHomeJSON(document.LogicClientHome.GetCompressibleHomeJSON().GetCompressed()); avatarProfileMessage.SetAvatarProfileFullEntry(avatarProfileFullEntry); ServerMessageManager.SendMessage(GameMessageManager.CreateForwardLogicMessage(avatarProfileMessage, message.SessionId), ServerManager.GetProxySocket(message.SessionId)); } else { AvatarProfileFailedMessage avatarProfileFailedMessage = new AvatarProfileFailedMessage(); avatarProfileFailedMessage.SetErrorType(AvatarProfileFailedMessage.ErrorType.NOT_FOUND); ServerMessageManager.SendMessage(GameMessageManager.CreateForwardLogicMessage(avatarProfileFailedMessage, message.SessionId), ServerManager.GetProxySocket(message.SessionId)); } break; } } } }
public GameSession(StartServerSessionMessage message) : base(message) { this.LogicMessageManager = new LogicMessageManager(this); this.GameAvatar = GameAvatarManager.TryGet(this.AccountId, out GameAvatar document) ? document : GameAvatarManager.Create(this.AccountId); if (this.GameAvatar.CurrentSession != null) { GameSessionManager.Remove(this.GameAvatar.CurrentSession.Id); } this.GameAvatar.CurrentSession = this; GameMatchmakingManager.Dequeue(this.GameAvatar); ServerRequestManager.Create(new BindServerSocketRequestMessage { SessionId = this.Id, ServerType = 10, ServerId = -1 }, this.m_sockets[1], 10).OnComplete = this.OnHomeServerBound; }
private static void OnHomeStateCallbackMessageReceived(GameStateCallbackMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar gameDocument)) { gameDocument.LogicClientAvatar = message.LogicClientAvatar; if (message.HomeJSON != null) { for (int i = 0; i < message.ExecutedServerCommands.Size(); i++) { LogicServerCommand serverCommand = message.ExecutedServerCommands[i]; for (int j = 0; j < gameDocument.ServerCommands.Size(); j++) { if (gameDocument.ServerCommands[j].GetId() == serverCommand.GetId()) { gameDocument.ServerCommands.Remove(j); break; } } } gameDocument.LogicClientHome.GetCompressibleHomeJSON().Set(message.HomeJSON); gameDocument.LogicClientHome.SetShieldDurationSeconds(message.RemainingShieldTime); gameDocument.LogicClientHome.SetGuardDurationSeconds(message.RemainingGuardTime); gameDocument.LogicClientHome.SetPersonalBreakSeconds(message.NextPersonalBreakTime); gameDocument.SaveTime = message.SaveTime; } if (gameDocument.LogicClientAvatar.IsInAlliance() && message.AvatarChanges.Size() != 0) { ServerMessageManager.SendMessage(new AllianceAvatarChangesMessage { AccountId = gameDocument.LogicClientAvatar.GetAllianceId(), MemberId = gameDocument.LogicClientAvatar.GetId(), AvatarChanges = message.AvatarChanges }, 11); } GameSession currentSession = gameDocument.CurrentSession; if (currentSession != null) { DateTime utc = DateTime.UtcNow; if (utc.Subtract(currentSession.LastDbSave).TotalSeconds > 2) { GameAvatarManager.Save(gameDocument); currentSession.LastDbSave = utc; } if (message.SessionId != currentSession.Id) { currentSession.SendPiranhaMessage(new OutOfSyncMessage(), 1); currentSession.SendMessage(new StopSessionMessage { Reason = 1 }, 1); return; } if (message.AvatarChanges.Size() != 0) { for (int i = 0; i < message.AvatarChanges.Size(); i++) { if (message.AvatarChanges[i].GetAvatarChangeType() == AvatarChangeType.ALLIANCE_JOINED) { currentSession.BindAllianceServer(); } } } } else { GameAvatarManager.Save(gameDocument); } } }
private static void OnGameCreateAllianceInvitationRequestMessageReceived(GameCreateAllianceInvitationRequestMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar avatar)) { if (avatar.LogicClientAvatar.IsInAlliance() || avatar.HasServerCommandOfType(LogicCommandType.JOIN_ALLIANCE) || avatar.PendingAllianceJoinResponse) { ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { ErrorReason = GameCreateAllianceInvitationResponseMessage.Reason.ALREADY_IN_ALLIANCE }, message); return; } if (!avatar.LogicClientAvatar.HasAllianceCastle()) { ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { ErrorReason = GameCreateAllianceInvitationResponseMessage.Reason.NO_CASTLE }, message); return; } ServerRequestManager.Create(new LoadAvatarStreamOfTypeRequestMessage { StreamIds = avatar.AvatarStreamList, SenderAvatarId = message.Entry.GetSenderAvatarId(), Type = AvatarStreamEntryType.ALLIANCE_INVITATION }, ServerManager.GetDocumentSocket(11, avatar.Id), 5).OnComplete = args => { if (args.ErrorCode == ServerRequestError.Success && args.ResponseMessage.Success) { LoadAvatarStreamOfTypeResponseMessage loadAvatarStreamOfTypeResponseMessage = (LoadAvatarStreamOfTypeResponseMessage)args.ResponseMessage; for (int i = 0; i < loadAvatarStreamOfTypeResponseMessage.StreamList.Size(); i++) { AllianceInvitationAvatarStreamEntry allianceInvitationAvatarStreamEntry = (AllianceInvitationAvatarStreamEntry)loadAvatarStreamOfTypeResponseMessage.StreamList[i]; if (allianceInvitationAvatarStreamEntry.GetAllianceId().Equals(message.Entry.GetAllianceId())) { ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { ErrorReason = GameCreateAllianceInvitationResponseMessage.Reason.ALREADY_HAS_AN_INVITE }, message); return; } } if (loadAvatarStreamOfTypeResponseMessage.StreamList.Size() >= 10) { ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { ErrorReason = GameCreateAllianceInvitationResponseMessage.Reason.HAS_TOO_MANY_INVITES }, message); } ServerMessageManager.SendMessage(new CreateAvatarStreamMessage { AccountId = message.AccountId, Entry = message.Entry }, 9); ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { Success = true }, message); } else { ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { ErrorReason = GameCreateAllianceInvitationResponseMessage.Reason.GENERIC }, message); } }; } else { ServerRequestManager.SendResponse(new GameCreateAllianceInvitationResponseMessage { ErrorReason = GameCreateAllianceInvitationResponseMessage.Reason.GENERIC }, message); } }
private static void OnGameJoinAllianceRequestMessageReceived(GameJoinAllianceRequestMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar document)) { if (document.LogicClientAvatar.IsInAlliance() || document.HasServerCommandOfType(LogicCommandType.JOIN_ALLIANCE)) { ServerRequestManager.SendResponse(new GameJoinAllianceResponseMessage { ErrorReason = GameJoinAllianceResponseMessage.Reason.ALREADY_IN_ALLIANCE }, message); return; } if (!document.LogicClientAvatar.HasAllianceCastle()) { ServerRequestManager.SendResponse(new GameJoinAllianceResponseMessage { ErrorReason = GameJoinAllianceResponseMessage.Reason.NO_CASTLE }, message); return; } if (document.PendingAllianceJoinResponse || message.AvatarStreamId != null && document.AvatarStreamList.IndexOf(message.AvatarStreamId) == -1) { ServerRequestManager.SendResponse(new GameJoinAllianceResponseMessage { ErrorReason = GameJoinAllianceResponseMessage.Reason.GENERIC }, message); return; } document.PendingAllianceJoinResponse = true; ServerRequestManager.Create(new AllianceJoinRequestMessage { AllianceId = message.AllianceId, Avatar = document.LogicClientAvatar, Created = message.Created, Invited = message.Invited }, ServerManager.GetDocumentSocket(11, message.AllianceId), 15).OnComplete = args => { document.PendingAllianceJoinResponse = false; if (args.ErrorCode == ServerRequestError.Success) { AllianceJoinResponseMessage allianceJoinResponseMessage = (AllianceJoinResponseMessage)args.ResponseMessage; if (allianceJoinResponseMessage.Success) { if (message.AvatarStreamId != null) { document.RemoveAvatarStreamEntry(message.AvatarStreamId); } LogicJoinAllianceCommand logicJoinAllianceCommand = new LogicJoinAllianceCommand(); logicJoinAllianceCommand.SetAllianceData(allianceJoinResponseMessage.AllianceId, allianceJoinResponseMessage.AllianceName, allianceJoinResponseMessage.AllianceBadgeId, allianceJoinResponseMessage.AllianceLevel, allianceJoinResponseMessage.Created); document.AddServerCommand(logicJoinAllianceCommand); ServerRequestManager.SendResponse(new GameJoinAllianceResponseMessage { Success = true }, message); } else { GameJoinAllianceResponseMessage gameJoinAllianceResponseMessage = new GameJoinAllianceResponseMessage(); switch (allianceJoinResponseMessage.ErrorReason) { case AllianceJoinResponseMessage.Reason.GENERIC: gameJoinAllianceResponseMessage.ErrorReason = GameJoinAllianceResponseMessage.Reason.GENERIC; break; case AllianceJoinResponseMessage.Reason.FULL: gameJoinAllianceResponseMessage.ErrorReason = GameJoinAllianceResponseMessage.Reason.FULL; break; case AllianceJoinResponseMessage.Reason.CLOSED: gameJoinAllianceResponseMessage.ErrorReason = GameJoinAllianceResponseMessage.Reason.CLOSED; break; case AllianceJoinResponseMessage.Reason.SCORE: gameJoinAllianceResponseMessage.ErrorReason = GameJoinAllianceResponseMessage.Reason.SCORE; break; case AllianceJoinResponseMessage.Reason.BANNED: gameJoinAllianceResponseMessage.ErrorReason = GameJoinAllianceResponseMessage.Reason.BANNED; break; } ServerRequestManager.SendResponse(gameJoinAllianceResponseMessage, message); } } else { ServerRequestManager.SendResponse(new GameJoinAllianceResponseMessage { ErrorReason = GameJoinAllianceResponseMessage.Reason.GENERIC }, message); } }; } }