예제 #1
0
        static void Main(string[] args)
        {
            SenderClient   senderClient   = new SenderClient();
            ReceiverClient receiverClient = new ReceiverClient();

            try
            {
                _rsaWithCspKey.AssignNeyCspKey();

                var publicKey  = _rsaWithCspKey.CryptoServiceProvider.ExportParameters(false);
                var privateKey = _rsaWithCspKey.CryptoServiceProvider.ExportParameters(true);

                senderClient.PublicKey = publicKey;

                receiverClient.PublicKey   = publicKey;
                receiverClient.PrivateData = privateKey;

                SenderClientData(senderClient as SenderClient);
                ReceiverClientData(receiverClient as ReceiverClient);
            }
            finally
            {
                _rsaWithCspKey.DeleteKeyFromCsp();
            }
        }
        public void ChannelLifecycleHttpClient()
        {
            new FileInfo(".test.2.conf").Delete();

            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri("http://localhost:5000/");


            ConfigManager config = new ConfigManager(".test.2.conf");

            SenderClient   sender   = new SenderClient(config, config.Config.Peers[0].ChannelID, httpClient.BaseAddress.ToString(), httpClient);
            ReceiverClient receiver = new ReceiverClient(config, config.Config.Peers[0].ChannelID, httpClient.BaseAddress.ToString(), httpClient);

            sender.CheckIfAvailable();
            Assert.False(sender.IsAvailable);

            receiver.Connect();

            sender.CheckIfAvailable();
            Assert.True(sender.IsAvailable);

            receiver.Disconnect();

            sender.CheckIfAvailable();
            Assert.False(sender.IsAvailable);

            new FileInfo(".test.2.conf").Delete();
        }
예제 #3
0
        static void ReceiverInitWorkaround(string config)
        {
            string msg = Guid.NewGuid().ToString();

            Console.WriteLine("Bug workaround - waiting for own answer.");
            CLIConfig cfg = LoadConfig(config + ".local");

            ConfigManager         cm   = new ConfigManager(config);
            List <ReceiverClient> list = new List <ReceiverClient>();

            Peer p = cm.Config.Peers.Single(x => x.PeerID == cm.Config.MyID);

            Console.WriteLine("Init receiver channel: " + p.ChannelID.ToString());
            ReceiverClient client = new ReceiverClient(cm, p.ChannelID, cfg.ServerURL);

            client.MessageReceived = HandleReceivedInit;
            client.Connect();

            SenderClient sclient = new SenderClient(cm, p.ChannelID, cfg.ServerURL);

            while (initReply.ToLower().Trim() != msg.ToLower().Trim())
            {
                sclient.SendMessage(msg);

                Thread.Sleep(100);
            }


            Console.WriteLine("Got it... Good.");
            foreach (ReceiverClient r in list)
            {
                r.Disconnect();
            }
        }
        public void CheckRandomChannelDefaultConfig()
        {
            new FileInfo(".geeksync-client.conf").Delete();
            ConfigManager config = new ConfigManager();

            SenderClient client = new SenderClient(config, config.Config.Peers[0].ChannelID, "http://localhost:5000/");

            client.CheckIfAvailable();

            Assert.False(client.IsAvailable);
            new FileInfo(".geeksync-client.conf").Delete();
        }
예제 #5
0
        /// <summary>
        /// Main method of sender
        /// </summary>
        /// <param name="args">args from command line</param>
        static void Main(string[] args)
        {
            var index = Array.FindIndex(args, x => x == "--reconnect-example");

            if (index != -1)
            {
                Application.Main(args.Skip(1).ToArray());
            }
            else
            {
                SenderClient client = new SenderClient();
                client.Run(args);
            }
        }
        public void SendAndReceive()
        {
            new FileInfo(".test.3r.conf").Delete();
            new FileInfo(".test.3s.conf").Delete();

            ConfigManager rconfig = new ConfigManager(".test.3r.conf");
            ConfigManager sconfig = new ConfigManager(".test.3s.conf");

            rconfig.PeerWith(sconfig);

            Guid ch = sconfig.Config.Peers.Single(x => x.PeerID == rconfig.Config.MyID).ChannelID;

            SenderClient   sender   = new SenderClient(sconfig, ch, "http://localhost:5000/");
            ReceiverClient receiver = new ReceiverClient(rconfig, ch, "http://localhost:5000/");

            sender.CheckIfAvailable();
            Assert.False(sender.IsAvailable);

            lastMsg = "";

            receiver.MessageReceived = receiverHanlder;

            receiver.Connect();



            sender.CheckIfAvailable();
            Assert.True(sender.IsAvailable);

            Assert.Equal("", lastMsg);
            sender.SendMessage("TEST MESSAGE");

            Thread.Sleep(10 * 1000);

            Assert.Equal("TEST MESSAGE", lastMsg);

            receiver.Disconnect();

            sender.CheckIfAvailable();
            Assert.False(sender.IsAvailable);

            new FileInfo(".test.3r.conf").Delete();
            new FileInfo(".test.3s.conf").Delete();
        }
예제 #7
0
        private static void SenderClientData(SenderClient senderClient)
        {
            byte[] cipherDataBytes = _rsaWithCspKey.EncryptData(plainData: Encoding.UTF8.GetBytes(ORIGINAL_MESSAGE));

            _hexValue = BitConverter.ToString(cipherDataBytes);
            senderClient.CipherText = BitConverter.ToString(cipherDataBytes);

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine($"## Sender Client ##");
            Console.ResetColor();

            Console.WriteLine($"{"Exponent",-25} : {BitConverter.ToString(senderClient.PublicKey.Exponent)}");
            Console.WriteLine($"{"Modulus",-25} : {BitConverter.ToString(senderClient.PublicKey.Modulus)}");

            Console.WriteLine();

            Console.WriteLine($"{"Original Message",-25} : {ORIGINAL_MESSAGE}");
            Console.WriteLine($"{"Cipher Message",-25} : {senderClient.CipherText}");
        }
예제 #8
0
        static void Sender(string config)
        {
            CLIConfig cfg = LoadConfig(config + ".local");

            ConfigManager cm = new ConfigManager(config);

            Console.WriteLine("Enter message:");
            string msg = Console.ReadLine();

            foreach (Peer p in cm.Config.Peers)
            {
                Console.WriteLine("Sender channel: " + p.ChannelID.ToString());
                SenderClient client = new SenderClient(cm, p.ChannelID, cfg.ServerURL);
                client.CheckIfAvailable();
                Console.WriteLine("Available: " + client.IsAvailable.ToString());

                client.SendMessage(msg);
            }
        }
예제 #9
0
        /// <summary>
        /// Main method of sender
        /// </summary>
        /// <param name="args">args from command line</param>
        static void Main(string[] args)
        {
            SenderClient client = new SenderClient();

            client.Run(args);
        }
예제 #10
0
        static void Main(string[] args)
        {
            var client = new SenderClient("127.0.0.1:6789");

            client.StartListener();

            var sender = new Sender(client);

            sender.Register <IExampleObject>();

            // Sync bindings
            IReadOnlyDictionary <string, IExampleObject> bindings = new Dictionary <string, IExampleObject>();

            StepExample("Press any key to sync bindings.", () =>
            {
                sender.SynchronizeBindings();
                bindings = sender.GetBindingsByType <IExampleObject>();
                Console.WriteLine($"Found {bindings.Count} {nameof(IExampleObject)}");
            });

            // Event subscribe
            StepExample("Press any key to subscribe to event.", () =>
            {
                Console.WriteLine($"Subscribing to {nameof(IExampleObject.NotifyRequested)}...");
                bindings.Values.First().NotifyRequested += _obj1_NotifyRequested;
            });

            // Event unsubscribe
            StepExample("Press any key to unsubscribe from event.", () =>
            {
                Console.WriteLine($"Unsubscribing from {nameof(IExampleObject.NotifyRequested)}...");
                bindings.Values.First().NotifyRequested -= _obj1_NotifyRequested;
            });

            // Property get
            StepExample("Press any key to get property value.", () =>
            {
                var value = bindings.Values.First().StrProperty;
                Console.WriteLine(value == null ? $"Looks like the value is 'null'. Let's set it!" : $"Value: {value}");
            });

            // Property set
            StepExample("Press any key to set property value.", () =>
            {
                string value = "You set a string!";
                bindings.Values.First().StrProperty = value;
                Console.WriteLine($"Value set to: {value}");
            });

            // Property get (again)
            StepExample("Press any key to get property value.", () =>
            {
                var value = bindings.Values.First().StrProperty;
                Console.WriteLine($"Look it's the same value you just set: {value}");
            });

            // Method invoke (void return)
            StepExample("Press any key to invoke a void return method.", () =>
            {
                bindings.Values.First().MethodVoidStr("Method invoked!");
                Console.WriteLine("You invoked the method!");
            });

            // Method invoke (string return)
            StepExample("Press any key to invoke a string return method.", () =>
            {
                string result = bindings.Values.First().MethodStr();
                Console.WriteLine($"Method result: {result}");
            });

            // Method invoke (params string/void return)
            StepExample("Press any key to invoke a void return/params method.", () =>
            {
                bindings.Values.First().MethodVoidParamsString("str0", "str1");
                Console.WriteLine($"You invoked the method!");
            });

            // Method invoke (custom class/void return)
            StepExample("Press any key to invoke a void return/custom class.", () =>
            {
                bindings.Values.First().MethodVoidExampleClass(new ArgsExampleClass()
                {
                    StringProperty = "str0", DoubleProperty = 2.0
                });
                Console.WriteLine($"You invoked the method!");
            });

            Console.WriteLine("Press any key to exit example.");
            Console.ReadKey();
        }