/// <summary> /// Perform the basic initialization workflow /// </summary> /// <returns></returns> private async Task InitializeClient() { // Request initialization var deferred = new RelayDeferredTransaction(_options.transactionTimeout); var deferredTask = _transactionManager.WaitFor(deferred); await _eventStream.Send(new InitializeClient() { transaction_id = deferred.TransactionId, metadata = _options.metadata }); // Wait for response try { await deferredTask; } catch (Exception error) { _eventHandler.OnError(new RelayException(RelayErrorCode.InitializationFailed, error)); return; } // Try to join a session deferred = new RelayDeferredTransaction(_options.transactionTimeout); deferredTask = _transactionManager.WaitFor(deferred); await _eventStream.Send(new Join() { transaction_id = deferred.TransactionId, session_id = _options.sessionId }); // Wait for response try { await deferredTask; } catch (Exception error) { _eventHandler.OnError(new RelayException(RelayErrorCode.InitializationFailed, error)); return; } // Finally, we're connected _eventHandler.OnConnected(); }
/// <summary> /// Send a message to the master /// </summary> public async Task Send <T>(T data) { if (_eventStream == null) { throw new Exception("Not connected"); } // Send var output = _serializer.Serialize(data); var deferred = new RelayDeferredTransaction(_options.transactionTimeout); var deferredTask = _transactionManager.WaitFor(deferred); await _eventStream.Send(new MessageFromClient() { transaction_id = deferred.TransactionId, data = output }); // Wait for confirmation await deferredTask; }
/// <summary> /// Perform the basic initialization workflow /// </summary> /// <returns></returns> private async Task InitializeMaster() { // Request initialization var deferred = new RelayDeferredTransaction(_options.transactionTimeout); var deferredTask = _transactionManager.WaitFor(deferred); await _eventStream.Send(new InitializeMaster() { transaction_id = deferred.TransactionId, metadata = _options.metadata }); // Wait for response try { await deferredTask; } catch (Exception error) { _eventHandler.OnError(new RelayException(RelayErrorCode.InitializationFailed, error)); } }