コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: WebSocket.cs プロジェクト: mcmonkey4eva/Discord.Net
        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();
        }
コード例 #3
0
ファイル: WebSocket.cs プロジェクト: MarlboroTX/Discord.Net
		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(); 
		}
コード例 #4
0
		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();
			};
		}
コード例 #5
0
        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();
            };
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: WebSocket.cs プロジェクト: Goobles/Discord.Net
		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);
			};
        }