예제 #1
0
        private static async Task ReadAsync(IAsyncDvcChannel dvc)
        {
            while (true)
            {
                var packet = await dvc.ReadMessageAsync();

                Console.WriteLine("> " + Encoding.UTF8.GetString(packet));
            }
        }
예제 #2
0
        private static async void HandleTest1(IAsyncDvcChannel obj)
        {
            await obj.SendMessageAsync(Encoding.UTF8.GetBytes("Connected"));

            while (true)
            {
                var text = Encoding.UTF8.GetString(await obj.ReadMessageAsync());
                Console.WriteLine($"{obj.GetHashCode():x8}\tReceived {text}");
                await obj.SendMessageAsync(Encoding.UTF8.GetBytes(text));
            }
        }
예제 #3
0
        // Called from DVC API
        public async void AcceptConnection(IAsyncDvcChannel channel)
        {
            ServiceRegistration existingRegistration;

            try
            {
                var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));

                // Read service name
                var serviceNameUtf8 = await channel.ReadMessageAsync(cts.Token).ConfigureAwait(false);

                var serviceName = Encoding.UTF8.GetString(serviceNameUtf8);

                // Lookup service
                lock (syncRegisteredServices)
                {
                    if (!RegisteredServices.TryGetValue(serviceName, out existingRegistration))
                    {
                        throw new ChannelNotAvailableException($"Service '{serviceName}' not registered");
                    }
                }

                // Accept
                await channel.SendMessageAsync(Encoding.UTF8.GetBytes("ACCEPTED")).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "Exception trying to accept a new brokered connection");

                try
                {
                    await channel.SendMessageAsync(Encoding.UTF8.GetBytes("ERROR Service not registered")).ConfigureAwait(false);

                    channel.Dispose();
                }
                catch (OperationCanceledException) { /* no-op */ }
                catch (ObjectDisposedException) { /* no-op */ }
                catch (DvcChannelDisconnectedException) { /* no-op */ }
                catch (Exception ex2)
                {
                    Logger.Error(ex2, "Could not notify RDS endpoint of failed conncetion attempt");
                }
                return;
            }

            if (!existingRegistration.TryAcceptConnection(channel))
            {
                KillRegistration(existingRegistration);
            }
        }
        private async Task <Message> ReceiveAsync(TimeSpan timeout)
        {
            try
            {
                var ct           = GetCancellationTokenForTimeout(timeout);
                var encodedBytes = TakeOwnership(await channel.ReadMessageAsync(ct));
                return(DecodeMessage(encodedBytes));
            }
            catch (ObjectDisposedException) { /* no-op */ }
            catch (OperationCanceledException) { /* no-op */ }
            catch (DvcChannelDisconnectedException) { /* no-op */ }
            catch (SocketException socketException)
            {
                throw ConvertSocketException(socketException, "Receive");
            }

            // ODE, Cancellation, Disconnection -> end of stream
            return(null);
        }
 private async void ReadAsync(IAsyncDvcChannel obj)
 {
     try
     {
         while (true)
         {
             listBox.Items.Add(Encoding.UTF8.GetString(await obj.ReadMessageAsync()));
         }
     }
     catch (TaskCanceledException)
     {
         listBox.Items.Add("Ending read due to cancelled");
     }
     catch (ObjectDisposedException)
     {
         listBox.Items.Add("Ending read due to ODE");
     }
     catch (DvcChannelDisconnectedException)
     {
         listBox.Items.Add("Ending read due to disconnected");
     }
 }
예제 #6
0
 private static async void ReceiveAsync(IAsyncDvcChannel obj)
 {
     while (true)
     {
         Console.WriteLine($"{obj.GetHashCode():x8}\t > " + Encoding.UTF8.GetString(await obj.ReadMessageAsync()));
     }
 }