Voice crashfix, Properly getting data for large servers.pull/49/head
@@ -407,7 +407,7 @@ namespace Discord.Net.WebSockets | |||||
WebSocketMessage msg; | WebSocketMessage msg; | ||||
using (var reader = new JsonTextReader(new StringReader(json))) | using (var reader = new JsonTextReader(new StringReader(json))) | ||||
msg = _serializer.Deserialize(reader, typeof(WebSocketMessage)) as WebSocketMessage; | msg = _serializer.Deserialize(reader, typeof(WebSocketMessage)) as WebSocketMessage; | ||||
var opCode = (OpCodes)msg.Operation; | var opCode = (OpCodes)msg.Operation; | ||||
switch (opCode) | switch (opCode) | ||||
{ | { | ||||
@@ -418,7 +418,11 @@ namespace Discord.Net.WebSockets | |||||
var payload = (msg.Payload as JToken).ToObject<ReadyEvent>(_serializer); | var payload = (msg.Payload as JToken).ToObject<ReadyEvent>(_serializer); | ||||
_heartbeatInterval = payload.HeartbeatInterval; | _heartbeatInterval = payload.HeartbeatInterval; | ||||
_ssrc = payload.SSRC; | _ssrc = payload.SSRC; | ||||
string hostname = Host.Substring(0, Host.IndexOf('?')).Replace("wss://", ""); | |||||
string hostname; | |||||
if (Host.Contains("?")) | |||||
hostname = Host.Substring(0, Host.IndexOf('?')).Replace("wss://", ""); | |||||
else | |||||
hostname = Host.Replace("wss://", ""); | |||||
var address = (await Dns.GetHostAddressesAsync(hostname).ConfigureAwait(false)).FirstOrDefault(); | var address = (await Dns.GetHostAddressesAsync(hostname).ConfigureAwait(false)).FirstOrDefault(); | ||||
_endpoint = new IPEndPoint(address, payload.Port); | _endpoint = new IPEndPoint(address, payload.Port); | ||||
@@ -528,24 +528,22 @@ namespace Discord | |||||
{ | { | ||||
try | try | ||||
{ | { | ||||
ulong serverId; | |||||
ulong[] serverIds = new ulong[50]; | |||||
int i = 0; | |||||
const short batchSize = 50; | |||||
int largeServersCount = 0; | |||||
await Task.Delay(2500, cancelToken); | await Task.Delay(2500, cancelToken); | ||||
while (true) | |||||
do | |||||
{ | { | ||||
while (_largeServers.TryDequeue(out serverId) && i < 50) | |||||
serverIds[i++] = serverId; | |||||
if (i > 0) | |||||
largeServersCount = 0; | |||||
ulong[] serverIds = new ulong[batchSize]; | |||||
while (largeServersCount < batchSize && _largeServers.TryDequeue(out serverIds[largeServersCount++])) { } | |||||
if (largeServersCount > 0) | |||||
{ | { | ||||
Logger.Verbose($"Downloading data for {largeServersCount} large servers."); | |||||
cancelToken.ThrowIfCancellationRequested(); | cancelToken.ThrowIfCancellationRequested(); | ||||
GatewaySocket.SendRequestMembers(serverIds, "", 0); | GatewaySocket.SendRequestMembers(serverIds, "", 0); | ||||
await Task.Delay(1500, cancelToken); | await Task.Delay(1500, cancelToken); | ||||
} | } | ||||
if (i < 50) | |||||
break; | |||||
} | |||||
} while (largeServersCount == batchSize); | |||||
await Task.Delay(2500, cancelToken); | await Task.Delay(2500, cancelToken); | ||||
EndConnect(); | EndConnect(); | ||||
} | } | ||||