private static void SendCurrentMap(ClientConnection client)
        {
            PacmanGame    game = client.game;
            List <string> map  = game.map.GetText();
            int           w    = game.map.width;
            int           h    = game.map.height;

            map.Insert(0, $"{game.pacmanX}x{game.pacmanY}");
            map.Insert(0, $"{w}x{h}");
            strbuilder.Clear();
            for (int i = 0; i < map.Count; i++)
            {
                strbuilder.Append(map[i]);
                char append = (i == map.Count - 1) ? ClientConnection.terminator : ClientConnection.delimiter;
                strbuilder.Append(append);
            }
            client.Send(strbuilder.ToString());
            strbuilder.Clear();
        }
        // INITIALIZING ============================================================================
        // Инициализация
        //=========================================================================================
        public ClientConnection(Socket client, int port)
        {
            this.client = client;
            this.port   = port;
            endPoint    = client.RemoteEndPoint;
            game        = new PacmanGame(); // cоздаём новый экземпляр игры для этого клиента

            // получение данных мы делаем асинхронно
            BeginReceive();

            // а отправку данных мы просто делаем в отдельном потоке
            if (disconnecting)
            {
                return;                // это может потребоваться, если ошибка вылетит в BeginReceieve
            }
            lock (sendingThreadLocker)
            {
                sendingThread = new Thread(SendingThread)
                {
                    IsBackground = true
                };
                sendingThread.Start();
            }
        }