protected override async Task ExecuteAsync(CancellationToken stoppingToken) { // On Plugin Connect Event _messageProcessor.OnConnectEventHandler += () => { _logger.LogInformation($"{DateTime.Now} Plugin Connected to TouchPortal"); _messageProcessor.CreateState(new StateCreate { Id = "CreatedStateId", Desc = "State Description", DefaultValue = "default value" }); }; // On Action Event _messageProcessor.OnActionEvent += (actionId, dataList) => { _logger.LogInformation($"{DateTime.Now} Action Event Fired."); foreach (var o in dataList) { _logger.LogInformation($"Id: {o.Id} Value: {o.Value}"); } }; // On List Change Event _messageProcessor.OnListChangeEventHandler += (actionId, listId, instanceId, value) => { _logger.LogInformation($"{DateTime.Now} Choice Event Fired."); }; // On Plugin Disconnect _messageProcessor.OnCloseEventHandler += () => { _logger.LogInformation($"{DateTime.Now} Plugin Quit Command"); _messageProcessor.RemoveState(new StateRemove { Id = "CreatedStateId" }); }; // Send State Update _messageProcessor.UpdateState(new StateUpdate { Id = "SomeStateId", Value = "New Value" }); // Run Listen and pairing _ = Task.WhenAll(new Task[] { _messageProcessor.Listen(), _messageProcessor.TryPairAsync() }); // Do whatever you want in here while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken).ConfigureAwait(false); } }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var stopRequested = false; #if !SKIP_WS // SetUp Server for GoXLR: _server.ClientConnected += async(sender, args) => { //When GoXLR is connected, ask for Profiles. Logger.Error("Client connected: " + args.IpPort); _logger.LogInformation("Client connected: " + args.IpPort); try { //var model = GetProfilesRequest.Create(); //var json = System.Text.Json.JsonSerializer.Serialize(model); //_logger.LogInformation(json); //await _server.SendAsync(args.IpPort, json, stoppingToken); } catch (Exception e) { Logger.Error($"{e}"); _logger.LogError(e.ToString()); } }; _server.ClientDisconnected += (sender, args) => { Logger.Error("Client disconnected: " + args.IpPort); }; _server.MessageReceived += (sender, args) => { try { var json = Encoding.UTF8.GetString(args.Data); Logger.Error("Message received from " + args.IpPort + ": " + json); _logger.LogInformation("Message received from " + args.IpPort); //var response = JsonSerializer.Deserialize<GetProfilesResponse>(json); _messageProcessor.UpdateChoice(new ChoiceUpdate { Id = PluginActionType.DiscordSelfMute.ToString().ToSnakeCase(), //Value = response?.Payload.Profiles ?? new[] { "No profiles!" } Value = new[] { "No profiles!" } }); } catch (Exception e) { Logger.Error($"{e}"); _logger.LogError(e.ToString()); } }; _server.Start(); #endif //Setup Client for TouchPortal: // On Plugin Connect Event _messageProcessor.OnConnectEventHandler += () => { Logger.Error($"Plugin Connected to TouchPortal"); }; // On Action Event _messageProcessor.OnActionEvent += async(actionId, dataList) => { Logger.Error($"Action Event Fired: {actionId}"); #if !SKIP_WS try { var clients = _server.ListClients(); var client = clients.SingleOrDefault(); if (client != null) { Logger.Error($"Discord.Plugin Client found: {client}"); Enum.TryParse(typeof(PluginActionType), actionId, out object?output); PluginActionType?actionType = output as PluginActionType?; switch (actionType) { case PluginActionType.DiscordSelfMute: case PluginActionType.DiscordSelfDeafen: { var profile = dataList.Single().Value; //await _server.SendAsync(client, json, stoppingToken); break; } } } else { Logger.Error("No Discord Clients connected. Restart the Discord App"); } } catch (Exception e) { Logger.Error($"{e}"); } #endif foreach (var actionData in dataList) { Logger.Error($"Id: {actionData.Id} Value: {actionData.Value}"); } }; // On List Change Event _messageProcessor.OnListChangeEventHandler += (actionId, value) => { Logger.Error($"Choice Event Fired."); }; // On Plugin Disconnect _messageProcessor.OnCloseEventHandler += () => { Console.Write($"Plugin Quit Command"); stopRequested = true; }; // Send State Update _messageProcessor.UpdateState(new StateUpdate { Id = "SomeStateId", Value = "New Value" }); // Send Choice Update _messageProcessor.UpdateChoice(new ChoiceUpdate { Id = PluginActionType.DiscordSelfMute.ToString().ToSnakeCase(), Value = new[] { "No Value" } }); // Run Listen and pairing _ = Task.WhenAll(new Task[] { _messageProcessor.Listen(), _messageProcessor.TryPairAsync() }); try { // Do whatever you want in here while (!stoppingToken.IsCancellationRequested && !stopRequested) { //_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } finally { _hostApplicationLifetime.StopApplication(); } }