{"action":"created","issue":{"url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/issues/11","repository_url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger","labels_url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/issues/11/labels{/name}","comments_url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/issues/11/comments","events_url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/issues/11/events","html_url":"https://github.com/UrFU-Programming/IsitMessenger/pull/11","id":146964939,"number":11,"title":"реализация MainWindow::createServer()","user":{"login":"i-ka","id":13613488,"avatar_url":"https://avatars.githubusercontent.com/u/13613488?v=3","gravatar_id":"","url":"https://api.github.com/users/i-ka","html_url":"https://github.com/i-ka","followers_url":"https://api.github.com/users/i-ka/followers","following_url":"https://api.github.com/users/i-ka/following{/other_user}","gists_url":"https://api.github.com/users/i-ka/gists{/gist_id}","starred_url":"https://api.github.com/users/i-ka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/i-ka/subscriptions","organizations_url":"https://api.github.com/users/i-ka/orgs","repos_url":"https://api.github.com/users/i-ka/repos","events_url":"https://api.github.com/users/i-ka/events{/privacy}","received_events_url":"https://api.github.com/users/i-ka/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2016-04-08T15:44:25Z","updated_at":"2016-04-08T16:29:47Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/pulls/11","html_url":"https://github.com/UrFU-Programming/IsitMessenger/pull/11","diff_url":"https://github.com/UrFU-Programming/IsitMessenger/pull/11.diff","patch_url":"https://github.com/UrFU-Programming/IsitMessenger/pull/11.patch"},"body":""},"comment":{"url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/issues/comments/207503595","html_url":"https://github.com/UrFU-Programming/IsitMessenger/pull/11#issuecomment-207503595","issue_url":"https://api.github.com/repos/UrFU-Programming/IsitMessenger/issues/11","id":207503595,"user":{"login":"Kaffeine","id":374839,"avatar_url":"https://avatars.githubusercontent.com/u/374839?v=3","gravatar_id":"","url":"https://api.github.com/users/Kaffeine","html_url":"https://github.com/Kaffeine","followers_url":"https://api.github.com/users/Kaffeine/followers","following_url":"https://api.github.com/users/Kaffeine/following{/other_user}","gists_url":"https://api.github.com/users/Kaffeine/gists{/gist_id}","starred_url":"https://api.github.com/users/Kaffeine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kaffeine/subscriptions","organizations_url":"https://api.github.com/users/Kaffeine/orgs","repos_url":"https://api.github.com/users/Kaffeine/repos","events_url":"https://api.github.com/users/Kaffeine/events{/privacy}","received_events_url":"https://api.github.com/users/Kaffeine/received_events","type":"User","site_admin":false},"created_at":"2016-04-08T16:29:47Z","updated_at":"2016-04-08T16:29:47Z","body":"Ладно, что-то никто не торопится отвечать.\r\n\r\nТрудность программирования в том, что требования часто меняются и нужно умудряться писать код с учётом возможных новых требований. Ну и конечно, нужно думать о том, что может пойти не так.\r\n\r\n1. Что будет, если сервер не запустится, потому что выбранный порт занят другим приложением? ServerDiscovery будет сообщать всем, кто его спросит о сервере,  что сервер запущен на порту ui->serverPort->value(). А по факту там будет другое приложение, которое совсем не ждёт наплыва наших клиентов.\r\n\r\n2. Это не будет работать с автоматическим выбором порта, поэтому для добавления сервера нужно использовать именно порт из сигнала serverStarted().\r\n\r\n3. А если потом захочется добавить настройку, выбирающую, будет ли сервер публичным? Такое задание действительно будет. Нужно будет добавить CheckBox \"Visible\" на вкладку Server. Если галочки нет, то ServerDiscovery не должен анонсировать и сообщать об этом локальном сервере.\r\n\r\n4. Дополнительно подумайте о том, что будет, если мы захотим добавить поддержку запуска нескольких серверов? Реализация ServerDiscovery пока на такое не способна, но правильный интерфейс уже есть — метод называется addServer() (\"добавить сервер\"), а не \"задать сервер\". Может быть, при добавлении сервера мы захотим делать рассылку только об этом новом сервере, а не обо всех запущенных. Это я к тому, что announceServer() — это деталь реализации ServerDiscovery, которую нельзя использовать снаружи. Сейчас мы пользуемся старым синтаксисом соединения сигналов-слотов, который работает через сравнение строк и подключение приватного слота не вызывает ошибки компиляции. В дальнейшем мы будем предпочитать новый способ, который позволит вам сразу понять, что вы подключаетесь к недопустимому слоту. Для проверки можете нажать Alt+Enter и сконвертировать соединение в стиль Qt5.\r\n\r\nПредлагаю добавить в MainWindow слот, вызываемый по сигналу serverStarted().\r\nСейчас этот слот будет просто вызывать ServerDiscovery::addServer(), а потом можно будет одной строчкой добавить проверку на состояние CheckBox'а.\r\n"}}