Browse Source

Merge pull request #47 from Kwoth/master

Voice crashfix, Properly getting data for large servers.
pull/49/head
RogueException 9 years ago
parent
commit
8a8b01cc5b
2 changed files with 15 additions and 13 deletions
  1. +6
    -2
      src/Discord.Net.Audio/Net/VoiceSocket.cs
  2. +9
    -11
      src/Discord.Net/DiscordClient.cs

+ 6
- 2
src/Discord.Net.Audio/Net/VoiceSocket.cs View File

@@ -407,7 +407,7 @@ namespace Discord.Net.WebSockets
WebSocketMessage msg;
using (var reader = new JsonTextReader(new StringReader(json)))
msg = _serializer.Deserialize(reader, typeof(WebSocketMessage)) as WebSocketMessage;
var opCode = (OpCodes)msg.Operation;
switch (opCode)
{
@@ -418,7 +418,11 @@ namespace Discord.Net.WebSockets
var payload = (msg.Payload as JToken).ToObject<ReadyEvent>(_serializer);
_heartbeatInterval = payload.HeartbeatInterval;
_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();
_endpoint = new IPEndPoint(address, payload.Port);



+ 9
- 11
src/Discord.Net/DiscordClient.cs View File

@@ -528,24 +528,22 @@ namespace Discord
{
try
{
ulong serverId;
ulong[] serverIds = new ulong[50];
int i = 0;

const short batchSize = 50;
int largeServersCount = 0;
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();
GatewaySocket.SendRequestMembers(serverIds, "", 0);
await Task.Delay(1500, cancelToken);
}
if (i < 50)
break;
}
} while (largeServersCount == batchSize);
await Task.Delay(2500, cancelToken);
EndConnect();
}


Loading…
Cancel
Save