Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var serverCertificate           = BuildSelfSignedServerCertificate("localhost");
            var clientCertificate           = BuildSelfSignedClientCertificate("localClient");
            var clientCertificateCollection = new X509CertificateCollection(new X509Certificate[] { clientCertificate });

            Guid client1Id = Guid.NewGuid();
            Guid client2Id = Guid.NewGuid();

            clientNames.Add(client1Id, "Client1");
            clientNames.Add(client2Id, "Client2");

            var         servicePort = new IPEndPoint(IPAddress.Loopback, 60001);
            TcpListener server      = new TcpListener(servicePort);

            server.Start();
            var acceptConnecting = server.AcceptTcpClientAsync();

            using (TcpClient tcpClient2 = new TcpClient("localhost", 60001))
                using (TcpClient tcpClient1 = acceptConnecting.Result)
                    using (SslStream stream2 = new SslStream(tcpClient2.GetStream(), false, CertificateValidation))
                        using (SslStream stream1 = new SslStream(tcpClient1.GetStream(), false, CertificateValidation))
                        {
                            var serverAuth = stream1.AuthenticateAsServerAsync(serverCertificate);
                            stream2.AuthenticateAsClient("localhost", clientCertificateCollection, false);
                            serverAuth.Wait();

                            server.Stop();

                            RemoteHubOverStream <string> client1 = new RemoteHubOverStream <string>(client1Id, stream1, stream1, Received);
                            RemoteHubOverStream <string> client2 = new RemoteHubOverStream <string>(client2Id, stream2, stream2, Received);

                            client1.Start();
                            client2.Start();

                            Guid virtualHostId = Guid.NewGuid();
                            client1.ApplyVirtualHosts(new KeyValuePair <Guid, VirtualHostSetting>(virtualHostId, new VirtualHostSetting(0, 2)));
                            client2.ApplyVirtualHosts(new KeyValuePair <Guid, VirtualHostSetting>(virtualHostId, new VirtualHostSetting(0, 1)));


                            bool shouldContinue = true;
                            while (shouldContinue)
                            {
                                Console.WriteLine(@"Press:
1: Send from client 1 to client 1
2: Send from client 1 to client 2
3: Send from client 2 to client 1
4: Send from client 2 to client 2
0: Send from client 1 to virtual host (1:67%/2:34%)
Other: Shutdown.");

                                var key = Console.ReadKey(true);
                                switch (key.Key)
                                {
                                case ConsoleKey.D1:
                                    client1.SendMessage(client1Id, "From 1 to 1");
                                    break;

                                case ConsoleKey.D2:
                                    client1.SendMessage(client2Id, "From 1 to 2");
                                    break;

                                case ConsoleKey.D3:
                                    client2.SendMessage(client1Id, "From 2 to 1");
                                    break;

                                case ConsoleKey.D4:
                                    client2.SendMessage(client2Id, "From 2 to 2");
                                    break;

                                case ConsoleKey.D0:
                                    if (client1.TryResolveVirtualHost(virtualHostId, out var hostId))
                                    {
                                        client1.SendMessage(hostId, "From 1 to virtual host (1:67%/2:34%)");
                                    }
                                    break;

                                default:
                                    shouldContinue = false;
                                    break;
                                }
                            }

                            client1.Stop();
                            client2.Stop();

                            Console.WriteLine("Done. Press any key to quit...");
                            Console.ReadKey(true);
                        }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            //Init
            Console.Write("Enter your name and press enter <Empty = Exit>: ");
            var name = Console.ReadLine();

            if (string.IsNullOrWhiteSpace(name))
            {
                return;
            }

            //Stream
            TcpClient tcpClient = new TcpClient();

            tcpClient.Connect(serverIP, serverPort);

            var clientCertificate           = BuildSelfSignedClientCertificate("localClient");
            var clientCertificateCollection = new X509CertificateCollection(new X509Certificate[] { clientCertificate });

            SslStream stream1 = new SslStream(tcpClient.GetStream(), false,
                                              (sender, certificate, chain, sslPolicyErrors) => true /*always return true in certificate test in this demo*/);

            stream1.AuthenticateAsClient(serverIP.ToString(), clientCertificateCollection, false);

            //Remote Hub
            var siteId = Guid.NewGuid();

            remoteHub = new RemoteHubOverStream <string>(siteId, stream1, stream1, OnMessageReceivedFromHub);

            //Remote Agency
            remoteAgency = new RemoteAgencyManagerEncapsulated(true, false, siteId);
            remoteAgency.MessageForSendingPrepared += OnMessageForSendingPrepared;
            remoteAgency.DefaultTargetSiteId        = ServerId.SiteId;
            var chatServer = remoteAgency.AddProxy <IChatServer>(ServerId.ServiceId, out var instanceId);

            remoteHub.Start();
            remoteAgency.Connect();

            chatServer.MessageReceived += ChatServer_MessageReceived;

            Console.WriteLine("Started. Please chat and press enter. Empty = Exit.");

            while (true)
            {
                var text = Console.ReadLine();
                if (string.IsNullOrWhiteSpace(text))
                {
                    break;
                }
                chatServer.SendMessage(name, text);
            }

            ((IDisposable)chatServer).Dispose();

            remoteAgency.Disconnect(false);
            remoteHub.Stop();
            remoteAgency.Dispose();
            remoteHub.Dispose();
            stream1.Close();
            stream1.Dispose();
            tcpClient.Close();
            tcpClient.Dispose();
        }