@@ -61,14 +61,16 @@ namespace Discord.WebSockets.Voice
_encoder = new OpusEncoder(48000, 1, 20, Opus.Application.Audio);
_encoder = new OpusEncoder(48000, 1, 20, Opus.Application.Audio);
}
}
public void SetChannel(string serverId, string channelId)
public Task SetChannel(string serverId, string channelId)
{
{
_serverId = serverId;
_serverId = serverId;
_channelId = channelId;
_channelId = channelId;
return base.BeginConnect();
}
}
public async Task Login(string userId, string sessionId, string token, CancellationToken cancelToken)
public async Task Login(string userId, string sessionId, string token, CancellationToken cancelToken)
{
{
if ((WebSocketState)_state != WebSocketState.Disc onnected)
if ((WebSocketState)_state == WebSocketState.C onnected)
{
{
//Adjust the host and tell the system to reconnect
//Adjust the host and tell the system to reconnect
await DisconnectInternal(new Exception("Server transfer occurred."), isUnexpected: false);
await DisconnectInternal(new Exception("Server transfer occurred."), isUnexpected: false);
@@ -79,7 +81,7 @@ namespace Discord.WebSockets.Voice
_sessionId = sessionId;
_sessionId = sessionId;
_token = token;
_token = token;
await Connec t().ConfigureAwait(false);
await Star t().ConfigureAwait(false);
}
}
public async Task Reconnect()
public async Task Reconnect()
{
{
@@ -91,7 +93,7 @@ namespace Discord.WebSockets.Voice
{
{
try
try
{
{
await Connec t().ConfigureAwait(false);
await Star t().ConfigureAwait(false);
break;
break;
}
}
catch (OperationCanceledException) { throw; }
catch (OperationCanceledException) { throw; }
@@ -245,7 +247,7 @@ namespace Discord.WebSockets.Voice
int port = packet[68] | packet[69] << 8;
int port = packet[68] | packet[69] << 8;
string ip = Encoding.ASCII.GetString(packet, 4, 70 - 6).TrimEnd('\0');
string ip = Encoding.ASCII.GetString(packet, 4, 70 - 6).TrimEnd('\0');
Complete Connect();
End Connect();
var login2 = new Login2Command();
var login2 = new Login2Command();
login2.Payload.Protocol = "udp";
login2.Payload.Protocol = "udp";
@@ -599,9 +601,20 @@ namespace Discord.WebSockets.Voice
{
{
_sendQueueEmptyWait.Wait(_cancelToken);
_sendQueueEmptyWait.Wait(_cancelToken);
}
}
public void WaitForConnection(CancellationToken cancelToken )
public Task WaitForConnection(int timeout )
{
{
_connectedEvent.Wait(cancelToken);
return Task.Run(() =>
{
try
{
if (!_connectedEvent.Wait(timeout, _cancelToken))
throw new TimeoutException();
}
catch (OperationCanceledException ex)
{
ThrowError();
}
});
}
}
}
}
}
}