Example #1
0
        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}");
            }
        }
Example #2
0
        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;
            }
        }