Browse Source

datastore, please

tags/1.0-rc
RogueException 9 years ago
parent
commit
9c20253a0c
1 changed files with 20 additions and 10 deletions
  1. +20
    -10
      src/Discord.Net/DiscordSocketClient.cs

+ 20
- 10
src/Discord.Net/DiscordSocketClient.cs View File

@@ -186,27 +186,30 @@ namespace Discord
} }
internal CachedGuild AddCachedGuild(API.Gateway.ExtendedGuild model, DataStore dataStore = null) internal CachedGuild AddCachedGuild(API.Gateway.ExtendedGuild model, DataStore dataStore = null)
{ {
dataStore = dataStore ?? DataStore;

var guild = new CachedGuild(this, model); var guild = new CachedGuild(this, model);
if (model.Unavailable != true) if (model.Unavailable != true)
{ {
for (int i = 0; i < model.Channels.Length; i++) for (int i = 0; i < model.Channels.Length; i++)
AddCachedChannel(model.Channels[i], dataStore); AddCachedChannel(model.Channels[i], dataStore);
} }
(dataStore ?? DataStore).AddGuild(guild);
dataStore.AddGuild(guild);
if (model.Large) if (model.Large)
_largeGuilds.Enqueue(model.Id); _largeGuilds.Enqueue(model.Id);
return guild; return guild;
} }
internal CachedGuild RemoveCachedGuild(ulong id, DataStore dataStore = null) internal CachedGuild RemoveCachedGuild(ulong id, DataStore dataStore = null)
{ {
var guild = (dataStore ?? DataStore).RemoveGuild(id) as CachedGuild;
dataStore = dataStore ?? DataStore;

var guild = dataStore.RemoveGuild(id) as CachedGuild;
foreach (var channel in guild.Channels) foreach (var channel in guild.Channels)
guild.RemoveCachedChannel(channel.Id); guild.RemoveCachedChannel(channel.Id);
foreach (var user in guild.Members) foreach (var user in guild.Members)
guild.RemoveCachedUser(user.Id); guild.RemoveCachedUser(user.Id);
return guild; return guild;
} }
internal CachedGuild GetCachedGuild(ulong id) => DataStore.GetGuild(id);


public override Task<IChannel> GetChannel(ulong id) public override Task<IChannel> GetChannel(ulong id)
{ {
@@ -214,22 +217,26 @@ namespace Discord
} }
internal ICachedChannel AddCachedChannel(API.Channel model, DataStore dataStore = null) internal ICachedChannel AddCachedChannel(API.Channel model, DataStore dataStore = null)
{ {
dataStore = dataStore ?? DataStore;

ICachedChannel channel; ICachedChannel channel;
if (model.IsPrivate) if (model.IsPrivate)
{ {
var recipient = AddCachedUser(model.Recipient);
var recipient = AddCachedUser(model.Recipient, dataStore);
channel = recipient.SetDMChannel(model); channel = recipient.SetDMChannel(model);
} }
else else
{ {
var guild = GetCachedGuild(model.GuildId.Value);
var guild = dataStore.GetGuild(model.GuildId.Value);
channel = guild.AddCachedChannel(model); channel = guild.AddCachedChannel(model);
} }
(dataStore ?? DataStore).AddChannel(channel);
dataStore.AddChannel(channel);
return channel; return channel;
} }
internal ICachedChannel RemoveCachedChannel(ulong id, DataStore dataStore = null) internal ICachedChannel RemoveCachedChannel(ulong id, DataStore dataStore = null)
{ {
dataStore = dataStore ?? DataStore;

//TODO: C#7 //TODO: C#7
var channel = DataStore.RemoveChannel(id) as ICachedChannel; var channel = DataStore.RemoveChannel(id) as ICachedChannel;


@@ -250,7 +257,6 @@ namespace Discord


return null; return null;
} }
internal ICachedChannel GetCachedChannel(ulong id) => DataStore.GetChannel(id);


public override Task<IUser> GetUser(ulong id) public override Task<IUser> GetUser(ulong id)
{ {
@@ -262,13 +268,17 @@ namespace Discord
} }
internal CachedPublicUser AddCachedUser(API.User model, DataStore dataStore = null) internal CachedPublicUser AddCachedUser(API.User model, DataStore dataStore = null)
{ {
var user = (dataStore ?? DataStore).GetOrAddUser(model.Id, _ => new CachedPublicUser(this, model)) as CachedPublicUser;
dataStore = dataStore ?? DataStore;

var user = dataStore.GetOrAddUser(model.Id, _ => new CachedPublicUser(this, model)) as CachedPublicUser;
user.AddRef(); user.AddRef();
return user; return user;
} }
internal CachedPublicUser RemoveCachedUser(ulong id, DataStore dataStore = null) internal CachedPublicUser RemoveCachedUser(ulong id, DataStore dataStore = null)
{ {
var user = (dataStore ?? DataStore).GetUser(id) as CachedPublicUser;
dataStore = dataStore ?? DataStore;

var user = dataStore.GetUser(id) as CachedPublicUser;
user.RemoveRef(); user.RemoveRef();
return user; return user;
} }
@@ -306,7 +316,7 @@ namespace Discord
_sessionId = data.SessionId; _sessionId = data.SessionId;
DataStore = dataStore; DataStore = dataStore;


await Ready().ConfigureAwait(false);
await Ready.Raise().ConfigureAwait(false);


_connectTask.TrySetResult(true); //Signal the .Connect() call to complete _connectTask.TrySetResult(true); //Signal the .Connect() call to complete
} }


Loading…
Cancel
Save