Split off voice functions into DiscordClient.Voice.cs

This commit is contained in:
RogueException
2015-10-22 02:43:43 -03:00
parent 7e99d292c6
commit e79e32ca8c
3 changed files with 87 additions and 79 deletions

View File

@@ -205,6 +205,9 @@
<Compile Include="..\Discord.Net\DiscordClient.Users.cs">
<Link>DiscordClient.Users.cs</Link>
</Compile>
<Compile Include="..\Discord.Net\DiscordClient.Voice.cs">
<Link>DiscordClient.Voice.cs</Link>
</Compile>
<Compile Include="..\Discord.Net\DiscordClientConfig.cs">
<Link>DiscordClientConfig.cs</Link>
</Compile>

View File

@@ -0,0 +1,84 @@
using Discord.Audio;
using System;
namespace Discord
{
public partial class DiscordClient
{
public IDiscordVoiceClient GetVoiceClient(Server server)
=> GetVoiceClient(server.Id);
public IDiscordVoiceClient GetVoiceClient(string serverId)
{
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (!Config.EnableVoiceMultiserver)
{
if (serverId == _voiceServerId)
return this;
else
return null;
}
DiscordWSClient client;
if (_voiceClients.TryGetValue(serverId, out client))
return client;
else
return null;
}
private async Task<IDiscordVoiceClient> CreateVoiceClient(string serverId)
{
if (!Config.EnableVoiceMultiserver)
{
_voiceServerId = serverId;
return this;
}
var client = _voiceClients.GetOrAdd(serverId, _ =>
{
var config = _config.Clone();
config.LogLevel = _config.LogLevel;// (LogMessageSeverity)Math.Min((int)_config.LogLevel, (int)LogMessageSeverity.Warning);
config.VoiceOnly = true;
config.VoiceClientId = unchecked(++_nextVoiceClientId);
return new DiscordWSClient(config, serverId);
});
client.LogMessage += (s, e) => RaiseOnLog(e.Severity, e.Source, $"(#{client.Config.VoiceClientId}) {e.Message}");
await client.Connect(_gateway, _token).ConfigureAwait(false);
return client;
}
public Task<IDiscordVoiceClient> JoinVoiceServer(Channel channel)
=> JoinVoiceServer(channel?.ServerId, channel?.Id);
public Task<IDiscordVoiceClient> JoinVoiceServer(Server server, string channelId)
=> JoinVoiceServer(server?.Id, channelId);
public async Task<IDiscordVoiceClient> JoinVoiceServer(string serverId, string channelId)
{
CheckReady(); //checkVoice is done inside the voice client
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (channelId == null) throw new ArgumentNullException(nameof(channelId));
var client = await CreateVoiceClient(serverId).ConfigureAwait(false);
await client.JoinChannel(channelId).ConfigureAwait(false);
return client;
}
public Task LeaveVoiceServer(Server server)
=> LeaveVoiceServer(server?.Id);
public async Task LeaveVoiceServer(string serverId)
{
CheckReady(checkVoice: true);
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (Config.EnableVoiceMultiserver)
{
DiscordWSClient client;
if (_voiceClients.TryRemove(serverId, out client))
await client.Disconnect().ConfigureAwait(false);
}
else
{
await _voiceSocket.Disconnect().ConfigureAwait(false);
_dataSocket.SendLeaveVoice(serverId);
}
}
}
}

View File

@@ -1,14 +1,11 @@
using Discord.API;
using Discord.Audio;
using Discord.Collections;
using Discord.Net;
using Discord.Net.WebSockets;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
namespace Discord
@@ -714,82 +711,6 @@ namespace Discord
}
}
public IDiscordVoiceClient GetVoiceClient(Server server)
=> GetVoiceClient(server.Id);
public IDiscordVoiceClient GetVoiceClient(string serverId)
{
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (!Config.EnableVoiceMultiserver)
{
if (serverId == _voiceServerId)
return this;
else
return null;
}
DiscordWSClient client;
if (_voiceClients.TryGetValue(serverId, out client))
return client;
else
return null;
}
private async Task<IDiscordVoiceClient> CreateVoiceClient(string serverId)
{
if (!Config.EnableVoiceMultiserver)
{
_voiceServerId = serverId;
return this;
}
var client = _voiceClients.GetOrAdd(serverId, _ =>
{
var config = _config.Clone();
config.LogLevel = _config.LogLevel;// (LogMessageSeverity)Math.Min((int)_config.LogLevel, (int)LogMessageSeverity.Warning);
config.VoiceOnly = true;
config.VoiceClientId = unchecked(++_nextVoiceClientId);
return new DiscordWSClient(config, serverId);
});
client.LogMessage += (s, e) => RaiseOnLog(e.Severity, e.Source, $"(#{client.Config.VoiceClientId}) {e.Message}");
await client.Connect(_gateway, _token).ConfigureAwait(false);
return client;
}
public Task<IDiscordVoiceClient> JoinVoiceServer(Channel channel)
=> JoinVoiceServer(channel?.ServerId, channel?.Id);
public Task<IDiscordVoiceClient> JoinVoiceServer(Server server, string channelId)
=> JoinVoiceServer(server?.Id, channelId);
public async Task<IDiscordVoiceClient> JoinVoiceServer(string serverId, string channelId)
{
CheckReady(); //checkVoice is done inside the voice client
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (channelId == null) throw new ArgumentNullException(nameof(channelId));
var client = await CreateVoiceClient(serverId).ConfigureAwait(false);
await client.JoinChannel(channelId).ConfigureAwait(false);
return client;
}
public Task LeaveVoiceServer(Server server)
=> LeaveVoiceServer(server?.Id);
public async Task LeaveVoiceServer(string serverId)
{
CheckReady(checkVoice: true);
if (serverId == null) throw new ArgumentNullException(nameof(serverId));
if (Config.EnableVoiceMultiserver)
{
DiscordWSClient client;
if (_voiceClients.TryRemove(serverId, out client))
await client.Disconnect().ConfigureAwait(false);
}
else
{
await _voiceSocket.Disconnect().ConfigureAwait(false);
_dataSocket.SendLeaveVoice(serverId);
}
}
private void SendInitialLog()
{
if (_config.LogLevel >= LogMessageSeverity.Verbose)