Aura.Shared.Database.AbstractGuildManager.SynchronizeGuilds C# (CSharp) Méthode

SynchronizeGuilds() public méthode

Synchronizes loaded guilds with current information from the database.
public SynchronizeGuilds ( ) : void
Résultat void
		public void SynchronizeGuilds()
		{
			lock (_syncLock)
			{
				var dbGuilds = this.Database.GetGuilds();

				var addedGuilds = new List<Guild>();
				var removedGuilds = new List<Guild>();

				var addedMembers = new List<GuildMember>();
				var removedMembers = new List<GuildMember>();
				var acceptedMembers = new List<GuildMember>();
				var declinedMembers = new List<GuildMember>();
				var updatedMembers = new List<GuildMember>();

				// Check for new guilds
				foreach (var dbGuild in dbGuilds.Values.Where(a => !a.Disbanded))
				{
					if (!_guilds.ContainsKey(dbGuild.Id))
						addedGuilds.Add(dbGuild);
				}

				// Check for removed guilds and member changes
				foreach (var guild in _guilds.Values)
				{
					// Check for removed or disbanded guilds
					Guild dbGuild;
					if (!dbGuilds.TryGetValue(guild.Id, out dbGuild) || dbGuild.Disbanded == true)
					{
						removedGuilds.Add(guild);
						break;
					}

					// Update guild
					guild.LeaderName = dbGuild.LeaderName;
					guild.Title = dbGuild.Title;
					guild.IntroMessage = dbGuild.IntroMessage;
					guild.WelcomeMessage = dbGuild.WelcomeMessage;
					guild.LeavingMessage = dbGuild.LeavingMessage;
					guild.RejectionMessage = dbGuild.RejectionMessage;
					guild.Type = dbGuild.Type;
					guild.Visibility = dbGuild.Visibility;
					guild.Level = dbGuild.Level;
					guild.Options = dbGuild.Options;

					// Check members
					var members = guild.GetMembers();
					var dbMembers = dbGuild.GetMembers();

					// Check for new members
					foreach (var dbMember in dbMembers.Where(a => a.Rank < GuildMemberRank.Declined))
					{
						if (!members.Exists(a => a.CharacterId == dbMember.CharacterId))
							addedMembers.Add(dbMember);
					}

					// Check for removed and changed members
					foreach (var member in members)
					{
						// Check if the member was removed or set to declined.
						var dbMember = dbGuild.GetMember(member.CharacterId);
						if (dbMember == null || (member.Rank != GuildMemberRank.Applied && dbMember.Rank == GuildMemberRank.Declined))
						{
							removedMembers.Add(member);
						}
						// Check for accepted members
						else if (member.Rank == GuildMemberRank.Applied && dbMember.Rank <= GuildMemberRank.Member)
						{
							member.Rank = dbMember.Rank;
							acceptedMembers.Add(member);
						}
						// Check for declined members
						else if (member.Rank == GuildMemberRank.Applied && dbMember.Rank == GuildMemberRank.Declined)
						{
							member.Rank = dbMember.Rank;
							declinedMembers.Add(member);
						}
						// Check for rank changes
						else if (member.Rank != dbMember.Rank)
						{
							member.Rank = dbMember.Rank;
							updatedMembers.Add(member);
						}
					}
				}

				// Add guilds
				foreach (var guild in addedGuilds)
				{
					_guilds[guild.Id] = guild;
					this.OnSyncGuildAdded(guild);
				}

				// Remove guilds
				foreach (var guild in removedGuilds)
				{
					_guilds.Remove(guild.Id);
					this.OnSyncGuildRemoved(guild);
				}

				// Add members
				foreach (var member in addedMembers)
				{
					var guild = _guilds[member.GuildId];
					guild.AddMember(member);
					this.OnSyncGuildMemberAdded(guild, member);
				}

				// Remove members
				foreach (var member in removedMembers)
				{
					var guild = _guilds[member.GuildId];
					guild.RemoveMember(member);
					this.OnSyncGuildMemberRemoved(guild, member);
				}

				// Accept members
				foreach (var member in acceptedMembers)
				{
					var guild = _guilds[member.GuildId];
					this.OnSyncGuildMemberAccepted(guild, member);
				}

				// Decline members
				foreach (var member in declinedMembers)
				{
					var guild = _guilds[member.GuildId];
					this.OnSyncGuildMemberDeclined(guild, member);
				}

				// Update members
				foreach (var member in updatedMembers)
				{
					var guild = _guilds[member.GuildId];
					this.OnSyncGuildMemberUpdated(guild, member);
				}
			}
		}