Browse Source

Fixed compressed message handling

voice-allocs
RogueException 8 years ago
parent
commit
9224fae4cd
2 changed files with 21 additions and 13 deletions
  1. +11
    -7
      src/Discord.Net.WebSocket/DiscordSocketApiClient.cs
  2. +10
    -6
      src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs

+ 11
- 7
src/Discord.Net.WebSocket/DiscordSocketApiClient.cs View File

@@ -27,7 +27,7 @@ namespace Discord.API
private readonly AsyncEvent<Func<Exception, Task>> _disconnectedEvent = new AsyncEvent<Func<Exception, Task>>();

private readonly MemoryStream _decompressionStream;
private readonly JsonTextReader _decompressionJsonReader;
private readonly StreamReader _decompressionReader;
private CancellationTokenSource _connectCancelToken;
private string _gatewayUrl;
private bool _isExplicitUrl;
@@ -43,8 +43,8 @@ namespace Discord.API
_gatewayUrl = url;
if (url != null)
_isExplicitUrl = true;
_decompressionStream = new MemoryStream(10 * 1024); //10 KB
_decompressionJsonReader = new JsonTextReader(new StreamReader(_decompressionStream));
_decompressionStream = new MemoryStream(10 * 1024); //10 KB
_decompressionReader = new StreamReader(_decompressionStream);

WebSocketClient = webSocketProvider();
//WebSocketClient.SetHeader("user-agent", DiscordConfig.UserAgent); (Causes issues in .NET Framework 4.6+)
@@ -55,11 +55,15 @@ namespace Discord.API
_decompressionStream.Position = 0;
using (var zlib = new DeflateStream(compressed, CompressionMode.Decompress))
zlib.CopyTo(_decompressionStream);
_decompressionStream.Position = 0;
var msg = _serializer.Deserialize<SocketFrame>(_decompressionJsonReader);
if (msg != null)
await _receivedGatewayEvent.InvokeAsync((GatewayOpCode)msg.Operation, msg.Sequence, msg.Type, msg.Payload).ConfigureAwait(false);
using (var jsonReader = new JsonTextReader(_decompressionReader) { CloseInput = false })
{
var msg = _serializer.Deserialize<SocketFrame>(jsonReader);
if (msg != null)
await _receivedGatewayEvent.InvokeAsync((GatewayOpCode)msg.Operation, msg.Sequence, msg.Type, msg.Payload).ConfigureAwait(false);
}
_decompressionStream.SetLength(0);
}
};
WebSocketClient.TextMessage += async text =>


+ 10
- 6
src/Discord.Net.WebSocket/DiscordVoiceApiClient.cs View File

@@ -40,7 +40,7 @@ namespace Discord.Audio
private readonly JsonSerializer _serializer;
private readonly SemaphoreSlim _connectionLock;
private readonly MemoryStream _decompressionStream;
private readonly JsonTextReader _decompressionJsonReader;
private readonly StreamReader _decompressionReader;
private CancellationTokenSource _connectCancelToken;
private IUdpSocket _udp;
private bool _isDisposed;
@@ -59,7 +59,7 @@ namespace Discord.Audio
_udp = udpSocketProvider();
_udp.ReceivedDatagram += (data, index, count) => _receivedPacketEvent.InvokeAsync(data, index, count);
_decompressionStream = new MemoryStream(10 * 1024); //10 KB
_decompressionJsonReader = new JsonTextReader(new StreamReader(_decompressionStream));
_decompressionReader = new StreamReader(_decompressionStream);

WebSocketClient = webSocketProvider();
//_gatewayClient.SetHeader("user-agent", DiscordConfig.UserAgent); //(Causes issues in .Net 4.6+)
@@ -72,9 +72,13 @@ namespace Discord.Audio
zlib.CopyTo(_decompressionStream);

_decompressionStream.Position = 0;
var msg = _serializer.Deserialize<SocketFrame>(_decompressionJsonReader);
if (msg != null)
await _receivedEvent.InvokeAsync((VoiceOpCode)msg.Operation, msg.Payload).ConfigureAwait(false);
using (var jsonReader = new JsonTextReader(_decompressionReader) { CloseInput = false })
{
var msg = _serializer.Deserialize<SocketFrame>(jsonReader);
if (msg != null)
await _receivedEvent.InvokeAsync((VoiceOpCode)msg.Operation, msg.Payload).ConfigureAwait(false);
}
_decompressionStream.SetLength(0);
}
};
WebSocketClient.TextMessage += async text =>
@@ -231,7 +235,7 @@ namespace Discord.Audio
}
public async Task<ulong> SendKeepaliveAsync()
{
var value = _nextKeepalive++;
ulong value = _nextKeepalive++;
var packet = new byte[8];
packet[0] = (byte)(value >> 0);
packet[1] = (byte)(value >> 8);


Loading…
Cancel
Save