/// <summary> /// Connect to server. Return <c>false</c> if subscribe fails /// </summary> /// <returns></returns> public async Task <bool> SubscribeAsync() { if (_call == null) { _ = Task.Run(StartReceivingEvents); } var request = new SubscribeRequest { StartStop = true, AccountName = AccountName }; _logControl.LogMessage($"{_clientName} is subscribing to event {request.AccountName}"); while (_call == null) { await Task.Delay(10).ConfigureAwait(false); } try { await _call.RequestStream.WriteAsync(request); } catch (RpcException ex) { _logControl.LogMessage($"{ex.Message}\nRemember to use the StartServer button on FormServer"); _call = null; _removeSubscription(AccountName); return(false); } return(true); }
private async void AccountOnSampleEvent(object sender, SampleEventArgs e) { try { _logControl.LogMessage($"Sending {e} to requester={_sampleEventKey}"); var args = e.ToSampleEventArgsMessage(); await _responseStream.WriteAsync(args); } catch (Exception ex) { // Eo graceful recovery when client has disappeared _logControl.LogMessage($"Exception: {ex.Message}"); _removeAction(_sampleEventKey); Dispose(); } }
public override async Task Subscribe(IAsyncStreamReader <SubscribeRequest> requestStream, IServerStreamWriter <SampleEventArgsMessage> responseStream, ServerCallContext context) { var requesterHeader = context.RequestHeaders.FirstOrDefault(x => x.Key == Constants.Requester.ToLower()); // Must be lower case. Ugh! var peer = context.Peer; var requester = requesterHeader == null ? $"Anonymous@{peer}" : $"{requesterHeader.Value}@{peer}"; while (await requestStream.MoveNext()) { var request = requestStream.Current; var key = new SampleEventKey(request.AccountName, requester); if (request.StartStop) { var writer = new AccountSampleEventWriter(key, responseStream, _logControl, RemoveWriter); _eventWriters.TryAdd(key, writer); OnAccountNameAdded(request.AccountName); _logControl.LogMessage($"Added subscription to SampleEvents for {AccountNameAdded}"); } else { RemoveWriter(key); return; } } }