|
|
@@ -202,7 +202,7 @@ namespace Discord |
|
|
|
await Login(email, password, token).ConfigureAwait(false); |
|
|
|
await GatewaySocket.Connect(ClientAPI, CancelToken).ConfigureAwait(false); |
|
|
|
|
|
|
|
var tasks = new[] { CancelToken.Wait() } |
|
|
|
var tasks = new[] { CancelToken.Wait(), LargeServerDownloader(CancelToken) } |
|
|
|
.Concat(MessageQueue.Run(CancelToken)); |
|
|
|
|
|
|
|
await _taskManager.Start(tasks, cancelSource).ConfigureAwait(false); |
|
|
@@ -522,32 +522,7 @@ namespace Discord |
|
|
|
channel.Update(model); |
|
|
|
} |
|
|
|
|
|
|
|
//Temporary hotfix to download all large guilds before raising READY |
|
|
|
CancellationToken cancelToken = _taskManager.CancelToken; |
|
|
|
Task.Run(async () => |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
const short batchSize = 50; |
|
|
|
int count = 0; |
|
|
|
await Task.Delay(1500, cancelToken); |
|
|
|
do |
|
|
|
{ |
|
|
|
count = 0; |
|
|
|
ulong[] serverIds = new ulong[batchSize]; |
|
|
|
while (count < batchSize && _largeServers.TryDequeue(out serverIds[count++])) { } |
|
|
|
if (count > 0) |
|
|
|
{ |
|
|
|
cancelToken.ThrowIfCancellationRequested(); |
|
|
|
GatewaySocket.SendRequestMembers(serverIds, "", 0); |
|
|
|
await Task.Delay(1250, cancelToken); |
|
|
|
} |
|
|
|
} while (count == batchSize); |
|
|
|
await Task.Delay(1500, cancelToken); |
|
|
|
EndConnect(); |
|
|
|
} |
|
|
|
catch (OperationCanceledException) { } |
|
|
|
}); |
|
|
|
EndConnect(); |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
@@ -571,12 +546,7 @@ namespace Discord |
|
|
|
if (!data.IsLarge) |
|
|
|
OnServerAvailable(server); |
|
|
|
else |
|
|
|
{ |
|
|
|
if (State == ConnectionState.Connected) |
|
|
|
GatewaySocket.SendRequestMembers(new ulong[] { data.Id }, "", 0); |
|
|
|
else |
|
|
|
_largeServers.Enqueue(data.Id); |
|
|
|
} |
|
|
|
_largeServers.Enqueue(data.Id); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
@@ -1098,6 +1068,35 @@ namespace Discord |
|
|
|
} |
|
|
|
#endregion |
|
|
|
|
|
|
|
private Task LargeServerDownloader(CancellationToken cancelToken) |
|
|
|
{ |
|
|
|
//Temporary hotfix to download all large guilds before raising READY |
|
|
|
return Task.Run(async () => |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
const short batchSize = 50; |
|
|
|
ulong[] serverIds = new ulong[batchSize]; |
|
|
|
|
|
|
|
while (true) |
|
|
|
{ |
|
|
|
if (!cancelToken.IsCancellationRequested && State == ConnectionState.Connected) |
|
|
|
{ |
|
|
|
int count = 0; |
|
|
|
|
|
|
|
while (count < batchSize && _largeServers.TryDequeue(out serverIds[count])) |
|
|
|
count++; |
|
|
|
|
|
|
|
if (count > 0 && !cancelToken.IsCancellationRequested) |
|
|
|
GatewaySocket.SendRequestMembers(serverIds.Take(count), "", 0); |
|
|
|
} |
|
|
|
await Task.Delay(1250); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (OperationCanceledException) { } |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
//Helpers |
|
|
|
private string GetTokenCachePath(string email) |
|
|
|
{ |
|
|
|