// ReSharper disable once ParameterHidesMember public async Task Run(CancellationToken cancellationToken) { this.cancellationToken = cancellationToken; var connectInfo = new StreamDeckConnectInfo { Port = port, PluginUUID = pluginUUID, RegisterEvent = registerEvent, Info = info }; logger.Connecting(connectInfo); socket = new ClientWebSocket(); var uri = new Uri($"ws://localhost:{port}"); try { await socket.ConnectAsync(uri, cancellationToken); logger.ConnectSuccess(connectInfo); await SendMessage(new StreamDeckRegisterMessage { Event = registerEvent, UUID = pluginUUID }); } catch (Exception e) { logger.ConnectFailed(connectInfo, e); } while (!cancellationToken.IsCancellationRequested) { try { var rawMessage = await ReceiveMessage(); if (rawMessage == null) { continue; } logger.MessageReceived(rawMessage); var message = ParseMessage(rawMessage); if (message == null) { continue; } DispatchMessage(message, rawMessage); } catch (Exception) { // TODO log error while handling message } } }
/// <inheritdoc /> public void ConnectSuccess(StreamDeckConnectInfo info) { Log("Connected succesfully"); }
/// <inheritdoc /> public void ConnectFailed(StreamDeckConnectInfo info, Exception exception) { Log($"Failed to connect: {exception.Message}"); }
/// <inheritdoc /> public void Connecting(StreamDeckConnectInfo info) { Log($"Connecting to ws://localhost:{info.Port}"); }
/// <inheritdoc /> public void ConnectSuccess(StreamDeckConnectInfo info) { }
/// <inheritdoc /> public void ConnectFailed(StreamDeckConnectInfo info, Exception exception) { }
/// <inheritdoc /> public void Connecting(StreamDeckConnectInfo info) { }