static async Task Main(string[] args) { var dvc = DvcServerChannel.Open("ESBR"); //"ECHO"); var resp = ReadAsync(dvc); while (true) { var cb = Encoding.UTF8.GetBytes(Console.ReadLine()); if (cb.Length == 0) { break; } await dvc.SendMessageAsync(cb, 0, cb.Length); } Console.WriteLine("Shutting down."); dvc.Dispose(); try { await resp; } catch (ObjectDisposedException) { // no-op } catch (Exception ex) { Console.WriteLine($"Exception on read thread: {ex}"); } }
public static async Task <IAsyncDvcChannel> ConnectAsync(string serviceName, CancellationToken ct) { if (string.IsNullOrWhiteSpace(serviceName)) { throw new ArgumentNullException(nameof(serviceName)); } var channel = await Task.Run(() => DvcServerChannel.Open(BrokerConstants.BrokerChannelName)).ConfigureAwait(false); try { var utf8ServiceName = Encoding.UTF8.GetBytes(serviceName); await channel.SendMessageAsync(utf8ServiceName, 0, utf8ServiceName.Length).ConfigureAwait(false); var brokerResponseUtf8 = await channel.ReadMessageAsync(ct).ConfigureAwait(false); var brokerResponse = Encoding.UTF8.GetString(brokerResponseUtf8); if (brokerResponse != BrokerConstants.AcceptedMessage) { throw new ChannelNotAvailableException($"Broker refused connection: {brokerResponse}"); } return(channel); } catch { channel.Dispose(); throw; } }