From bd9fc36720a281b454562507f7c6b6813c9491c7 Mon Sep 17 00:00:00 2001 From: RogueException Date: Mon, 15 Feb 2016 19:27:25 -0400 Subject: [PATCH] Temp. moved built-ing event logging to Debug temporarily, improved login speed. --- src/Discord.Net/DiscordClient.cs | 119 ++++++++++++++---------------- src/Discord.Net/DiscordConfig.cs | 6 +- src/Discord.Net/Models/Channel.cs | 15 ++-- src/Discord.Net/Models/Server.cs | 12 +-- 4 files changed, 74 insertions(+), 78 deletions(-) diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 871838b38..a295cfc97 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -28,9 +28,9 @@ namespace Discord private readonly ManualResetEventSlim _connectedEvent; private readonly TaskManager _taskManager; private readonly ServiceCollection _services; - private readonly ConcurrentDictionary _servers; - private readonly ConcurrentDictionary _channels; - private readonly ConcurrentDictionary _privateChannels; //Key = RecipientId + private ConcurrentDictionary _servers; + private ConcurrentDictionary _channels; + private ConcurrentDictionary _privateChannels; //Key = RecipientId private Dictionary _regions; internal Logger Logger { get; } @@ -118,9 +118,10 @@ namespace Discord CancelToken = new CancellationToken(true); //Cache - _servers = new ConcurrentDictionary(); - _channels = new ConcurrentDictionary(); - _privateChannels = new ConcurrentDictionary(); + //ConcurrentLevel = 2 (only REST and WebSocket can add/remove) + _servers = new ConcurrentDictionary(2, 0); + _channels = new ConcurrentDictionary(2, 0); + _privateChannels = new ConcurrentDictionary(2, 0); //Serialization Serializer = new JsonSerializer(); @@ -237,8 +238,8 @@ namespace Discord } } - ClientAPI.Token = token; - var request = new LoginRequest() { Email = email, Password = password }; + ClientAPI.Token = token; + var request = new LoginRequest();// { Email = email, Password = password }; var response = await ClientAPI.Send(request).ConfigureAwait(false); token = response.Token; if (Config.CacheDir != null && token != oldToken && tokenPath != null) @@ -475,15 +476,26 @@ namespace Discord if (Config.LogLevel >= LogSeverity.Verbose) stopwatch = Stopwatch.StartNew(); var data = e.Payload.ToObject(Serializer); + + int channelCount = 0; + for (int i = 0; i < data.Guilds.Length; i++) + channelCount += data.Guilds[i].Channels.Length; + + //ConcurrencyLevel = 2 (only REST and WebSocket can add/remove) + _servers = new ConcurrentDictionary(2, (int)(data.Guilds.Length * 1.05)); + _channels = new ConcurrentDictionary(2, (int)(channelCount * 1.05)); + _privateChannels = new ConcurrentDictionary(2, (int)(data.PrivateChannels.Length * 1.05)); + List largeServers = new List(); + SessionId = data.SessionId; PrivateUser = new User(this, data.User.Id, null); PrivateUser.Update(data.User); CurrentUser = new Profile(this, data.User.Id); CurrentUser.Update(data.User); - List largeServers = new List(); - foreach (var model in data.Guilds) + for (int i = 0; i < data.Guilds.Length; i++) { + var model = data.Guilds[i]; if (model.Unavailable != true) { var server = AddServer(model.Id); @@ -492,13 +504,15 @@ namespace Discord largeServers.Add(server.Id); } } - foreach (var model in data.PrivateChannels) + for (int i = 0; i < data.PrivateChannels.Length; i++) { + var model = data.PrivateChannels[i]; var channel = AddPrivateChannel(model.Id, model.Recipient.Id); channel.Update(model); } if (largeServers.Count > 0) GatewaySocket.SendRequestMembers(largeServers, "", 0); + if (Config.LogLevel >= LogSeverity.Verbose) { stopwatch.Stop(); @@ -516,14 +530,11 @@ namespace Discord { var server = AddServer(data.Id); server.Update(data); - - if (Config.LogEvents) - { - if (data.Unavailable != false) - Logger.Info($"Server Created: {server.Name}"); - else - Logger.Info($"Server Available: {server.Name}"); - } + + if (data.Unavailable != false) + Logger.Debug($"GUILD_CREATE: {server.Path}"); + else + Logger.Debug($"GUILD_AVAILABLE: {server.Path}"); if (data.Unavailable != false) OnJoinedServer(server); @@ -539,8 +550,7 @@ namespace Discord { var before = Config.EnablePreUpdateEvents ? server.Clone() : null; server.Update(data); - if (Config.LogEvents) - Logger.Info($"Server Updated: {server.Name}"); + Logger.Debug($"GUILD_UPDATE: {server.Path}"); OnServerUpdated(before, server); } else @@ -553,13 +563,10 @@ namespace Discord Server server = RemoveServer(data.Id); if (server != null) { - if (Config.LogEvents) - { - if (data.Unavailable != true) - Logger.Info($"Server Destroyed: {server.Name}"); - else - Logger.Info($"Server Unavailable: {server.Name}"); - } + if (data.Unavailable != true) + Logger.Debug($"GUILD_DELETE: {server.Path}"); + else + Logger.Debug($"GUILD_UNAVAILABLE: {server.Path}"); OnServerUnavailable(server); if (data.Unavailable != true) @@ -589,8 +596,7 @@ namespace Discord if (channel != null) { channel.Update(data); - if (Config.LogEvents) - Logger.Info($"Channel Created: {channel.Server?.Name ?? "[Private]"}/{channel.Name}"); + Logger.Debug($"CHANNEL_CREATE: {channel.Path}"); OnChannelCreated(channel); } } @@ -603,8 +609,7 @@ namespace Discord { var before = Config.EnablePreUpdateEvents ? channel.Clone() : null; channel.Update(data); - if (Config.LogEvents) - Logger.Info($"Channel Updated: {channel.Server?.Name ?? "[Private]"}/{channel.Name}"); + Logger.Debug($"CHANNEL_UPDATE: {channel.Path}"); OnChannelUpdated(before, channel); } else @@ -617,8 +622,7 @@ namespace Discord var channel = RemoveChannel(data.Id); if (channel != null) { - if (Config.LogEvents) - Logger.Info($"Channel Destroyed: {channel.Server?.Name ?? "[Private]"}/{channel.Name}"); + Logger.Debug($"CHANNEL_DELETE: {channel.Path}"); OnChannelDestroyed(channel); } else @@ -636,8 +640,7 @@ namespace Discord var user = server.AddUser(data.User.Id); user.Update(data); user.UpdateActivity(); - if (Config.LogEvents) - Logger.Info($"User Joined: {server.Name}/{user.Name}"); + Logger.Debug($"GUILD_MEMBER_ADD: {user.Path}"); OnUserJoined(user); } else @@ -655,8 +658,7 @@ namespace Discord { var before = Config.EnablePreUpdateEvents ? user.Clone() : null; user.Update(data); - if (Config.LogEvents) - Logger.Info($"User Updated: {server.Name}/{user.Name}"); + Logger.Debug($"GUILD_MEMBER_UPDATE: {user.Path}"); OnUserUpdated(before, user); } else @@ -675,8 +677,7 @@ namespace Discord var user = server.RemoveUser(data.User.Id); if (user != null) { - if (Config.LogEvents) - Logger.Info($"User Left: {server.Name}/{user.Name}"); + Logger.Debug($"GUILD_MEMBER_REMOVE: {user.Path}"); OnUserLeft(user); } else @@ -698,6 +699,7 @@ namespace Discord user.Update(memberData); //OnUserAdded(user); } + Logger.Debug($"GUILD_MEMBERS_CHUNK: {data.Members.Length} users"); } else Logger.Warning("GUILD_MEMBERS_CHUNK referenced an unknown guild."); @@ -713,8 +715,7 @@ namespace Discord { var role = server.AddRole(data.Data.Id); role.Update(data.Data); - if (Config.LogEvents) - Logger.Info($"Role Created: {server.Name}/{role.Name}"); + Logger.Debug($"GUILD_ROLE_CREATE: {role.Path}"); OnRoleCreated(role); } else @@ -732,8 +733,7 @@ namespace Discord { var before = Config.EnablePreUpdateEvents ? role.Clone() : null; role.Update(data.Data); - if (Config.LogEvents) - Logger.Info($"Role Updated: {server.Name}/{role.Name}"); + Logger.Debug($"GUILD_ROLE_UPDATE: {role.Path}"); OnRoleUpdated(before, role); } else @@ -752,8 +752,7 @@ namespace Discord var role = server.RemoveRole(data.RoleId); if (role != null) { - if (Config.LogEvents) - Logger.Info($"Role Deleted: {server.Name}/{role.Name}"); + Logger.Debug($"GUILD_ROLE_DELETE: {role.Path}"); OnRoleDeleted(role); } else @@ -774,8 +773,7 @@ namespace Discord var user = server.GetUser(data.User.Id); if (user != null) { - if (Config.LogEvents) - Logger.Info($"User Banned: {server.Name}/{user.Name}"); + Logger.Debug($"GUILD_BAN_ADD: {user.Path}"); OnUserBanned(user); } else @@ -793,8 +791,7 @@ namespace Discord { var user = new User(this, data.User.Id, server); user.Update(data.User); - if (Config.LogEvents) - Logger.Info($"User Unbanned: {server.Name}/{user.Name}"); + Logger.Debug($"GUILD_BAN_REMOVE: {user.Path}"); OnUserUnbanned(user); } else @@ -838,9 +835,8 @@ namespace Discord msg.Update(data); user.UpdateActivity(); - - if (Config.LogEvents) - Logger.Verbose($"Message Received: {channel.Server?.Name ?? "[Private]"}/{channel.Name}"); + + Logger.Debug($"MESSAGE_CREATE: {channel.Path} ({user.Name ?? "Unknown"})"); OnMessageReceived(msg); } else @@ -859,8 +855,7 @@ namespace Discord var msg = channel.GetMessage(data.Id, data.Author?.Id); var before = Config.EnablePreUpdateEvents ? msg.Clone() : null; msg.Update(data); - if (Config.LogEvents) - Logger.Verbose($"Message Update: {channel.Server?.Name ?? "[Private]"}/{channel.Name}"); + Logger.Debug($"MESSAGE_UPDATE: {channel.Path} ({data.Author?.Username ?? "Unknown"})"); OnMessageUpdated(before, msg); } else @@ -874,8 +869,7 @@ namespace Discord if (channel != null) { var msg = channel.RemoveMessage(data.Id); - if (Config.LogEvents) - Logger.Verbose($"Message Deleted: {channel.Server?.Name ?? "[Private]"}/{channel.Name}"); + Logger.Debug($"MESSAGE_DELETE: {channel.Path} ({msg.User?.Name ?? "Unknown"})"); OnMessageDeleted(msg); } else @@ -908,9 +902,9 @@ namespace Discord if (user != null) { + Logger.Debug($"PRESENCE_UPDATE: {user.Path}"); var before = Config.EnablePreUpdateEvents ? user.Clone() : null; user.Update(data); - //Logger.Verbose($"Presence Updated: {server.Name}/{user.Name}"); OnUserUpdated(before, user); } /*else //Occurs when a user leaves a server @@ -929,13 +923,13 @@ namespace Discord if (channel.Recipient.Id == data.UserId) user = channel.Recipient; else - return; ; + break; } else user = channel.Server.GetUser(data.UserId); if (user != null) { - //Logger.Verbose($"Is Typing: {channel.Server?.Name ?? "[Private]"}/{channel.Name}/{user.Name}"); + Logger.Debug($"TYPING_START: {channel.Path} ({user.Name})"); OnUserIsTypingUpdated(channel, user); user.UpdateActivity(); } @@ -955,6 +949,7 @@ namespace Discord var user = server.GetUser(data.UserId); if (user != null) { + Logger.Debug($"VOICE_STATE_UPDATE: {user.Path}"); var before = Config.EnablePreUpdateEvents ? user.Clone() : null; user.Update(data); //Logger.Verbose($"Voice Updated: {server.Name}/{user.Name}"); @@ -979,8 +974,7 @@ namespace Discord PrivateUser.Update(data); foreach (var server in _servers) server.Value.CurrentUser.Update(data); - if (Config.LogEvents) - Logger.Info("Profile Updated"); + Logger.Debug($"USER_UPDATE"); OnProfileUpdated(before, CurrentUser); } } @@ -996,6 +990,7 @@ namespace Discord case "VOICE_SERVER_UPDATE": case "GUILD_EMOJIS_UPDATE": case "MESSAGE_ACK": + Logger.Debug($"{e.Type} [Ignored]"); break; //Others diff --git a/src/Discord.Net/DiscordConfig.cs b/src/Discord.Net/DiscordConfig.cs index 453f0952d..5add8dcda 100644 --- a/src/Discord.Net/DiscordConfig.cs +++ b/src/Discord.Net/DiscordConfig.cs @@ -16,10 +16,8 @@ namespace Discord /// Gets or sets the version of your application, used in the user agent. public string AppVersion { get; set; } = null; - /// Gets or sets the minimum log level severity that will be sent to the LogMessage event. Warning: setting this to debug will really hurt performance but should help investigate any internal issues. + /// Gets or sets the minimum log level severity that will be sent to the LogMessage event. public LogSeverity LogLevel { get; set; } = LogSeverity.Info; - /// Enables or disables the default event logger. - public bool LogEvents { get; set; } = true; //WebSocket @@ -66,7 +64,6 @@ namespace Discord public const string InviteUrl = "https://discord.gg/"; public LogSeverity LogLevel { get; } - public bool LogEvents { get; } public int ConnectionTimeout { get; } public int ReconnectDelay { get; } @@ -83,7 +80,6 @@ namespace Discord internal DiscordConfig(DiscordConfigBuilder builder) { LogLevel = builder.LogLevel; - LogEvents = builder.LogEvents; ConnectionTimeout = builder.ConnectionTimeout; ReconnectDelay = builder.ReconnectDelay; diff --git a/src/Discord.Net/Models/Channel.cs b/src/Discord.Net/Models/Channel.cs index 438646bdf..a461035e5 100644 --- a/src/Discord.Net/Models/Channel.cs +++ b/src/Discord.Net/Models/Channel.cs @@ -111,7 +111,7 @@ namespace Discord : this(client, id) { Server = server; - if (server != null) + if (server != null && Client.Config.UsePermissionsCache) { foreach (var user in server.Users) AddUser(user); @@ -131,9 +131,15 @@ namespace Discord Id = id; _permissionOverwrites = new Dictionary(); - _users = new ConcurrentDictionary(); + if (client.Config.UsePermissionsCache) + { + if (IsPrivate) + _users = new ConcurrentDictionary(2, 2); + else + _users = new ConcurrentDictionary(2, (int)(Server.UserCount * 1.05)); + } if (client.Config.MessageCacheSize > 0) - _messages = new ConcurrentDictionary(); + _messages = new ConcurrentDictionary(2, (int)(client.Config.MessageCacheSize * 1.05)); } internal void Update(ChannelReference model) @@ -542,8 +548,7 @@ namespace Discord #region Users internal void AddUser(User user) { - if (!Client.Config.UsePermissionsCache) - return; + if (!Client.Config.UsePermissionsCache) return; var perms = new ChannelPermissions(); UpdatePermissions(user, ref perms); diff --git a/src/Discord.Net/Models/Server.cs b/src/Discord.Net/Models/Server.cs index ec5f58519..5123d9bbc 100644 --- a/src/Discord.Net/Models/Server.cs +++ b/src/Discord.Net/Models/Server.cs @@ -46,9 +46,9 @@ namespace Discord } } - private readonly ConcurrentDictionary _roles; - private readonly ConcurrentDictionary _users; - private readonly ConcurrentDictionary _channels; + private ConcurrentDictionary _roles; + private ConcurrentDictionary _users; + private ConcurrentDictionary _channels; private ulong _ownerId; private ulong? _afkChannelId; private int _userCount; @@ -117,9 +117,6 @@ namespace Discord Client = client; Id = id; - _channels = new ConcurrentDictionary(); - _roles = new ConcurrentDictionary(); - _users = new ConcurrentDictionary(); DefaultChannel = AddChannel(id); EveryoneRole = AddRole(id); } @@ -157,6 +154,7 @@ namespace Discord } if (model.Roles != null) { + _roles = new ConcurrentDictionary(2, model.Roles.Length); foreach (var x in model.Roles) AddRole(x.Id).Update(x); } @@ -171,11 +169,13 @@ namespace Discord if (model.Channels != null) { + _channels = new ConcurrentDictionary(2, (int)(model.Channels.Length * 1.05)); foreach (var subModel in model.Channels) AddChannel(subModel.Id).Update(subModel); } if (model.Members != null) { + _users = new ConcurrentDictionary(2, (int)(model.Members.Length * 1.05)); foreach (var subModel in model.Members) AddUser(subModel.User.Id).Update(subModel); }