/// <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(); }
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}"); } }
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}"); }
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); }