public AudioClient(DiscordClient client, Server server, int id #if WINDOWS_UWP , IWebSocketEngine customSocket = null #endif ) { Id = id; Service = client.GetService <AudioService>(); Config = Service.Config; Serializer = client.Serializer; _gatewayState = (int)ConnectionState.Disconnected; //Logging Logger = client.Log.CreateLogger($"AudioClient #{id}"); //Async _taskManager = new TaskManager(Cleanup, false); _connectionLock = new AsyncLock(); CancelToken = new CancellationToken(true); //Networking _config = client.Config; GatewaySocket = client.GatewaySocket; GatewaySocket.ReceivedDispatch += (s, e) => OnReceivedEvent(e); VoiceSocket = new VoiceSocket(_config, Config, client.Serializer, client.Log.CreateLogger($"Voice #{id}") #if WINDOWS_UWP , customSocket #endif ); VoiceSocket.Server = server; OutputStream = new OutStream(this); }
public WebSocket(DiscordConfig config, JsonSerializer serializer, Logger logger) { _config = config; _serializer = serializer; Logger = logger; _lock = new AsyncLock(); _taskManager = new TaskManager(Cleanup); CancelToken = new CancellationToken(false); _connectedEvent = new ManualResetEventSlim(false); #if !NETSTANDARD1_3 _engine = new WS4NetEngine(config, _taskManager); #else _engine = new BuiltInEngine(config); #endif _engine.BinaryMessage += (s, e) => { using (var compressed = new MemoryStream(e.Data, 2, e.Data.Length - 2)) using (var decompressed = new MemoryStream()) { using (var zlib = new DeflateStream(compressed, CompressionMode.Decompress)) zlib.CopyTo(decompressed); decompressed.Position = 0; using (var reader = new StreamReader(decompressed)) ProcessMessage(reader.ReadToEnd()).GetAwaiter().GetResult(); } }; _engine.TextMessage += (s, e) => ProcessMessage(e.Message).Wait(); }
public WebSocket(DiscordClient client, JsonSerializer serializer, Logger logger) { _client = client; Logger = logger; _serializer = serializer; _lock = new AsyncLock(); _taskManager = new TaskManager(Cleanup); CancelToken = new CancellationToken(true); _connectedEvent = new ManualResetEventSlim(false); #if !DOTNET5_4 _engine = new WS4NetEngine(client.Config, _taskManager); #else _engine = new BuiltInEngine(client.Config); #endif _engine.BinaryMessage += (s, e) => { using (var compressed = new MemoryStream(e.Data, 2, e.Data.Length - 2)) using (var decompressed = new MemoryStream()) { using (var zlib = new DeflateStream(compressed, CompressionMode.Decompress)) zlib.CopyTo(decompressed); decompressed.Position = 0; using (var reader = new StreamReader(decompressed)) ProcessMessage(reader.ReadToEnd()).GetAwaiter().GetResult(); } }; _engine.TextMessage += (s, e) => ProcessMessage(e.Message).Wait(); }
public WebSocket(DiscordWSClient client) { _client = client; _logLevel = client.Config.LogLevel; _loginTimeout = client.Config.ConnectionTimeout; _cancelToken = new CancellationToken(true); _connectedEvent = new ManualResetEventSlim(false); _engine = new WebSocketSharpEngine(this, client.Config); _engine.BinaryMessage += (s, e) => { using (var compressed = new MemoryStream(e.Data, 2, e.Data.Length - 2)) using (var decompressed = new MemoryStream()) { using (var zlib = new DeflateStream(compressed, CompressionMode.Decompress)) zlib.CopyTo(decompressed); decompressed.Position = 0; using (var reader = new StreamReader(decompressed)) ProcessMessage(reader.ReadToEnd()).Wait(); } }; _engine.TextMessage += (s, e) => { /*await*/ ProcessMessage(e.Message).Wait(); }; }
internal VoiceSocket(DiscordConfig config, AudioServiceConfig audioConfig, JsonSerializer serializer, Logger logger #if WINDOWS_UWP , IWebSocketEngine customSocket #endif ) : base(config, serializer, logger #if WINDOWS_UWP , customSocket #endif ) { _audioConfig = audioConfig; _decoders = new ConcurrentDictionary <uint, OpusDecoder>(); _targetAudioBufferLength = _audioConfig.BufferLength / 20; //20 ms frames _encodingBuffer = new byte[MaxOpusSize]; _ssrcMapping = new ConcurrentDictionary <uint, ulong>(); _encoder = new OpusEncoder(48000, _audioConfig.Channels, 20, _audioConfig.Bitrate, OpusApplication.MusicOrMixed); _sendBuffer = new VoiceBuffer((int)Math.Ceiling(_audioConfig.BufferLength / (double)_encoder.FrameLength), _encoder.FrameSize); }
public WebSocket(DiscordSimpleClient client) { _client = client; _logLevel = client.Config.LogLevel; _loginTimeout = client.Config.ConnectionTimeout; _cancelToken = new CancellationToken(true); _connectedEvent = new ManualResetEventSlim(false); #if DNXCORE50 _engine = new BuiltInWebSocketEngine(client.Config.WebSocketInterval); #else _engine = new WSSharpWebSocketEngine(this, client.Config.UserAgent, client.Config.WebSocketInterval); #endif _engine.ProcessMessage += async (s, e) => { if (_logLevel >= LogMessageSeverity.Debug) RaiseOnLog(LogMessageSeverity.Debug, $"In: " + e.Message); await ProcessMessage(e.Message); }; }