Esempio n. 1
0
        /// <summary>
        /// Set up listeners for all bound events that will interact with the lights
        /// </summary>
        public void Listen()
        {
            // Create a new light client and connect
            _lightClient = new LightClient(defaultBrightness: this.Settings.Brightness);

            // Create a new chat client
            _chatClient = new ChatClient()
            {
                ConnnectedAction = () =>
                {
                    SetupAllBinding();
                    ShowConnectedMessage();
                    ApplyCurrentStatus();
                    ShowConnectedOptions();
                },
                DisconnectedAction = () =>
                {
                    ShowNotConnectedMessage();
                    _lightClient.TurnOff();
                    ShowDisconnectedOptions();
                }
            };

            // If we're not signed in now (on launch) then show a message and wait until we are
            if (!_chatClient.IsSignedIn)
            {
                ShowNotConnectedMessage();
                ShowDisconnectedOptions();
            }
            else
            {
                SetupAllBinding();
            }

            // When a new Lync process starts, try connect to it
            ManagementEventWatcher newLyncProcessWatcher = new ManagementEventWatcher("SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName='lync.exe'");

            newLyncProcessWatcher.EventArrived += (sender, args) =>
            {
                ShowManualReconnectMessage();
            };
            newLyncProcessWatcher.Start();
        }
Esempio n. 2
0
        public void TestAddGetManyParallel(
            [Values(1, 2, 3, 4)] int writeStreams,
            [Values(2, 3, 4, 10)] int readStreams,
            [Values(LightningDbSyncMode.Fsync, LightningDbSyncMode.Async, LightningDbSyncMode.NoSync)] LightningDbSyncMode asyncStore,
            [Values(1, 10, 100, 1000, 10000, 100000)] int iterations)
        {
            var config = Config;

            config.SyncMode = asyncStore;

            using (var client = new GrpcTestClient(config))
            {
                var valueLength = 1024;

                var sw = new Stopwatch();
                sw.Start();
                var kvsAll = BuildKeyValuePairs(iterations * writeStreams, valueLength);
                sw.Stop();
                Console.WriteLine($"Preparing data elapsed: {sw.Elapsed}");

                var swAll = new Stopwatch();
                swAll.Start();
                Parallel.For(0, writeStreams, new ParallelOptions {
                    MaxDegreeOfParallelism = writeStreams
                }, i =>
                {
                    var kvs = kvsAll.Skip(i * iterations).Take(iterations).ToDictionary(kv => kv.Key, kv => kv.Value);

                    using (var writeClient = new LightClient(new Channel($"127.0.0.1:{client.ReplicaConfig.Port}", ChannelCredentials.Insecure), new ClientConfig
                    {
                        UseStreaming = true,
                        Compression = None,
                        HashedWith = Md5
                    }))
                    {
                        sw = new Stopwatch();
                        sw.Start();
                        var addRet = writeClient.TryAdd(kvs.Keys, (k, s) =>
                        {
                            var buffer = kvs[k].Item2;
                            s.Write(buffer, 0, buffer.Length);
                        }, DateTimeOffset.Now.AddSeconds(500));
                        sw.Stop();
                        Console.WriteLine($"Write elapsed: {sw.Elapsed}");

                        Assert.AreEqual(kvs.Count, addRet.Count);
                        Assert.IsTrue(addRet.All(k => kvs.ContainsKey(k)));
                    }
                });
                swAll.Stop();
                Console.WriteLine($"Write Elapsed total: {swAll.Elapsed}");
                Console.WriteLine($"Write Elapsed per thread: {swAll.Elapsed / writeStreams}");


                swAll = new Stopwatch();
                swAll.Start();
                Parallel.For(0, readStreams, new ParallelOptions {
                    MaxDegreeOfParallelism = readStreams
                }, i =>
                {
                    var kvs = kvsAll.Skip((i % writeStreams) * iterations).Take(iterations).ToDictionary(kv => kv.Key, kv => kv.Value);

                    using (var readClient = new LightClient(new Channel($"127.0.0.1:{client.ReplicaConfig.Port}", ChannelCredentials.Insecure), new ClientConfig
                    {
                        UseStreaming = true,
                        Compression = None,
                        HashedWith = Md5
                    }))
                    {
                        var getDict = new Dictionary <string, byte[]>();
                        sw          = new Stopwatch();
                        sw.Start();
                        var getRet = readClient.TryGet(kvs.Keys, (k, s) =>
                        {
                            var readBuffer = new byte[valueLength];
                            var readBytes  = s.Read(readBuffer, 0, readBuffer.Length);
                            getDict[k]     = readBuffer.Take(readBytes).ToArray();
                        });
                        sw.Stop();
                        Console.WriteLine($"Read elapsed: {sw.Elapsed}");

                        Assert.AreEqual(kvs.Keys.Count, getRet.Count);
                        Assert.IsTrue(getRet.All(k => kvs.ContainsKey(k)));
                        Assert.AreEqual(kvs.Keys.Count, getDict.Count);
                        foreach (var kv in getDict)
                        {
                            Assert.IsTrue(kvs.ContainsKey(kv.Key));
                            CollectionAssert.AreEqual(kvs[kv.Key].Item2, kv.Value);
                        }
                    }
                });
                swAll.Stop();
                Console.WriteLine($"Read Elapsed total: {swAll.Elapsed}");
                Console.WriteLine($"Read Elapsed per thread: {swAll.Elapsed / readStreams}");
            }
        }
Esempio n. 3
0
        public static void TestAddGetManyParallel(
            string host,
            uint port,
            int writeStreams,
            int readStreams,
            int keysCount)
        {
            var valueLength = 1024;

            var sw = new Stopwatch();

            sw.Start();
            var kvsAll = BuildKeyValuePairs(keysCount * writeStreams, valueLength);

            sw.Stop();
            Console.WriteLine($"Preparing data elapsed: {sw.Elapsed}");

            var swAll = new Stopwatch();

            swAll.Start();
            Parallel.For(0, writeStreams, new ParallelOptions {
                MaxDegreeOfParallelism = writeStreams
            }, i =>
            {
                var kvs = kvsAll.Skip(i * keysCount).Take(keysCount).ToDictionary(kv => kv.Key, kv => kv.Value);

                using (var writeClient = new LightClient(new Channel($"{host}:{port}", ChannelCredentials.Insecure), new ClientConfig
                {
                    UseStreaming = true,
                    Compression = None,
                    HashedWith = Md5
                }))
                {
                    sw = new Stopwatch();
                    sw.Start();
                    var addRet = writeClient.TryAdd(kvs.Keys, (k, s) =>
                    {
                        var buffer = kvs[k].Item2;
                        s.Write(buffer, 0, buffer.Length);
                    }, DateTimeOffset.Now.AddSeconds(500));
                    sw.Stop();
                    Console.WriteLine($"Write elapsed: {sw.Elapsed}");
                }
            });
            swAll.Stop();
            Console.WriteLine($"Write Elapsed total: {swAll.Elapsed}");
            Console.WriteLine($"Write Elapsed per thread: {swAll.Elapsed / writeStreams}");


            swAll = new Stopwatch();
            swAll.Start();
            Parallel.For(0, readStreams, new ParallelOptions {
                MaxDegreeOfParallelism = readStreams
            }, i =>
            {
                var kvs = kvsAll.Skip((i % writeStreams) * keysCount).Take(keysCount).ToDictionary(kv => kv.Key, kv => kv.Value);

                using (var readClient = new LightClient(new Channel($"{host}:{port}", ChannelCredentials.Insecure), new ClientConfig
                {
                    UseStreaming = true,
                    Compression = None,
                    HashedWith = Md5
                }))
                {
                    var getDict = new Dictionary <string, byte[]>();
                    sw          = new Stopwatch();
                    sw.Start();
                    var getRet = readClient.TryGet(kvs.Keys, (k, s) =>
                    {
                        var readBuffer = new byte[valueLength];
                        var readBytes  = s.Read(readBuffer, 0, readBuffer.Length);
                        getDict[k]     = readBuffer.Take(readBytes).ToArray();
                    });
                    sw.Stop();
                    Console.WriteLine($"Read elapsed: {sw.Elapsed}");
                }
            });
            swAll.Stop();
            Console.WriteLine($"Read Elapsed total: {swAll.Elapsed}");
            Console.WriteLine($"Read Elapsed per thread: {swAll.Elapsed / readStreams}");
        }
Esempio n. 4
0
        private static int Main(string[] args)
        {
            var running = true;

            string host = null;
            var    port = -1;

            for (var i = 0; i < args.Length; i++)
            {
                var arg = args[i];

                if (arg.Equals("-port"))
                {
                    try
                    {
                        port = int.Parse(args[i + 1], CultureInfo.CurrentCulture);
                        if (port < 0)
                        {
                            logger.Error("-port cannot be less than 0");
                            port = -1;
                        }
                        else
                        {
                            logger.Info("Using port {0}", args[i + +1]);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (ex is FormatException || ex is IndexOutOfRangeException)
                        {
                            logger.Error("-port is not a number");
                            port = -1;
                        }
                        else
                        {
                            throw;
                        }
                    }
                }


                if (arg.Equals("-ip") || arg.Equals("-host"))
                {
                    try
                    {
                        host = args[i + 1];
                        logger.Info("Using host {0}", args[i + +1]);
                    }
                    catch (IndexOutOfRangeException)
                    {
                        logger.Error("Cannot find argument for -host");
                        host = null;
                    }
                }


                if (arg.Equals("-debug"))
                {
                    StaticHandler.Debug = true;
                    logger.Debug("Debug enabled");
                }
            }



            while (host == null || host.Equals("") || port == -1)
            {
                if (host == null || host.Equals(""))
                {
                    host = readLine("Host:");
                }

                if (port == -1)
                {
                    port = readInt("Port:");
                }
            }


            var client = new LightClient(host, port);

            client.Connect().ConfigureAwait(false).GetAwaiter().OnCompleted(() =>
            {
                logger.Info("Finisehd");
            });

            while (client.running)
            {
                Thread.Sleep(10);
            }

            logger.Warn("Exiting for unknown reason");

            return(-1);
        }