@@ -335,7 +335,7 @@ namespace Discord
}
}
internal CachedDMChannel AddDMChannel(API.Channel model, DataStore dataStore)
internal CachedDMChannel AddDMChannel(API.Channel model, DataStore dataStore)
{
{
var recipient = GetOrAddUser(model.Recipient.Value, dataStore);
var recipient = GetOrAddUser(model.Recipients .Value[0] , dataStore);
var channel = new CachedDMChannel(this, new CachedDMUser(recipient), model);
var channel = new CachedDMChannel(this, new CachedDMUser(recipient), model);
recipient.AddRef();
recipient.AddRef();
dataStore.AddDMChannel(channel);
dataStore.AddDMChannel(channel);
@@ -442,6 +442,9 @@ namespace Discord
_lastSeq = seq.Value;
_lastSeq = seq.Value;
try
try
{
{
string writeOutput = $"PACKET ---\n OPCODE: {opCode}\nSEQ: {(seq.HasValue ? seq.Value : -1)}\nTYPE: {type}\n========== BEGIN PAYLOAD ==========\n\n{payload}\n=========================";
System.IO.File.WriteAllText($"./discord-debug/{opCode}-{DateTime.Now.ToFileTime()}", writeOutput);
switch (opCode)
switch (opCode)
{
{
case GatewayOpCode.Hello:
case GatewayOpCode.Hello:
@@ -505,7 +508,8 @@ namespace Discord
await _gatewayLogger.DebugAsync("Received Dispatch (READY)").ConfigureAwait(false);
await _gatewayLogger.DebugAsync("Received Dispatch (READY)").ConfigureAwait(false);
var data = (payload as JToken).ToObject<ReadyEvent>(_serializer);
var data = (payload as JToken).ToObject<ReadyEvent>(_serializer);
var dataStore = new DataStore( data.Guilds.Length, data.PrivateChannels.Length);
var privateChannels = data.PrivateChannels.Where(c => c.Recipients.IsSpecified && c.Recipients.Value.Count() == 1).ToArray();
var dataStore = new DataStore( data.Guilds.Length, privateChannels.Length);
var currentUser = new CachedSelfUser(this, data.User);
var currentUser = new CachedSelfUser(this, data.User);
int unavailableGuilds = 0;
int unavailableGuilds = 0;
@@ -517,8 +521,8 @@ namespace Discord
if (model.Unavailable == true)
if (model.Unavailable == true)
unavailableGuilds++;
unavailableGuilds++;
}
}
for (int i = 0; i < data.P rivateChannels.Length; i++)
AddDMChannel(data.P rivateChannels[i], dataStore);
for (int i = 0; i < p rivateChannels.Length; i++)
AddDMChannel(p rivateChannels[i], dataStore);
_sessionId = data.SessionId;
_sessionId = data.SessionId;
_currentUser = currentUser;
_currentUser = currentUser;
@@ -740,7 +744,7 @@ namespace Discord
}
}
}
}
else
else
channel = RemoveDMChannel(data.Recipient.Value. Id);
channel = RemoveDMChannel(data.Id);
if (channel != null)
if (channel != null)
await _channelDestroyedEvent.InvokeAsync(channel).ConfigureAwait(false);
await _channelDestroyedEvent.InvokeAsync(channel).ConfigureAwait(false);
else
else
@@ -1260,7 +1264,7 @@ namespace Discord
catch (Exception ex)
catch (Exception ex)
{
{
await _gatewayLogger.ErrorAsync($"Error handling {opCode}{(type != null ? $" ({type})" : "")}", ex).ConfigureAwait(false);
await _gatewayLogger.ErrorAsync($"Error handling {opCode}{(type != null ? $" ({type})" : "")}", ex).ConfigureAwait(false);
return ;
throw ;
}
}
#if BENCHMARK
#if BENCHMARK
}
}