public void RemoveOnlineMember(LogicLong avatarId, AllianceSession session)
 {
     if (this.m_onlineMembers.TryGetValue(avatarId, out AllianceSession currentSession) && currentSession.Id == session.Id &&
         this.m_onlineMembers.Remove(avatarId))
     {
         this.OnOnlineMemberChanged();
     }
 }
 public void AddOnlineMember(LogicLong avatarId, AllianceSession session)
 {
     if (!this.m_onlineMembers.TryAdd(avatarId, session))
     {
         this.m_onlineMembers[avatarId] = session;
     }
     this.OnOnlineMemberChanged();
 }
示例#3
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);
        }
示例#4
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);
            }
        }
 public LogicMessageManager(AllianceSession session)
 {
     this.m_session = session;
 }