static void Main(string[] args) { try { // Create a server that will register the service name 'myapp'. using (DdeServer server = new MyServer("myapp")) { // Register the service name. server.Register(); // Wait for the user to press ENTER before proceding. Console.WriteLine("Press ENTER to quit..."); Console.ReadLine(); } } catch (Exception e) { Console.WriteLine(e); Console.WriteLine("Press ENTER to quit..."); Console.ReadLine(); } }
public static void RunWebSocketServer() { using (var server = new MyServer()) { server.Start(IPAddress.Loopback, 5001); Console.WriteLine($"Running on {server.IP}:{server.Port}..."); CancellationTokenSource cancel = new CancellationTokenSource(); bool keepGoing = true, writeLegend = true, writeStatus = true; while (keepGoing) { if (writeLegend) { Console.WriteLine("c: start client"); Console.WriteLine("c ###: start ### clients"); Console.WriteLine("b: broadbast from server"); Console.WriteLine("s: send from clients"); Console.WriteLine("p: ping"); Console.WriteLine("l: toggle logging"); Console.WriteLine("cls: clear console"); Console.WriteLine("xc: close at client"); Console.WriteLine("xs: close at server"); Console.WriteLine($"bf: toggle {nameof(server.BufferFragments)}"); Console.WriteLine("frag: send fragmented message from clients"); Console.WriteLine("q: quit"); Console.WriteLine("stat: write status"); Console.WriteLine("?: help"); writeLegend = false; } if (writeStatus) { Console.WriteLine($"clients: {ClientCount}; server connections: {server.ConnectionCount}"); writeStatus = false; } var line = Console.ReadLine(); switch (line) { case null: case "cls": Console.Clear(); break; case "q": keepGoing = false; break; case "stat": writeStatus = true; break; case "?": writeLegend = true; break; case "l": logging = !logging; Console.WriteLine("logging is now " + (logging ? "on" : "off")); break; case "bf": server.BufferFragments = !server.BufferFragments; Console.WriteLine($"{nameof(server.BufferFragments)} is now " + (server.BufferFragments ? "on" : "off")); break; case "xc": CloseAllClients(cancel.Token).ContinueWith(t => { try { Console.WriteLine($"Closed {t.Result} clients"); } catch (Exception e) { WriteError(e); } }); break; case "xs": server.CloseAllAsync("nuked from orbit").ContinueWith(t => { try { Console.WriteLine($"Closed {t.Result} connections at the server"); } catch (Exception e) { WriteError(e); } }); break; case "b": server.BroadcastAsync("hello to all clients").ContinueWith(t => { try { Console.WriteLine($"Broadcast to {t.Result} clients"); } catch (Exception e) { WriteError(e); } }); break; case "s": SendFromClients(cancel.Token).ContinueWith(t => { try { Console.WriteLine($"Sent from {t.Result} clients"); } catch (Exception e) { WriteError(e); } }); break; case "frag": SendFragmentedFromClients(cancel.Token).ContinueWith(t => { try { Console.WriteLine($"Sent fragmented from {t.Result} clients"); } catch (Exception e) { WriteError(e); } }); break; case "c": StartClients(cancel.Token); break; case "p": server.PingAsync("ping!").ContinueWith(t => { try { Console.WriteLine($"Pinged {t.Result} clients"); } catch (Exception e) { WriteError(e); } }); break; default: var match = Regex.Match(line, "c ([0-9]+)"); int i; if (match.Success && int.TryParse(match.Groups[1].Value, out i) && i.ToString() == match.Groups[1].Value && i >= 1) { StartClients(cancel.Token, i); } else { writeLegend = true; } break; } } Console.WriteLine("Shutting down..."); cancel.Cancel(); } }