Esempio n. 1
0
 /// <summary>
 /// Stops listening for client connections
 /// </summary>
 public void Stop()
 {
     _mreIsListening?.Dispose();
     _mreIsListening = null;
     _host?.Stop();
     _host = null;
 }
Esempio n. 2
0
        /// <summary>
        /// Starts listening for client connections on the specified network interface and port
        /// </summary>
        /// <param name="ipAddress">The IP address on which to bind and listen for clients</param>
        /// <param name="port">The port on which to listen.  Must be a positive value.</param>
        public void Start(IPAddress ipAddress, int port)
        {
            if (port <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(port));
            }
            Stop();
            _mreIsListening           = new ManualResetEventSlim(false);
            _host                     = new SecureServer <SecureClient <Message> >();
            _host.IsListeningChanged += (isListening) => { IsListeningChanged?.Invoke(isListening); _mreIsListening?.Set(); };
            _host.ClientConnected    += (client) =>
            {
                client.Socket.UseCompression = _useCompression;
                //Log.i("Client Connected: {0}", client.Name);
                client.Disconnected += (c, remoteEndPoint, exception) =>
                {
                    //var name = (c as GenericClient<Message>)?.Socket.Name ?? "Unknown";
                    Log.i($"Client Disconnected: {remoteEndPoint.ToString()}");
                };
                client.MessageReceived += (c, message) =>
                {
                    try
                    {
                        //call the appropriate RPC method
                        OnMessageReceived(ref message);
                        try
                        {
                            //Put this in a task to multi-thread the encryption and compression
                            //Task.Run(() =>
                            //{
                            //send the result back to the client

                            //c.SerializationSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                            //c.SerializationSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None;
                            //c.Send(message);

                            c.Send(message);
                            //c.As<XClientSecure<Message>>()?.Send(message);

                            //});
                        }
                        catch (Exception e)
                        {
                            Log.e(e);
                        }
                    }
                    catch (Exception e)
                    {
                        Log.e(e);
                    }
                };
            };
            _host.Start(ipAddress, port);
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            CancellationTokenSource cts = new CancellationTokenSource();

            var serviceProvider = new ServiceCollection().AddLogging(opt => opt.AddConsole())
                                  .BuildServiceProvider();
            ILoggerFactory factory = serviceProvider.GetService <ILoggerFactory>();

            Console.WriteLine("1 -> Client");
            Console.WriteLine("2 -> Server");
            int choice = int.Parse(Console.ReadLine());

            switch (choice)
            {
            case 1:
                X509Certificate2Collection clientCollection = new X509Certificate2Collection();
                clientCollection.Import("ClientCertificate.pfx", "password", X509KeyStorageFlags.PersistKeySet);

                client = SimpleNetworking.Builder.Builder.SecureClient
                         .WithLogger(factory)
                         .WithCancellationToken(cts.Token)
                         .Build(ServerCertificateValidationCallback, clientCollection);

                client.OnPacketReceived         += Client_OnPacketReceived;
                client.OnPeerDeviceDisconnected += Client_OnPeerDeviceDisconnected;
                client.OnPeerDeviceReconnected  += Client_OnPeerDeviceReconnected;
                string ip = Console.ReadLine();
                client.Connect(ip, 9000).Wait();
                Console.WriteLine("Connect success");
                Task.Run(async() => await SendNumbers());
                break;

            case 2:
                X509Certificate2Collection serverCollection = new X509Certificate2Collection();
                serverCollection.Import("ServerCertificate.pfx", "password", X509KeyStorageFlags.PersistKeySet);

                SecureServer server = SimpleNetworking.Builder.Builder.SecureServer
                                      .WithLogger(factory)
                                      .WithCancellationToken(cts.Token)
                                      .Build(serverCollection[0], true, ClientCertificateValidationCallback);

                server.OnClientConnected += Server_OnClientConnected;
                server.StartListening(IPAddress.Any, 9000);
                Console.WriteLine("Server started");
                break;
            }

            Console.ReadKey();
            cts.Cancel();
            Console.ReadKey();
        }
Esempio n. 4
0
 public void Dispose()
 {
     SecureServer.Dispose();
     UnsecureServer.Dispose();
 }