/// <summary> /// Connect this to the remote relay service. /// </summary> public async Task Connect(string remote, RelayClientOptions options) { _eventStream = new RelayEventStream(OnRelayEvent); _options = options; var authToken = _auth.GenerateAuthToken(_options.auth); await _eventStream.Connect(remote, authToken, options); }
/// <summary> /// Handling incoming remote events /// </summary> private async Task OnRelayEvent(RelayEvent relayEvent, RelayEventStream eventStream) { switch (relayEvent.EventType) { case RelayEventType.Connected: await InitializeClient(); break; case RelayEventType.Disconnected: _eventHandler.OnDisconnected(); break; case RelayEventType.IncomingEvent: DispatchEvent(relayEvent.IncomingEvent); break; case RelayEventType.Error: _eventHandler.OnError(relayEvent.Error); break; default: throw new ArgumentOutOfRangeException(); } }
/// <summary> /// Disconnect from the remote service /// </summary> /// <returns></returns> public async Task Disconnect() { if (_eventStream == null) { return; } var events = _eventStream; _eventStream = null; await events.Disconnect(); }