public ServerForm() { InitializeComponent(); server = new SGServer(); server.ClientAuthRequested += (s, e) => { logPanel.Info("Auth Request:" + e.Client.Tags["name"] + " Token:" + string.Concat(e.Token.Take(64))); }; server.ClientConnected += (s, e) => { logPanel.Info("Client connected " + e.Client.Tags["name"]); e.Client["peki"] = "test"; Invoke(new Action(() => lblConnectionCount.Text = server.Clients.Count.ToString())); e.Client.DataReceived += (ss, ee) => { if (ee.Data.Body != null && ee.Data.Body.Contains("cef")) { logPanel.Error(ee.Data.Head + " Message rejected"); ee.Response = Response.Error("some error occurred"); } else { string receivers = ""; foreach (var c in server.Clients) { if (c != e.Client) { receivers += c["name"] + ","; } c.Message(ee.Data.Head, ee.Data.Body); } ee.Response = Response.From("Message recevied by", receivers); } }; }; server.ClientDisconnected += (s, e) => { Invoke(new Action(() => lblConnectionCount.Text = server.Clients.Count.ToString())); logPanel.Info("Client disconnected " + e.Client.Tags["name"]); }; server.Started += (s, e) => { Invoke(new Action(() => { btnStart.Text = "Stop"; logPanel.Info("Server is running...."); })); }; server.Stopped += (s, e) => { Invoke(new Action(() => { btnStart.Text = "Start"; logPanel.Info("Stopped"); })); }; Load += (s, e) => { btnStart.PerformClick(); }; }
static void Main(string[] args) { try { var server = new SGServer(); server.Serve(9999); server.ClientAuthRequested += (s, e) => { bool reject = false; // new Random().NextDouble() > 0.5; if (server.Clients.Count > 2) { reject = true; } Info($"Auth requested with '{e.Token}', reject status: {(reject ? "Rejected" : "Accepted")}"); e.Reject = reject; }; server.ClientConnected += (s, e) => { string name = null; e.Client.Tags?.TryGetValue("name", out name); Info($"Client connected {name ?? "Unnamed"}"); e.Client.DataReceived += (ss, ee) => { Message(ee.Data.Head, ee.Data.Body); if (ee.IsResponseRequired) { if (ee.Data.Body?.Contains("x") == true) { ee.Response = Response.Cancel(); } else { foreach (var client in server.Clients) { client.Message(ee.Data.Head + "X", ee.Data.Body); } ee.Response = Response.OK(); } } }; }; while (true) { var line = Console.ReadLine(); foreach (var client in server.Clients) { client.Message("server", line); } } } catch (Exception ex) { Error(ex.Message, ex.StackTrace); } Console.WriteLine("end of this"); Console.ReadLine(); }