Esempio n. 1
0
        public static void Run(TransportFactory factory, string address)
        {
            Console.WriteLine($"Hosting server at {address}");

            using (var transport = factory.Make <Request, Response>())
                using (var serversAccessor = transport.AcceptServers(address, (inMemory, outMemory) => new Service(outMemory).Invoke))
                {
                    serversAccessor.Error += (sender, args) => Console.WriteLine($"IPC: {args.Exception.Message}");

                    serversAccessor.Connected += (sender, args) =>
                                                 Console.WriteLine($"Connected: {args.Component.InputMemory.Name} -> {args.Component.OutputMemory.Name}");

                    serversAccessor.Disconnected += (sender, args) =>
                                                    Console.WriteLine($"Disconnected: {args.Component.InputMemory.Name} -> {args.Component.OutputMemory.Name}");

                    Console.WriteLine("Press Ctrl+C to exit.");

                    using (var exit = new ManualResetEvent(false))
                    {
                        Console.CancelKeyPress += (sender, args) => { args.Cancel = true; exit.Set(); };
                        exit.WaitOne();
                    }

                    Console.WriteLine("Exiting...");

                    foreach (var server in serversAccessor.Servers) // Just to trigger Disconnected events
                    {
                        server.Dispose();
                    }
                }
        }
Esempio n. 2
0
 public Transport(Config config)
     : base(_factory.Make <BufferPool.ConstBuffer, BufferPool.ConstBuffer>(config))
 {
     _config = config;
 }
Esempio n. 3
0
        public static void Run(TransportFactory factory, string address)
        {
            Console.WriteLine("Press Ctrl+C to exit.");
            Console.WriteLine($"Connecting to {address}");

            using (var exit = new ManualResetEvent(false))
                using (var transport = factory.Make <Request, Response>())
                    using (var clientAccessor = transport.ConnectClient(address, true))
                    {
                        Console.CancelKeyPress += (sender, args) => { args.Cancel = true; exit.Set(); };

                        clientAccessor.Error += (sender, args) => Console.WriteLine($"IPC: {args.Exception.Message}");

                        var random = new Random();
                        IClient <Request, Response> client = null;

                        while (!exit.WaitOne(TimeSpan.FromSeconds(1)))
                        {
                            if (client == null)
                            {
                                try
                                {
                                    client = clientAccessor.Client;
                                }
                                catch (System.Exception e)
                                {
                                    Console.WriteLine($"Failed to access the client: {e.Message}");
                                    continue;
                                }

                                var info = $"{client.InputMemory.Name} -> {client.OutputMemory.Name}";

                                Console.WriteLine($"Connected: {info}");

                                client.Closed += (sender, args) => Console.WriteLine($"Disconnected: {info}");
                            }

                            var request = new Request
                            {
                                X  = (float)random.NextDouble(1.0, 99.0),
                                Y  = (float)random.NextDouble(1.0, 99.0),
                                Op = (Operation)random.Next(0, 4)
                            };

                            Response response;

                            var stopwatch = new Stopwatch();
                            stopwatch.Start();

                            try
                            {
                                response = client.InvokeAsync(request).Result;
                            }
                            catch (System.Exception e)
                            {
                                Console.WriteLine($"Failed to send request: {e.Message}");
                                client = null;
                                continue;
                            }

                            stopwatch.Stop();

                            Console.WriteLine($"{response.Text}{response.Z} [{(stopwatch.ElapsedTicks * 1000000.0) / Stopwatch.Frequency}us]");
                        }

                        Console.WriteLine("Exiting...");

                        client?.Dispose();
                    }
        }