@@ -44,7 +44,7 @@ namespace Discord
/// <summary> Gets the estimated round-trip latency, in milliseconds, to the gateway server. </summary>
public int Latency { get; private set; }
//From DiscordConfig
//From DiscordSocket Config
internal int TotalShards { get; private set; }
internal int ConnectionTimeout { get; private set; }
internal int ReconnectDelay { get; private set; }
@@ -55,8 +55,8 @@ namespace Discord
internal DataStore DataStore { get; private set; }
internal WebSocketProvider WebSocketProvider { get; private set; }
internal CachedSelfUser CurrentUser => _currentUser as Cached SelfUser;
internal IReadOnlyCollection<Cached Guild> Guilds => DataStore.Guilds;
internal SocketSelfUser CurrentUser => _currentUser as Socket SelfUser;
internal IReadOnlyCollection<Socket Guild> Guilds => DataStore.Guilds;
internal IReadOnlyCollection<VoiceRegion> VoiceRegions => _voiceRegions.ToReadOnlyCollection();
/// <summary> Creates a new REST/WebSocket discord client. </summary>
@@ -340,15 +340,15 @@ namespace Discord
{
return Task.FromResult<IReadOnlyCollection<IGuild>>(Guilds);
}
internal Cached Guild AddGuild(ExtendedGuild model, DataStore dataStore)
internal Socket Guild AddGuild(ExtendedGuild model, DataStore dataStore)
{
var guild = new Cached Guild(this, model, dataStore);
var guild = new Socket Guild(this, model, dataStore);
dataStore.AddGuild(guild);
if (model.Large)
_largeGuilds.Enqueue(model.Id);
return guild;
}
internal Cached Guild RemoveGuild(ulong id)
internal Socket Guild RemoveGuild(ulong id)
{
var guild = DataStore.RemoveGuild(id);
foreach (var channel in guild.Channels)
@@ -367,7 +367,7 @@ namespace Discord
{
return Task.FromResult<IReadOnlyCollection<IPrivateChannel>>(DataStore.PrivateChannels);
}
internal ICached Channel AddPrivateChannel(API.Channel model, DataStore dataStore)
internal ISocket Channel AddPrivateChannel(API.Channel model, DataStore dataStore)
{
switch (model.Type)
{
@@ -375,13 +375,13 @@ namespace Discord
{
var recipients = model.Recipients.Value;
var user = GetOrAddUser(recipients[0], dataStore);
var channel = new CachedDMChannel(this, new Cached DMUser(user), model);
var channel = new SocketDMChannel(this, new Socket DMUser(user), model);
dataStore.AddChannel(channel);
return channel;
}
case ChannelType.Group:
{
var channel = new Cached GroupChannel(this, model);
var channel = new Socket GroupChannel(this, model);
channel.UpdateUsers(model.Recipients.Value, UpdateSource.Creation, dataStore);
dataStore.AddChannel(channel);
return channel;
@@ -390,9 +390,9 @@ namespace Discord
throw new InvalidOperationException($"Unexpected channel type: {model.Type}");
}
}
internal ICached Channel RemovePrivateChannel(ulong id)
internal ISocket Channel RemovePrivateChannel(ulong id)
{
var channel = DataStore.RemoveChannel(id) as ICached PrivateChannel;
var channel = DataStore.RemoveChannel(id) as ISocket PrivateChannel;
foreach (var recipient in channel.Recipients)
recipient.User.RemoveRef(this);
return channel;
@@ -413,13 +413,13 @@ namespace Discord
{
return Task.FromResult<ISelfUser>(_currentUser);
}
internal Cached GlobalUser GetOrAddUser(API.User model, DataStore dataStore)
internal Socket GlobalUser GetOrAddUser(API.User model, DataStore dataStore)
{
var user = dataStore.GetOrAddUser(model.Id, _ => new Cached GlobalUser(model));
var user = dataStore.GetOrAddUser(model.Id, _ => new Socket GlobalUser(model));
user.AddRef();
return user;
}
internal Cached GlobalUser RemoveUser(ulong id)
internal Socket GlobalUser RemoveUser(ulong id)
{
return DataStore.RemoveUser(id);
}
@@ -429,10 +429,10 @@ namespace Discord
=> DownloadUsersAsync(DataStore.Guilds.Where(x => !x.HasAllMembers));
/// <summary> Downloads the users list for the provided guilds, if they don't have a complete list. </summary>
public Task DownloadUsersAsync(IEnumerable<IGuild> guilds)
=> DownloadUsersAsync(guilds.Select(x => x as Cached Guild).Where(x => x != null));
=> DownloadUsersAsync(guilds.Select(x => x as Socket Guild).Where(x => x != null));
public Task DownloadUsersAsync(params IGuild[] guilds)
=> DownloadUsersAsync(guilds.Select(x => x as Cached Guild).Where(x => x != null));
private async Task DownloadUsersAsync(IEnumerable<Cached Guild> guilds)
=> DownloadUsersAsync(guilds.Select(x => x as Socket Guild).Where(x => x != null));
private async Task DownloadUsersAsync(IEnumerable<Socket Guild> guilds)
{
var cachedGuilds = guilds.ToArray();
if (cachedGuilds.Length == 0) return;
@@ -559,7 +559,7 @@ namespace Discord
var data = (payload as JToken).ToObject<ReadyEvent>(_serializer);
var dataStore = new DataStore(data.Guilds.Length, data.PrivateChannels.Length);
var currentUser = new Cached SelfUser(this, data.User);
var currentUser = new Socket SelfUser(this, data.User);
int unavailableGuilds = 0;
for (int i = 0; i < data.Guilds.Length; i++)
{
@@ -625,7 +625,7 @@ namespace Discord
}
await _gatewayLogger.DebugAsync($"Received Dispatch ({type})").ConfigureAwait(false);
Cached Guild guild;
Socket Guild guild;
if (data.Unavailable != false)
{
guild = AddGuild(data, DataStore);
@@ -751,7 +751,7 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_CREATE)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<API.Channel>(_serializer);
ICached Channel channel = null;
ISocket Channel channel = null;
if (data.GuildId.IsSpecified)
{
var guild = DataStore.GetGuild(data.GuildId.Value);
@@ -789,7 +789,7 @@ namespace Discord
var before = channel.Clone();
channel.Update(data, UpdateSource.WebSocket);
if (!((channel as ICached GuildChannel)?.Guild.IsSynced ?? true))
if (!((channel as ISocket GuildChannel)?.Guild.IsSynced ?? true))
{
await _gatewayLogger.DebugAsync("Ignored CHANNEL_UPDATE, guild is not synced yet.").ConfigureAwait(false);
return;
@@ -808,7 +808,7 @@ namespace Discord
{
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_DELETE)").ConfigureAwait(false);
ICached Channel channel = null;
ISocket Channel channel = null;
var data = (payload as JToken).ToObject<API.Channel>(_serializer);
if (data.GuildId.IsSpecified)
{
@@ -978,7 +978,7 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_RECIPIENT_ADD)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<RecipientEvent>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as Cached GroupChannel;
var channel = DataStore.GetChannel(data.ChannelId) as Socket GroupChannel;
if (channel != null)
{
var user = channel.AddUser(data.User, DataStore);
@@ -996,7 +996,7 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (CHANNEL_RECIPIENT_REMOVE)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<RecipientEvent>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as Cached GroupChannel;
var channel = DataStore.GetChannel(data.ChannelId) as Socket GroupChannel;
if (channel != null)
{
var user = channel.RemoveUser(data.User.Id);
@@ -1166,10 +1166,10 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_CREATE)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<API.Message>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as ICached MessageChannel;
var channel = DataStore.GetChannel(data.ChannelId) as ISocket MessageChannel;
if (channel != null)
{
if (!((channel as ICached GuildChannel)?.Guild.IsSynced ?? true))
if (!((channel as ISocket GuildChannel)?.Guild.IsSynced ?? true))
{
await _gatewayLogger.DebugAsync("Ignored MESSAGE_CREATE, guild is not synced yet.").ConfigureAwait(false);
return;
@@ -1200,17 +1200,17 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_UPDATE)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<API.Message>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as ICached MessageChannel;
var channel = DataStore.GetChannel(data.ChannelId) as ISocket MessageChannel;
if (channel != null)
{
if (!((channel as ICached GuildChannel)?.Guild.IsSynced ?? true))
if (!((channel as ISocket GuildChannel)?.Guild.IsSynced ?? true))
{
await _gatewayLogger.DebugAsync("Ignored MESSAGE_UPDATE, guild is not synced yet.").ConfigureAwait(false);
return;
}
IMessage before = null, after = null;
Cached Message cachedMsg = channel.GetMessage(data.Id);
Socket Message cachedMsg = channel.GetMessage(data.Id);
if (cachedMsg != null)
{
before = cachedMsg.Clone();
@@ -1239,10 +1239,10 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_DELETE)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<API.Message>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as ICached MessageChannel;
var channel = DataStore.GetChannel(data.ChannelId) as ISocket MessageChannel;
if (channel != null)
{
if (!((channel as ICached GuildChannel)?.Guild.IsSynced ?? true))
if (!((channel as ISocket GuildChannel)?.Guild.IsSynced ?? true))
{
await _gatewayLogger.DebugAsync("Ignored MESSAGE_DELETE, guild is not synced yet.").ConfigureAwait(false);
return;
@@ -1266,10 +1266,10 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (MESSAGE_DELETE_BULK)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<MessageDeleteBulkEvent>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as ICached MessageChannel;
var channel = DataStore.GetChannel(data.ChannelId) as ISocket MessageChannel;
if (channel != null)
{
if (!((channel as ICached GuildChannel)?.Guild.IsSynced ?? true))
if (!((channel as ISocket GuildChannel)?.Guild.IsSynced ?? true))
{
await _gatewayLogger.DebugAsync("Ignored MESSAGE_DELETE_BULK, guild is not synced yet.").ConfigureAwait(false);
return;
@@ -1341,10 +1341,10 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (TYPING_START)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<TypingStartEvent>(_serializer);
var channel = DataStore.GetChannel(data.ChannelId) as ICached MessageChannel;
var channel = DataStore.GetChannel(data.ChannelId) as ISocket MessageChannel;
if (channel != null)
{
if (!((channel as ICached GuildChannel)?.Guild.IsSynced ?? true))
if (!((channel as ISocket GuildChannel)?.Guild.IsSynced ?? true))
{
await _gatewayLogger.DebugAsync("Ignored TYPING_START, guild is not synced yet.").ConfigureAwait(false);
return;
@@ -1385,7 +1385,7 @@ namespace Discord
var data = (payload as JToken).ToObject<API.VoiceState>(_serializer);
if (data.GuildId.HasValue)
{
ICached User user;
ISocket User user;
VoiceState before, after;
if (data.GuildId != null)
{
@@ -1418,7 +1418,7 @@ namespace Discord
}
else
{
var groupChannel = DataStore.GetChannel(data.ChannelId.Value) as Cached GroupChannel;
var groupChannel = DataStore.GetChannel(data.ChannelId.Value) as Socket GroupChannel;
if (groupChannel != null)
{
if (data.ChannelId != null)