Beispiel #1
0
        static void Main(string[] args)
        {
            var port = int.Parse(Environment.GetEnvironmentVariable("PP_PORT") ?? "9876");

            var server = new Server();

            server.Start(port);

            var isExiting = false;

            AppDomain.CurrentDomain.ProcessExit += (_, __) =>
            {
                isExiting = true;
            };

            var service = new PongoServerService(server);

            while (!isExiting)
            {
                if (!server.GetNextMessage(out var msg))
                {
                    Thread.Sleep(2);
                    continue;
                }

                try
                {
                    switch (msg.eventType)
                    {
                    case EventType.Connected:
                        service.ClientConnected(msg.connectionId);
                        break;

                    case EventType.Data:
                        service.OnDataRecv(msg.connectionId, msg.data);
                        break;

                    case EventType.Disconnected:
                        service.ClientDisconnected(msg.connectionId);
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Unhandled exception: {e.ToString()}");
                }
            }

            Console.WriteLine("Process: Exiting");

            server.Stop();
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            // получаем порт или устанавливаем порт по умолчанию
            var port = int.Parse(Environment.GetEnvironmentVariable("PP_PORT") ?? "9876");

            // создаем и запускаем сервер
            var server = new Server();

            server.Start(port);

            var isExiting = false;

            // при выходе проставляем фалжек что нужно оканчивать обработку соединий
            AppDomain.CurrentDomain.ProcessExit += (_, __) =>
            {
                isExiting = true;
            };

            // создаем сервис для обработки бизнес логики сервера
            var service = new PongoServerService(server);

            // в бесконечном цикле обрабатывем поток сообщений от сервера пока не поднимется флажек завершения работы сервера
            while (!isExiting)
            {
                // пвтаемся взять следующее сообщение
                if (!server.GetNextMessage(out var msg))
                {
                    // если сообщений нету, то ждем несколько миллисекунд
                    Thread.Sleep(1);
                    continue; // и переходи на новую итерацию
                }

                try
                {
                    // по типу сообщения обрабатывем соответственной логикой
                    switch (msg.eventType)
                    {
                    case EventType.Connected:
                        service.ClientConnected(msg.connectionId);     // обработка подключения нового соеднинения
                        break;

                    // обработка сообщения с данными от клиента
                    case EventType.Data:
                        // из массива байт получаем строку
                        var data = Encoding.UTF8.GetString(msg.data);
                        // в этой строке json, парсим его
                        var json = SimpleJSON.JSON.Parse(data);
                        // оброабатываем сообщение бизнес-логикой
                        service.OnDataRecv(msg.connectionId, json);
                        break;

                    // обработка отключения клиента
                    case EventType.Disconnected:
                        service.ClientDisconnected(msg.connectionId);
                        break;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Unhandled exception: {e.ToString()}");
                }
            }

            Console.WriteLine("Process: Exiting");

            // остановка сервера
            server.Stop();
        }