Example #1
0
        private static void OnAllianceChallengeReportMessageReceived(AllianceChallengeReportMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance))
            {
                ChallengeStreamEntry streamEntry = (ChallengeStreamEntry)StreamManager.GetAllianceStream(message.StreamId);

                if (streamEntry != null)
                {
                    ChallengeReplayStreamEntry challengeReplayStreamEntry = new ChallengeReplayStreamEntry();

                    challengeReplayStreamEntry.SetSenderAvatarId(challengeReplayStreamEntry.GetSenderAvatarId());
                    challengeReplayStreamEntry.SetSenderHomeId(challengeReplayStreamEntry.GetSenderHomeId());
                    challengeReplayStreamEntry.SetSenderName(challengeReplayStreamEntry.GetSenderName());
                    challengeReplayStreamEntry.SetSenderLevel(challengeReplayStreamEntry.GetSenderLevel());
                    challengeReplayStreamEntry.SetSenderLeagueType(challengeReplayStreamEntry.GetSenderLeagueType());
                    challengeReplayStreamEntry.SetSenderRole(challengeReplayStreamEntry.GetSenderRole());

                    challengeReplayStreamEntry.SetBattleLogJSON(message.BattleLog);
                    challengeReplayStreamEntry.SetReplayMajorVersion(LogicVersion.MAJOR_VERSION);
                    challengeReplayStreamEntry.SetReplayBuildVersion(LogicVersion.BUILD_VERSION);
                    challengeReplayStreamEntry.SetReplayContentVersion(ResourceManager.GetContentVersion());
                    challengeReplayStreamEntry.SetReplayId(message.ReplayId);

                    StreamManager.Create(alliance.Id, challengeReplayStreamEntry);

                    alliance.RemoveStreamEntry(streamEntry.GetId());
                    alliance.AddStreamEntry(challengeReplayStreamEntry);
                }
                else
                {
                    Logging.Warning("StreamMessageManager.onAllianceChallengeReportMessageReceived: pStreamEntry has been deleted. Replay ignored.");
                }
            }
        }
Example #2
0
        private static void OnCreateAllianceRequestMessageReceived(CreateAllianceRequestMessage message)
        {
            CreateAllianceResponseMessage createAllianceResponseMessage = new CreateAllianceResponseMessage();

            string allianceName = message.AllianceName;

            if (allianceName == null || allianceName.Length < 2)
            {
                createAllianceResponseMessage.ErrorReason = CreateAllianceResponseMessage.Reason.NAME_TOO_SHORT;
                ServerRequestManager.SendResponse(createAllianceResponseMessage, message);
                return;
            }

            if (allianceName.Length > 15)
            {
                createAllianceResponseMessage.ErrorReason = CreateAllianceResponseMessage.Reason.NAME_TOO_LONG;
                ServerRequestManager.SendResponse(createAllianceResponseMessage, message);
                return;
            }

            Alliance alliance = AllianceManager.Create();

            alliance.Header.SetAllianceName(allianceName);
            alliance.SetAllianceSettings(message.AllianceDescription, message.AllianceType, message.AllianceBadgeId, message.RequiredScore, message.RequiredDuelScore, message.WarFrequency,
                                         message.OriginData, message.PublicWarLog, message.ArrangedWarEnabled);

            createAllianceResponseMessage.Success    = true;
            createAllianceResponseMessage.AllianceId = alliance.Id;

            AllianceManager.Save(alliance);
            ServerRequestManager.SendResponse(createAllianceResponseMessage, message);
        }
Example #3
0
        private static void OnAllianceCreateMailMessageReceived(AllianceCreateMailMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance) && alliance.Members.TryGetValue(message.MemberId, out AllianceMemberEntry senderMemberEntry))
            {
                AllianceMailAvatarStreamEntry allianceMailAvatarStreamEntry = new AllianceMailAvatarStreamEntry();

                allianceMailAvatarStreamEntry.SetSenderAvatarId(senderMemberEntry.GetAvatarId());
                allianceMailAvatarStreamEntry.SetSenderHomeId(senderMemberEntry.GetHomeId());
                allianceMailAvatarStreamEntry.SetSenderName(senderMemberEntry.GetName());
                allianceMailAvatarStreamEntry.SetSenderLevel(senderMemberEntry.GetExpLevel());
                allianceMailAvatarStreamEntry.SetSenderLeagueType(senderMemberEntry.GetLeagueType());

                allianceMailAvatarStreamEntry.SetMessage(message.Message);
                allianceMailAvatarStreamEntry.SetAllianceId(alliance.Id);
                allianceMailAvatarStreamEntry.SetAllianceName(alliance.Header.GetAllianceName());
                allianceMailAvatarStreamEntry.SetAllianceBadgeId(alliance.Header.GetAllianceBadgeId());

                foreach (AllianceMemberEntry memberEntry in alliance.Members.Values)
                {
                    ServerMessageManager.SendMessage(new CreateAvatarStreamMessage
                    {
                        AccountId = memberEntry.GetAvatarId(),
                        Entry     = allianceMailAvatarStreamEntry
                    }, 9);
                }
            }
        }
Example #4
0
        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 AskForAllianceDataMessage.MESSAGE_TYPE:
                    AskForAllianceDataMessage askForAllianceDataMessage = (AskForAllianceDataMessage)logicMessage;
                    LogicLong allianceId = askForAllianceDataMessage.RemoveAllianceId();

                    if (AllianceManager.TryGet(allianceId, out Alliance alliance))
                    {
                        ServerMessageManager.SendMessage(StreamMessageManager.CreateForwardLogicMessage(alliance.GetAllianceDataMessage(), message.SessionId),
                                                         ServerManager.GetProxySocket(message.SessionId));
                    }

                    break;
                }
            }
        }
        private void OnAvatarReceived(ServerRequestArgs args)
        {
            if (args.ErrorCode == ServerRequestError.Success && args.ResponseMessage.Success)
            {
                this.LogicClientAvatar = ((AvatarResponseMessage)args.ResponseMessage).LogicClientAvatar;

                if (AllianceManager.TryGet(this.LogicClientAvatar.GetAllianceId(), out Alliance avatarAlliance) && avatarAlliance.Members.ContainsKey(this.AccountId))
                {
                    this.Alliance = avatarAlliance;
                    this.Alliance.AddOnlineMember(this.AccountId, this);

                    this.SendPiranhaMessage(this.Alliance.GetAllianceFulEntryUpdateMessage(), 1);
                    this.SendPiranhaMessage(this.Alliance.GetAllianceStreamMessage(), 1);

                    AllianceMemberUtil.SetLogicClientAvatarToAllianceMemberEntry(this.LogicClientAvatar, this.Alliance.Members[this.AccountId], this.Alliance);
                    AllianceManager.Save(this.Alliance);
                }
                else
                {
                    this.SendMessage(new StopServerSessionMessage(), 1);

                    ServerMessageManager.SendMessage(new AllianceLeavedMessage
                    {
                        AccountId  = this.AccountId,
                        AllianceId = this.LogicClientAvatar.GetAllianceId()
                    }, 9);
                    AllianceSessionManager.Remove(this.Id);
                }
            }
            else
            {
                this.SendMessage(new StopServerSessionMessage(), 1);
                AllianceSessionManager.Remove(this.Id);
            }
        }
        private void OnChangeAllianceMemberRoleMessageReceived(ChangeAllianceMemberRoleMessage message)
        {
            if (this.m_session.Alliance != null)
            {
                LogicLong memberId = message.RemoveMemberId();

                if (!this.m_session.Alliance.Members.TryGetValue(memberId, out AllianceMemberEntry memberEntry))
                {
                    return;
                }

                AllianceMemberEntry eventMemberEntry = this.m_session.Alliance.Members[this.m_session.AccountId];

                if (message.GetMemberRole() == LogicAvatarAllianceRole.MEMBER ||
                    message.GetMemberRole() == LogicAvatarAllianceRole.LEADER ||
                    message.GetMemberRole() == LogicAvatarAllianceRole.ELDER ||
                    message.GetMemberRole() == LogicAvatarAllianceRole.CO_LEADER)
                {
                    if (memberEntry.HasLowerRoleThan(eventMemberEntry.GetAllianceRole()) &&
                        !eventMemberEntry.HasLowerRoleThan(message.GetMemberRole()))
                    {
                        if (message.GetMemberRole() == LogicAvatarAllianceRole.LEADER)
                        {
                            this.m_session.Alliance.ChangeMemberRole(eventMemberEntry, LogicAvatarAllianceRole.CO_LEADER, eventMemberEntry.GetAvatarId(), eventMemberEntry.GetName());
                        }
                        this.m_session.Alliance.ChangeMemberRole(memberEntry, message.GetMemberRole(), memberEntry.GetAvatarId(), memberEntry.GetName());

                        AllianceManager.Save(this.m_session.Alliance);
                    }
                }
            }
        }
Example #7
0
        private static void OnAllianceRequestAllianceUnitsMessageReceived(AllianceRequestAllianceUnitsMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance) && alliance.Members.TryGetValue(message.MemberId, out AllianceMemberEntry memberEntry))
            {
                for (int i = 0; i < alliance.StreamEntryList.Size(); i++)
                {
                    StreamEntry streamEntry = StreamManager.GetAllianceStream(alliance.StreamEntryList[i]);

                    if (streamEntry != null && streamEntry.GetStreamEntryType() == StreamEntryType.DONATE && streamEntry.GetSenderAvatarId().Equals(memberEntry.GetAvatarId()))
                    {
                        alliance.RemoveStreamEntry(streamEntry.GetId());
                    }
                }

                DonateStreamEntry donateStreamEntry = new DonateStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(donateStreamEntry, memberEntry);

                string donateMessage = message.Message;

                if (donateMessage.Length > 128)
                {
                    donateMessage = donateMessage.Substring(0, 128);
                }

                donateStreamEntry.SetMessage(donateMessage);
                donateStreamEntry.SetCasteLevel(message.CastleUpgradeLevel, message.CastleUsedCapacity, message.CastleSpellUsedCapacity, message.CastleTotalCapacity, message.CastleSpellTotalCapacity);

                StreamManager.Create(alliance.Id, donateStreamEntry);

                alliance.AddStreamEntry(donateStreamEntry);

                AllianceManager.Save(alliance);
            }
        }
        public void OnChatToAllianceStreamMessageReceived(ChatToAllianceStreamMessage message)
        {
            if (!this.CanSendGlobalChatMessage())
            {
                return;
            }

            if (this.m_session.Alliance != null)
            {
                string chatMessage = message.RemoveMessage();

                if (string.IsNullOrEmpty(chatMessage))
                {
                    return;
                }
                if (chatMessage.Length > 128)
                {
                    chatMessage = chatMessage.Substring(0, 128);
                }

                AllianceMemberEntry memberEntry     = this.m_session.Alliance.Members[this.m_session.AccountId];
                ChatStreamEntry     chatStreamEntry = new ChatStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(chatStreamEntry, memberEntry);

                chatStreamEntry.SetMessage(WordCensorUtil.FilterMessage(chatMessage));

                StreamManager.Create(this.m_session.Alliance.Id, chatStreamEntry);
                this.m_session.Alliance.AddStreamEntry(chatStreamEntry);
                AllianceManager.Save(this.m_session.Alliance);
            }
        }
Example #9
0
        public static void Init()
        {
            ServerStream.AllianceDatabase = new CouchbaseDatabase("magic-alliances", "data");
            ServerStream.StreamDatabase   = new CouchbaseDatabase("magic-streams", "stream");

            AllianceManager.Init();
            StreamManager.Init();
            AllianceSessionManager.Init();
            WordCensorUtil.Init();
        }
Example #10
0
        private static void OnLeaveAllianceMemberMessageReceived(LeaveAllianceMemberMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance) && alliance.Members.TryGetValue(message.MemberId, out AllianceMemberEntry memberEntry))
            {
                if (memberEntry.GetAllianceRole() == LogicAvatarAllianceRole.LEADER)
                {
                    AllianceMemberEntry     higherMemberEntry = null;
                    LogicAvatarAllianceRole higherMemberRole  = 0;

                    foreach (AllianceMemberEntry member in alliance.Members.Values)
                    {
                        if (member != memberEntry && (higherMemberEntry == null || !member.HasLowerRoleThan(higherMemberRole)))
                        {
                            higherMemberEntry = member;
                            higherMemberRole  = member.GetAllianceRole();
                        }
                    }

                    if (higherMemberEntry != null)
                    {
                        alliance.ChangeMemberRole(higherMemberEntry, LogicAvatarAllianceRole.LEADER, memberEntry.GetAvatarId(), memberEntry.GetName());
                    }
                }

                alliance.RemoveMember(message.MemberId);

                AllianceSession session = alliance.GetCurrentOnlineMemberSession(message.AccountId);

                if (session != null)
                {
                    AllianceSessionManager.Remove(session.Id);
                }

                AllianceEventStreamEntry allianceEventStreamEntry = new AllianceEventStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(allianceEventStreamEntry, memberEntry);

                allianceEventStreamEntry.SetEventType(AllianceEventStreamEntryType.LEFT);
                allianceEventStreamEntry.SetEventAvatarId(memberEntry.GetAvatarId());
                allianceEventStreamEntry.SetEventAvatarName(memberEntry.GetName());

                StreamManager.Create(alliance.Id, allianceEventStreamEntry);

                alliance.AddStreamEntry(allianceEventStreamEntry);

                AllianceManager.Save(alliance);
            }

            ServerMessageManager.SendMessage(new AllianceLeavedMessage
            {
                AccountId  = message.MemberId,
                AllianceId = message.AccountId
            }, 9);
        }
Example #11
0
        private static void OnAllianceChallengeSpectatorCountMessageReceived(AllianceChallengeSpectatorCountMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance))
            {
                ChallengeStreamEntry streamEntry = (ChallengeStreamEntry)StreamManager.GetAllianceStream(message.StreamId);

                if (streamEntry != null && streamEntry.GetSpectatorCount() != message.Count)
                {
                    streamEntry.SetSpectatorCount(message.Count);
                    alliance.UpdateStreamEntry(streamEntry);
                }
            }
        }
        private void OnLeaveAllianceMessageReceived(LeaveAllianceMessage message)
        {
            if (this.m_session.Alliance != null)
            {
                Alliance            alliance    = this.m_session.Alliance;
                AllianceMemberEntry memberEntry = alliance.Members[this.m_session.AccountId];

                if (memberEntry.GetAllianceRole() == LogicAvatarAllianceRole.LEADER)
                {
                    AllianceMemberEntry     higherMemberEntry = null;
                    LogicAvatarAllianceRole higherMemberRole  = 0;

                    foreach (AllianceMemberEntry member in alliance.Members.Values)
                    {
                        if (member != memberEntry && (higherMemberEntry == null || !member.HasLowerRoleThan(higherMemberRole)))
                        {
                            higherMemberEntry = member;
                            higherMemberRole  = member.GetAllianceRole();
                        }
                    }

                    if (higherMemberEntry != null)
                    {
                        alliance.ChangeMemberRole(higherMemberEntry, LogicAvatarAllianceRole.LEADER, memberEntry.GetAvatarId(), memberEntry.GetName());
                    }
                }

                AllianceEventStreamEntry allianceEventStreamEntry = new AllianceEventStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(allianceEventStreamEntry, memberEntry);

                allianceEventStreamEntry.SetEventType(AllianceEventStreamEntryType.LEFT);
                allianceEventStreamEntry.SetEventAvatarId(memberEntry.GetAvatarId());
                allianceEventStreamEntry.SetEventAvatarName(memberEntry.GetName());

                StreamManager.Create(alliance.Id, allianceEventStreamEntry);

                alliance.AddStreamEntry(allianceEventStreamEntry);
                alliance.RemoveMember(this.m_session.AccountId);

                ServerMessageManager.SendMessage(new AllianceLeavedMessage
                {
                    AccountId  = this.m_session.AccountId,
                    AllianceId = alliance.Id
                }, 9);

                AllianceManager.Save(alliance);
            }
        }
Example #13
0
        private static void OnAllianceShareReplayMessageReceivedReceived(AllianceShareReplayMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance) && alliance.Members.TryGetValue(message.MemberId, out AllianceMemberEntry memberEntry))
            {
                ServerRequestManager.Create(new LoadAvatarStreamRequestMessage
                {
                    Id = message.ReplayId
                }, ServerManager.GetDocumentSocket(11, message.ReplayId)).OnComplete = args =>
                {
                    if (args.ErrorCode == ServerRequestError.Success && args.ResponseMessage.Success)
                    {
                        LoadAvatarStreamResponseMessage responseMessage = (LoadAvatarStreamResponseMessage)args.ResponseMessage;

                        if (responseMessage.Entry.GetAvatarStreamEntryType() == AvatarStreamEntryType.ATTACKER_BATTLE_REPORT ||
                            responseMessage.Entry.GetAvatarStreamEntryType() == AvatarStreamEntryType.DEFENDER_BATTLE_REPORT)
                        {
                            BattleReportStreamEntry battleReportStreamEntry = (BattleReportStreamEntry)responseMessage.Entry;
                            ReplayStreamEntry       replayStreamEntry       = new ReplayStreamEntry();
                            AllianceStreamEntryUtil.SetSenderInfo(replayStreamEntry, memberEntry);

                            replayStreamEntry.SetAttack(responseMessage.Entry.GetAvatarStreamEntryType() == AvatarStreamEntryType.ATTACKER_BATTLE_REPORT);
                            replayStreamEntry.SetBattleLogJSON(battleReportStreamEntry.GetBattleLogJSON());
                            replayStreamEntry.SetMajorVersion(battleReportStreamEntry.GetMajorVersion());
                            replayStreamEntry.SetBuildVersion(battleReportStreamEntry.GetBuildVersion());
                            replayStreamEntry.SetContentVersion(battleReportStreamEntry.GetContentVersion());
                            replayStreamEntry.SetReplayId(battleReportStreamEntry.GetReplayId());
                            replayStreamEntry.SetReplayShardId(battleReportStreamEntry.GetReplayShardId());
                            replayStreamEntry.SetOpponentName(battleReportStreamEntry.GetSenderName());

                            string replayMessage = message.Message;

                            if (replayMessage != null && replayMessage.Length > 128)
                            {
                                replayMessage = replayMessage.Substring(0, 128);
                            }

                            replayStreamEntry.SetMessage(replayMessage);

                            StreamManager.Create(alliance.Id, replayStreamEntry);

                            alliance.AddStreamEntry(replayStreamEntry);

                            AllianceManager.Save(alliance);
                        }
                    }
                };
            }
        }
Example #14
0
        private static void OnAllianceChallengeRequestMessageReceived(AllianceChallengeRequestMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance) && alliance.Members.TryGetValue(message.MemberId, out AllianceMemberEntry memberEntry))
            {
                for (int i = 0; i < alliance.StreamEntryList.Size(); i++)
                {
                    StreamEntry streamEntry = StreamManager.GetAllianceStream(alliance.StreamEntryList[i]);

                    if (streamEntry != null && streamEntry.GetStreamEntryType() == StreamEntryType.CHALLENGE && streamEntry.GetSenderAvatarId().Equals(memberEntry.GetAvatarId()))
                    {
                        ChallengeStreamEntry prevChallengeStreamEntry = (ChallengeStreamEntry)streamEntry;

                        if (prevChallengeStreamEntry.IsStarted())
                        {
                            return;
                        }

                        alliance.RemoveStreamEntry(streamEntry.GetId());
                    }
                }

                ChallengeStreamEntry challengeStreamEntry = new ChallengeStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(challengeStreamEntry, memberEntry);

                string challengeMessage = message.Message;

                if (challengeMessage.Length > 128)
                {
                    challengeMessage = challengeMessage.Substring(0, 128);
                }

                challengeStreamEntry.SetMessage(challengeMessage);
                challengeStreamEntry.SetSnapshotHomeJSON(message.HomeJSON);
                challengeStreamEntry.SetWarLayout(message.WarLayout);

                StreamManager.Create(alliance.Id, challengeStreamEntry);

                alliance.AddStreamEntry(challengeStreamEntry);

                AllianceManager.Save(alliance);
            }
        }
Example #15
0
        private static void OnAllianceUnitDonateResponseMessageReceived(AllianceUnitDonateResponseMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance))
            {
                StreamEntry streamEntry = StreamManager.GetAllianceStream(message.StreamId);

                if (streamEntry != null)
                {
                    DonateStreamEntry donateStreamEntry = (DonateStreamEntry)streamEntry;

                    if (message.Success)
                    {
                        LogicAllianceLevelData           allianceLevel = LogicDataTables.GetAllianceLevel(alliance.Header.GetAllianceLevel());
                        LogicAllianceUnitReceivedCommand logicAllianceUnitReceivedCommand = new LogicAllianceUnitReceivedCommand();
                        logicAllianceUnitReceivedCommand.SetData(message.MemberName, message.Data,
                                                                 LogicMath.Clamp(message.UpgradeLevel + allianceLevel.GetTroopDonationUpgrade(), 0, message.Data.GetUpgradeLevelCount() - 1));
                        ServerMessageManager.SendMessage(new GameAllowServerCommandMessage
                        {
                            AccountId     = donateStreamEntry.GetSenderAvatarId(),
                            ServerCommand = logicAllianceUnitReceivedCommand
                        }, 9);
                    }
                    else
                    {
                        donateStreamEntry.RemoveDonation(message.MemberId, message.Data, message.UpgradeLevel);
                        alliance.UpdateStreamEntry(donateStreamEntry);
                    }

                    donateStreamEntry.SetDonationPendingRequestCount(donateStreamEntry.GetDonationPendingRequestCount() - 1);

                    if (donateStreamEntry.IsCastleFull() && donateStreamEntry.GetDonationPendingRequestCount() <= 0)
                    {
                        alliance.RemoveStreamEntry(donateStreamEntry.GetId());
                        AllianceManager.Save(alliance);
                    }
                    else
                    {
                        StreamManager.Save(donateStreamEntry);
                    }
                }
            }
        }
        private void OnChangeAllianceSettingsMessageReceived(ChangeAllianceSettingsMessage message)
        {
            if (this.m_session.Alliance != null)
            {
                this.m_session.Alliance.SetAllianceSettings(message.GetAllianceDescription(), (AllianceType)message.GetAllianceType(), message.GetAllianceBadgeId(), message.GetRequiredScore(),
                                                            message.GetRequiredDuelScore(), message.GetWarFrequency(), message.GetOriginData(), message.IsPublicWarLog(), message.IsAmicalWarEnabled());

                AllianceMemberEntry      memberEntry = this.m_session.Alliance.Members[this.m_session.AccountId];
                AllianceEventStreamEntry allianceEventStreamEntry = new AllianceEventStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(allianceEventStreamEntry, memberEntry);

                allianceEventStreamEntry.SetEventType(AllianceEventStreamEntryType.CHANGED_SETTINGS);
                allianceEventStreamEntry.SetEventAvatarId(memberEntry.GetAvatarId());
                allianceEventStreamEntry.SetEventAvatarName(memberEntry.GetName());

                StreamManager.Create(this.m_session.Alliance.Id, allianceEventStreamEntry);

                this.m_session.Alliance.AddStreamEntry(allianceEventStreamEntry);

                AllianceManager.Save(this.m_session.Alliance);
            }
        }
Example #17
0
        private static void OnAllianceUpdateAvatarDataMessageReceived(AllianceAvatarChangesMessage message)
        {
            if (AllianceManager.TryGet(message.AccountId, out Alliance alliance) && alliance.Members.TryGetValue(message.MemberId, out AllianceMemberEntry memberEntry))
            {
                bool updateScoring = false;

                for (int i = 0; i < message.AvatarChanges.Size(); i++)
                {
                    AvatarChange avatarChange = message.AvatarChanges[i];

                    avatarChange.ApplyAvatarChange(memberEntry);

                    if (avatarChange.GetAvatarChangeType() == AvatarChangeType.SCORE || avatarChange.GetAvatarChangeType() == AvatarChangeType.DUEL_SCORE)
                    {
                        updateScoring = true;
                    }
                }

                AllianceSession currentSession = alliance.GetCurrentOnlineMemberSession(message.MemberId);

                if (currentSession != null && currentSession.LogicClientAvatar != null)
                {
                    for (int i = 0; i < message.AvatarChanges.Size(); i++)
                    {
                        message.AvatarChanges[i].ApplyAvatarChange(currentSession.LogicClientAvatar);
                    }
                }

                if (updateScoring)
                {
                    alliance.UpdateScoring();
                }

                AllianceManager.Save(alliance);
            }
        }
        private void OnRespondToAllianceJoinRequestMessageReceived(RespondToAllianceJoinRequestMessage message)
        {
            if (this.m_session.Alliance != null)
            {
                Alliance            alliance    = this.m_session.Alliance;
                AllianceMemberEntry memberEntry = alliance.Members[this.m_session.AccountId];

                if (memberEntry.GetAllianceRole() == LogicAvatarAllianceRole.MEMBER)
                {
                    AllianceInvitationSendFailedMessage allianceInvitationSendFailedMessage = new AllianceInvitationSendFailedMessage();
                    allianceInvitationSendFailedMessage.SetReason(AllianceInvitationSendFailedMessage.Reason.NO_RIGHTS);
                    this.m_session.SendPiranhaMessage(allianceInvitationSendFailedMessage, 1);
                    return;
                }

                LogicLong streamId = message.GetStreamEntryId();

                if (alliance.StreamEntryList.IndexOf(streamId) != -1)
                {
                    StreamEntry streamEntry = StreamManager.GetAllianceStream(message.GetStreamEntryId());

                    if (streamEntry.GetStreamEntryType() == StreamEntryType.JOIN_REQUEST)
                    {
                        JoinRequestAllianceStreamEntry joinRequestAllianceStreamEntry = (JoinRequestAllianceStreamEntry)streamEntry;

                        if (joinRequestAllianceStreamEntry.GetState() == 1)
                        {
                            if (message.IsAccepted())
                            {
                                ServerRequestManager.Create(new GameJoinAllianceRequestMessage
                                {
                                    AccountId  = joinRequestAllianceStreamEntry.GetSenderAvatarId(),
                                    AllianceId = alliance.Id,
                                    Invited    = true
                                }, ServerManager.GetDocumentSocket(9, joinRequestAllianceStreamEntry.GetSenderAvatarId())).OnComplete = args =>
                                {
                                    if (this.m_session.IsDestructed())
                                    {
                                        return;
                                    }

                                    if (args.ErrorCode == ServerRequestError.Success)
                                    {
                                        if (args.ResponseMessage.Success)
                                        {
                                            joinRequestAllianceStreamEntry.SetState(2);
                                            joinRequestAllianceStreamEntry.SetResponderName(memberEntry.GetName());
                                            alliance.UpdateStreamEntry(joinRequestAllianceStreamEntry);

                                            StreamManager.Save(joinRequestAllianceStreamEntry);
                                        }
                                        else
                                        {
                                            GameJoinAllianceResponseMessage     gameJoinAllianceResponseMessage     = (GameJoinAllianceResponseMessage)args.ResponseMessage;
                                            AllianceInvitationSendFailedMessage allianceInvitationSendFailedMessage = new AllianceInvitationSendFailedMessage();

                                            switch (gameJoinAllianceResponseMessage.ErrorReason)
                                            {
                                            case GameJoinAllianceResponseMessage.Reason.NO_CASTLE:
                                                allianceInvitationSendFailedMessage.SetReason(AllianceInvitationSendFailedMessage.Reason.NO_CASTLE);

                                                if (joinRequestAllianceStreamEntry.GetState() == 1)
                                                {
                                                    alliance.RemoveStreamEntry(joinRequestAllianceStreamEntry.GetId());
                                                    AllianceManager.Save(alliance);
                                                }

                                                break;

                                            case GameJoinAllianceResponseMessage.Reason.ALREADY_IN_ALLIANCE:
                                                allianceInvitationSendFailedMessage.SetReason(AllianceInvitationSendFailedMessage.Reason.ALREADY_IN_ALLIANCE);

                                                if (joinRequestAllianceStreamEntry.GetState() == 1)
                                                {
                                                    alliance.RemoveStreamEntry(joinRequestAllianceStreamEntry.GetId());
                                                    AllianceManager.Save(alliance);
                                                }

                                                break;

                                            default:
                                                allianceInvitationSendFailedMessage.SetReason(AllianceInvitationSendFailedMessage.Reason.GENERIC);
                                                break;
                                            }

                                            this.m_session.SendPiranhaMessage(allianceInvitationSendFailedMessage, 1);
                                        }
                                    }
                                    else
                                    {
                                        AllianceInvitationSendFailedMessage allianceInvitationSendFailedMessage = new AllianceInvitationSendFailedMessage();
                                        allianceInvitationSendFailedMessage.SetReason(AllianceInvitationSendFailedMessage.Reason.GENERIC);
                                        this.m_session.SendPiranhaMessage(allianceInvitationSendFailedMessage, 1);
                                    }
                                };
                            }
                            else
                            {
                                joinRequestAllianceStreamEntry.SetState(0);
                                joinRequestAllianceStreamEntry.SetResponderName(memberEntry.GetName());
                                alliance.UpdateStreamEntry(joinRequestAllianceStreamEntry);

                                StreamManager.Save(joinRequestAllianceStreamEntry);

                                JoinAllianceResponseAvatarStreamEntry joinAllianceResponseAvatarStreamEntry = new JoinAllianceResponseAvatarStreamEntry();

                                joinAllianceResponseAvatarStreamEntry.SetSenderAvatarId(memberEntry.GetAvatarId());
                                joinAllianceResponseAvatarStreamEntry.SetSenderHomeId(memberEntry.GetHomeId());
                                joinAllianceResponseAvatarStreamEntry.SetSenderName(memberEntry.GetName());
                                joinAllianceResponseAvatarStreamEntry.SetSenderLevel(memberEntry.GetExpLevel());
                                joinAllianceResponseAvatarStreamEntry.SetSenderLeagueType(memberEntry.GetLeagueType());

                                joinAllianceResponseAvatarStreamEntry.SetAllianceId(alliance.Id);
                                joinAllianceResponseAvatarStreamEntry.SetAllianceName(alliance.Header.GetAllianceName());
                                joinAllianceResponseAvatarStreamEntry.SetAllianceBadgeId(alliance.Header.GetAllianceBadgeId());

                                ServerMessageManager.SendMessage(new CreateAvatarStreamMessage
                                {
                                    AccountId = joinRequestAllianceStreamEntry.GetSenderAvatarId(),
                                    Entry     = joinAllianceResponseAvatarStreamEntry
                                }, 9);
                            }
                        }
                    }
                }
            }
        }
Example #19
0
        private static void ServerMessageReceived(PSMessage psMessage, bool isPusher)
        {
            if (!isPusher)
            {
                return;
            }
            if (psMessage.ActivityType == ActivityType.MembershipChanged && isPusher)
            {
                if (SingletonManager <UserManager> .Instance.user.Id == psMessage.ToUserId)
                {
                    Debug.LogWarning((object)"Membership Changed", (Object)null);
                    SingletonManager <UserManager> .Instance.user.AllianceMembership = AllianceManager.MembershipStringToEnum(psMessage.ActivityArgument);
                }
                if (SingletonManager <UserManager> .Instance.user.AllianceMembership == AllianceMembership.None)
                {
                    Debug.LogWarning((object)"Membership Reset", (Object)null);
                    SingletonManager <AllianceManager> .Instance.ResetCurrentAlliance();
                }
            }
            if (psMessage.ActivityType == ActivityType.DeviceLogin && !psMessage.ActivityArgument.Equals(UserManager.Md5Sum(SingletonManager <UserManager> .Instance.deviceKey)))
            {
                AlertController.ShowDisconnectPanel(SingletonManager <LocalizationManager> .Instance.GetLocalizedText("Disconnected"), psMessage.MessageString, SingletonManager <LocalizationManager> .Instance.GetLocalizedText("Reload"));
            }
            if (psMessage.ActivityType != ActivityType.ModelUpdate || string.IsNullOrEmpty(psMessage.ActivityArgument))
            {
                return;
            }
            PSMainRoom room = SingletonManager <RoomManager> .Instance.ParseRoom <PSMainRoom>(Regex.Unescape(psMessage.ActivityArgument));

            SingletonManager <ShipManager> .Instance.PlayerShip.GetRoomByRoomId(room.RoomId).ConstructionStartDate = room.ConstructionStartDate;
        }
Example #20
0
        private static void OnRequestAllianceJoinRequestMessageReceived(RequestAllianceJoinRequestMessage message)
        {
            if (AllianceManager.TryGet(message.AllianceId, out Alliance alliance))
            {
                LogicLong avatarId = message.Avatar.GetId();

                if (alliance.Members.ContainsKey(avatarId) || alliance.Header.GetAllianceType() == AllianceType.OPEN)
                {
                    ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                    {
                        ErrorReason = RequestAllianceJoinResponseMessage.Reason.GENERIC
                    }, message);
                    return;
                }

                if (alliance.Header.GetAllianceType() == AllianceType.CLOSED)
                {
                    ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                    {
                        ErrorReason = RequestAllianceJoinResponseMessage.Reason.CLOSED
                    }, message);
                    return;
                }

                if (alliance.IsBanned(avatarId))
                {
                    ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                    {
                        ErrorReason = RequestAllianceJoinResponseMessage.Reason.BANNED
                    }, message);
                    return;
                }

                int pendingRequestCount = 0;

                for (int i = 0; i < alliance.StreamEntryList.Size(); i++)
                {
                    StreamEntry streamEntry = StreamManager.GetAllianceStream(alliance.StreamEntryList[i]);

                    if (streamEntry != null && streamEntry.GetStreamEntryType() == StreamEntryType.JOIN_REQUEST)
                    {
                        JoinRequestAllianceStreamEntry prevJoinRequestStreamEntry = (JoinRequestAllianceStreamEntry)streamEntry;

                        if (prevJoinRequestStreamEntry.GetState() == 1)
                        {
                            pendingRequestCount += 1;

                            if (prevJoinRequestStreamEntry.GetSenderAvatarId().Equals(avatarId))
                            {
                                ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                                {
                                    ErrorReason = RequestAllianceJoinResponseMessage.Reason.ALREADY_SENT
                                }, message);
                                return;
                            }
                        }
                        else if (prevJoinRequestStreamEntry.GetState() == 0 && prevJoinRequestStreamEntry.GetAgeSeconds() < 3600)
                        {
                            ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                            {
                                ErrorReason = RequestAllianceJoinResponseMessage.Reason.ALREADY_SENT
                            }, message);
                            return;
                        }
                    }
                }

                if (pendingRequestCount >= 10)
                {
                    ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                    {
                        ErrorReason = RequestAllianceJoinResponseMessage.Reason.TOO_MANY_PENDING_REQUESTS
                    }, message);
                    return;
                }

                if (message.Avatar.GetScore() < alliance.Header.GetRequiredScore())
                {
                    ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                    {
                        ErrorReason = RequestAllianceJoinResponseMessage.Reason.NO_SCORE
                    }, message);
                    return;
                }

                if (message.Avatar.GetDuelScore() < alliance.Header.GetRequiredDuelScore())
                {
                    ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                    {
                        ErrorReason = RequestAllianceJoinResponseMessage.Reason.NO_DUEL_SCORE
                    }, message);
                    return;
                }

                JoinRequestAllianceStreamEntry joinRequestAllianceStreamEntry = new JoinRequestAllianceStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(joinRequestAllianceStreamEntry, message.Avatar);

                string requestMessage = message.Message;

                if (requestMessage != null && requestMessage.Length >= 128)
                {
                    requestMessage = requestMessage.Substring(0, 128);
                }

                joinRequestAllianceStreamEntry.SetMessage(requestMessage);

                StreamManager.Create(alliance.Id, joinRequestAllianceStreamEntry);

                alliance.AddStreamEntry(joinRequestAllianceStreamEntry);

                AllianceManager.Save(alliance);
                ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                {
                    Success = true
                }, message);
            }
            else
            {
                ServerRequestManager.SendResponse(new RequestAllianceJoinResponseMessage
                {
                    ErrorReason = RequestAllianceJoinResponseMessage.Reason.GENERIC
                }, message);
            }
        }
Example #21
0
        private static void OnAllianceJoinRequestMessageReceived(AllianceJoinRequestMessage message)
        {
            AllianceJoinResponseMessage joinAllianceResponseMessage = new AllianceJoinResponseMessage();

            if (!AllianceManager.TryGet(message.AllianceId, out Alliance alliance))
            {
                joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.GENERIC;
                ServerRequestManager.SendResponse(joinAllianceResponseMessage, message);
                return;
            }

            if (!message.Created)
            {
                if (alliance.IsFull())
                {
                    joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.FULL;
                    ServerRequestManager.SendResponse(joinAllianceResponseMessage, message);
                    return;
                }

                if (!message.Invited)
                {
                    if (alliance.Header.GetAllianceType() != AllianceType.OPEN || alliance.Header.GetNumberOfMembers() == 0)
                    {
                        joinAllianceResponseMessage.ErrorReason =
                            alliance.Header.GetAllianceType() == AllianceType.CLOSED ? AllianceJoinResponseMessage.Reason.CLOSED : AllianceJoinResponseMessage.Reason.GENERIC;
                        ServerRequestManager.SendResponse(joinAllianceResponseMessage, message);
                        return;
                    }

                    if (alliance.IsBanned(message.Avatar.GetId()))
                    {
                        joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.BANNED;
                        ServerRequestManager.SendResponse(joinAllianceResponseMessage, message);
                        return;
                    }

                    if (alliance.Header.GetRequiredScore() > message.Avatar.GetScore() || alliance.Header.GetRequiredDuelScore() > message.Avatar.GetDuelScore())
                    {
                        joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.SCORE;
                        ServerRequestManager.SendResponse(joinAllianceResponseMessage, message);
                        return;
                    }
                }
            }
            else
            {
                if (alliance.Header.GetNumberOfMembers() != 0)
                {
                    throw new Exception("StreamMessageManager.joinAllianceRequestMessageReceived: A new alliance must be empty!");
                }
            }

            AllianceMemberEntry memberEntry = AllianceMemberUtil.GetAllianceMemberEntryFromAvatar(message.Avatar);

            memberEntry.SetAllianceRole(message.Created ? LogicAvatarAllianceRole.LEADER : LogicAvatarAllianceRole.MEMBER);
            alliance.AddMember(memberEntry);

            if (!message.Created)
            {
                AllianceEventStreamEntry allianceEventStreamEntry = new AllianceEventStreamEntry();
                AllianceStreamEntryUtil.SetSenderInfo(allianceEventStreamEntry, memberEntry);

                allianceEventStreamEntry.SetEventType(AllianceEventStreamEntryType.JOINED);
                allianceEventStreamEntry.SetEventAvatarId(memberEntry.GetAvatarId());
                allianceEventStreamEntry.SetEventAvatarName(memberEntry.GetName());

                StreamManager.Create(alliance.Id, allianceEventStreamEntry);

                alliance.AddStreamEntry(allianceEventStreamEntry);
            }

            joinAllianceResponseMessage.Success         = true;
            joinAllianceResponseMessage.AllianceId      = alliance.Id;
            joinAllianceResponseMessage.AllianceName    = alliance.Header.GetAllianceName();
            joinAllianceResponseMessage.AllianceBadgeId = alliance.Header.GetAllianceBadgeId();
            joinAllianceResponseMessage.AllianceLevel   = alliance.Header.GetAllianceLevel();
            joinAllianceResponseMessage.Created         = message.Created;

            AllianceManager.Save(alliance);
            ServerRequestManager.SendResponse(joinAllianceResponseMessage, message);
        }