/* Подпрограмма работы с подключённым клиентом */ private void WorkWithClient() { MessageType messgType; try { /* В бесконечном цикле пытаемся получить сообщение от клиента. * Выход из цикла осуществляется при возникновении исключения */ while (true) { /* Проверяем, есть ли непрочитанные данные */ if (NetStream.DataAvailable) { /* Считываем код сообщения, который определяет, * это текстовое сообщение либо ошибка */ messgType = (MessageType)Reader.ReadByte(); AnalyseMessageType(messgType); } } } catch (ConnectionException clExc) { /* Обработка возникшего исключения */ WorkWithExc(clExc); } catch (Exception) { } finally { CloseConnection(); UI.UpdateServerInfo(); } }
/* Подпрограмма прослушивания входящих подключений */ private void ListenIncomingConnections() { try { listenSocket.Bind(listenPoint); listenSocket.Listen(10); UI.ShowText(MESSG_WAITING_FOR_CLIENTS, idManager.ID_SERVER_DEFAULT); IsServerWork = true; UI.UpdateServerInfo(); } catch (Exception ex) { UI.ShowText(ex.Message, idManager.ID_SERVER_ERROR); } if (IsServerWork) { try { while (true) { Socket handler = listenSocket.Accept(); try { TryToConnectNewClient(handler); } catch (Exception) { } } } catch (Exception) { } finally { RemoveAllConnections(NEED_MESSAGE); UI.ShowText(MESSG_SERVER_STOPPED, idManager.ID_SERVER_DEFAULT); IsServerWork = false; } } }