public AudioClient(DiscordClient client, Server server, int id) { Id = id; _config = client.Config; Service = client.Services.Get<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 if (Config.EnableMultiserver) { ClientAPI = new JsonRestClient(_config, DiscordConfig.ClientAPIUrl, client.Log.CreateLogger($"ClientAPI #{id}")); GatewaySocket = new GatewaySocket(_config, client.Serializer, client.Log.CreateLogger($"Gateway #{id}")); GatewaySocket.Connected += (s, e) => { if (_gatewayState == ConnectionState.Connecting) EndGatewayConnect(); }; } else GatewaySocket = client.GatewaySocket; GatewaySocket.ReceivedDispatch += (s, e) => OnReceivedEvent(e); VoiceSocket = new VoiceSocket(_config, Config, client.Serializer, client.Log.CreateLogger($"Voice #{id}")); VoiceSocket.Server = server; OutputStream = new OutStream(this); }
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 void TaskManager_WithCancellation_Test() { // create manager and add tasks var manager = new TaskManager(); manager.Changed += (s, e) => ReportAction(e); manager.Add("task1", ct => Thread.Sleep(500), 100); manager.Add("task2", ct => Thread.Sleep(500), 50); // stagger start tasks manager.Start("task1"); // schedule a cancellation in 2.5 to 5 seconds var cancelTask = Task.Factory.StartNew(() => { var random = new Random(); Thread.Sleep(random.Next(2500, 5000)); manager.Cancel(); }); Thread.Sleep(2000); manager.Start("task2"); Thread.Sleep(3000); // stop tasks manager.Stop(); // wait for completion (only in unit tests) manager.Wait(); // wait for completion of cancellation task cancelTask.Wait(); }
internal WS4NetEngine(DiscordConfig config, TaskManager taskManager) { _config = config; _taskManager = taskManager; _sendQueue = new ConcurrentQueue<string>(); _waitUntilConnect = new ManualResetEventSlim(); _waitUntilDisconnect = new ManualResetEventSlim(true); }
public NewSceneProcessor(ComponentWrapperListBuilder componentWrapperListBuilder, TaskManager taskManager, ComponentWrapperList wrappedComponents) { this.componentWrapperListBuilder = componentWrapperListBuilder; this.taskManager = taskManager; this.wrappedComponents = wrappedComponents; currentScene = new amBXScene { SceneType = eSceneType.Composite }; }
public MandelbrotServer() { TileWidth = size; TileHeight = size; MinLevel = 0; MaxLevel = 31; ServerName = "Mandelbrot"; // todo number of processors being used is a problem - too small is slow, too big blocks all other threads, including rendering thread, so // application stops to respond. TaskManagerPolicy policy = new TaskManagerPolicy(1, Environment.ProcessorCount, 1, 0, System.Threading.ThreadPriority.Lowest); manager = new TaskManager(policy); }
public void TaskManager_Test() { // create manager and add tasks var manager = new TaskManager(); manager.Changed += (s, e) => ReportAction(e); manager.Add("task1", ct => Thread.Sleep(500), 100); manager.Add("task2", ct => Thread.Sleep(500), 50); // stagger start tasks manager.Start("task1"); Thread.Sleep(2000); manager.Start("task2"); Thread.Sleep(3000); // stop tasks manager.Stop(); // wait for completion (only in unit tests) manager.Wait(); }
public AudioClient(DiscordClient client, Server server, int id) { 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}")); VoiceSocket.Server = server; OutputStream = new OutStream(this); }
private void TestBatchPrint(List<LabelFormatDocument> allBarcodeLabels) { // Initialize a new TaskManager object. using (TaskManager btTaskManager = new TaskManager()) { // Start a task engine. btTaskManager.Start(1); // Create a group task. GroupTask groupTask = new GroupTask(); List<BarcodeEntity> barcode = BusinessLogic.GetBarcodeDetails(txtQuoteNumber.Text); if (barcode == null) { Helper.ShowErrorMessageBox("No data found for printing barcode!"); return; } foreach (LabelFormatDocument currentLabel in allBarcodeLabels) { groupTask.Add(new PrintLabelFormatTask(currentLabel)); } // Add two printing tasks to the group task. //groupTask.Add(new PrintLabelFormatTask(@"C:\Format2.btw")); // Execute the tasks asynchronously for performance. btTaskManager.TaskQueue.QueueTask(groupTask); // Stop the task engine. // Ten second timeout gives tasks time to finish. btTaskManager.Stop(10000, true); } }