/// <summary> /// Конструктор формы для прождения теста /// </summary> /// <param name="ipAddressString"> ip-адрес сервера </param> public QuestionForm(string ipAddressString) { _listener = new UdpMessageListener <Question>(9090); _listener.IncomingMessage += OnIncomingQuestion; _listener.Start(); _server = NetworkingFactory.UdpWriter <ServiceMessage>(IPAddress.Parse(ipAddressString), 8080); InitializeComponent(); //Отправляем на сервер запрос о количестве вопросов в базе данных ServiceMessage msg = new ServiceMessage(Command.CountQuestions); _server.Write(msg); bool flag = false; //Пытаемся получить ответ на запрос от сервера try { var reader = NetworkingFactory.UdpReader <Question>(9091); var Message = reader.Read(15000); var Sender = reader.Sender; int.TryParse(Message.Text, out maxQuestionNumber); flag = true; reader.Dispose(); } catch (Exception e) { //MessageBoxButtons buttons = MessageBoxButtons.OK; //MessageBox.Show(e.Message, "Error Detected in Input", buttons); } //Если ответ от сервера не получен, показываем соответствующее сообщение для пользователя string caption = "Info"; var message = ""; if (!flag) { message = "Сервер не отвечает."; } else if (maxQuestionNumber == 0) { message = "В базе нет ни одного вопроса."; } if (message != "") { MessageBoxButtons buttons = MessageBoxButtons.OK; MessageBox.Show(message, caption, buttons); } CountLabel.Text = "В базе " + maxQuestionNumber + " вопросов."; //Генерируем случайную последовательность вопросов perm = Enumerable.Range(1, maxQuestionNumber).ToArray(); Random r = rnd; for (int i = maxQuestionNumber - 1; i >= 1; i--) { int j = r.Next(i + 1); int temp = perm[j]; perm[j] = perm[i]; perm[i] = temp; } //Отправляем на сервер запрос первого вопроса теста msg = new ServiceMessage(Command.NextQuestion, perm[NumQuestion]); _server.Write(msg); }
public UdpMessageListener(int port) { reader = NetworkingFactory.UdpReader <E>(port); }