| @@ -9,7 +9,7 @@ namespace Discord.Net.Udp | |||||
| event Func<byte[], int, int, Task> ReceivedDatagram; | event Func<byte[], int, int, Task> ReceivedDatagram; | ||||
| void SetCancelToken(CancellationToken cancelToken); | void SetCancelToken(CancellationToken cancelToken); | ||||
| void SetDestination(string host, int port); | |||||
| void SetDestination(string ip, int port); | |||||
| Task StartAsync(); | Task StartAsync(); | ||||
| Task StopAsync(); | Task StopAsync(); | ||||
| @@ -7,6 +7,8 @@ namespace Discord.API.Voice | |||||
| { | { | ||||
| [JsonProperty("ssrc")] | [JsonProperty("ssrc")] | ||||
| public uint SSRC { get; set; } | public uint SSRC { get; set; } | ||||
| [JsonProperty("ip")] | |||||
| public string Ip { get; set; } | |||||
| [JsonProperty("port")] | [JsonProperty("port")] | ||||
| public ushort Port { get; set; } | public ushort Port { get; set; } | ||||
| [JsonProperty("modes")] | [JsonProperty("modes")] | ||||
| @@ -248,7 +248,7 @@ namespace Discord.Audio | |||||
| _heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _connection.CancelToken); | _heartbeatTask = RunHeartbeatAsync(data.HeartbeatInterval, _connection.CancelToken); | ||||
| ApiClient.SetUdpEndpoint(_url, data.Port); | |||||
| ApiClient.SetUdpEndpoint(data.Ip, data.Port); | |||||
| await ApiClient.SendDiscoveryAsync(_ssrc).ConfigureAwait(false); | await ApiClient.SendDiscoveryAsync(_ssrc).ConfigureAwait(false); | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -302,7 +302,7 @@ namespace Discord.Audio | |||||
| } | } | ||||
| private async Task ProcessPacketAsync(byte[] packet) | private async Task ProcessPacketAsync(byte[] packet) | ||||
| { | { | ||||
| if (!_connection.IsCompleted) | |||||
| if (_connection.State == ConnectionState.Connecting) | |||||
| { | { | ||||
| if (packet.Length != 70) | if (packet.Length != 70) | ||||
| { | { | ||||
| @@ -314,7 +314,7 @@ namespace Discord.Audio | |||||
| try | try | ||||
| { | { | ||||
| ip = Encoding.UTF8.GetString(packet, 4, 70 - 6).TrimEnd('\0'); | ip = Encoding.UTF8.GetString(packet, 4, 70 - 6).TrimEnd('\0'); | ||||
| port = packet[69] | (packet[68] << 8); | |||||
| port = (packet[69] << 8) | packet[68]; | |||||
| } | } | ||||
| catch (Exception ex) | catch (Exception ex) | ||||
| { | { | ||||
| @@ -325,7 +325,7 @@ namespace Discord.Audio | |||||
| await _audioLogger.DebugAsync("Received Discovery").ConfigureAwait(false); | await _audioLogger.DebugAsync("Received Discovery").ConfigureAwait(false); | ||||
| await ApiClient.SendSelectProtocol(ip, port).ConfigureAwait(false); | await ApiClient.SendSelectProtocol(ip, port).ConfigureAwait(false); | ||||
| } | } | ||||
| else | |||||
| else if (_connection.State == ConnectionState.Connected) | |||||
| { | { | ||||
| uint ssrc; | uint ssrc; | ||||
| ulong userId; | ulong userId; | ||||
| @@ -26,8 +26,6 @@ namespace Discord | |||||
| public ConnectionState State { get; private set; } | public ConnectionState State { get; private set; } | ||||
| public CancellationToken CancelToken { get; private set; } | public CancellationToken CancelToken { get; private set; } | ||||
| public bool IsCompleted => _readyPromise.Task.IsCompleted; | |||||
| internal ConnectionManager(SemaphoreSlim stateLock, Logger logger, int connectionTimeout, | internal ConnectionManager(SemaphoreSlim stateLock, Logger logger, int connectionTimeout, | ||||
| Func<Task> onConnecting, Func<Exception, Task> onDisconnecting, Action<Func<Exception, Task>> clientDisconnectHandler) | Func<Task> onConnecting, Func<Exception, Task> onDisconnecting, Action<Func<Exception, Task>> clientDisconnectHandler) | ||||
| { | { | ||||
| @@ -16,7 +16,6 @@ | |||||
| <PackageReference Include="System.Runtime.InteropServices" Version="4.3.0" /> | <PackageReference Include="System.Runtime.InteropServices" Version="4.3.0" /> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' "> | <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' "> | ||||
| <PackageReference Include="System.Net.NameResolution" Version="4.3.0" /> | |||||
| <PackageReference Include="System.Net.Sockets" Version="4.3.0" /> | <PackageReference Include="System.Net.Sockets" Version="4.3.0" /> | ||||
| <PackageReference Include="System.Net.WebSockets.Client" Version="4.3.0" /> | <PackageReference Include="System.Net.WebSockets.Client" Version="4.3.0" /> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| @@ -228,9 +228,9 @@ namespace Discord.Audio | |||||
| await _sentDiscoveryEvent.InvokeAsync().ConfigureAwait(false); | await _sentDiscoveryEvent.InvokeAsync().ConfigureAwait(false); | ||||
| } | } | ||||
| public void SetUdpEndpoint(string host, int port) | |||||
| public void SetUdpEndpoint(string ip, int port) | |||||
| { | { | ||||
| _udp.SetDestination(host, port); | |||||
| _udp.SetDestination(ip, port); | |||||
| } | } | ||||
| //Helpers | //Helpers | ||||
| @@ -89,10 +89,9 @@ namespace Discord.Net.Udp | |||||
| } | } | ||||
| } | } | ||||
| public void SetDestination(string host, int port) | |||||
| public void SetDestination(string ip, int port) | |||||
| { | { | ||||
| var entry = Dns.GetHostEntryAsync(host).GetAwaiter().GetResult(); | |||||
| _destination = new IPEndPoint(entry.AddressList[0], port); | |||||
| _destination = new IPEndPoint(IPAddress.Parse(ip), port); | |||||
| } | } | ||||
| public void SetCancelToken(CancellationToken cancelToken) | public void SetCancelToken(CancellationToken cancelToken) | ||||
| { | { | ||||