示例#1
0
        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();
            };
        }
示例#2
0
        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();
        }