//Обработка события нажатия на кнопку "Проверить" private void CheckQuestionButton_Click(object sender, EventArgs e) { string caption = "Info"; bool right = false; //Проверяем соответствует ли выбранный ответ правильному switch (_answer) { case "1": { right = radioButton1.Checked; break; } case "2": { right = radioButton2.Checked; break; } case "3": { right = radioButton3.Checked; break; } case "4": { right = radioButton4.Checked; break; } } var message = right? "Ответ правильный" : "Ответ неверен"; if (right) { rightAnswer++; } MessageBoxButtons buttons = MessageBoxButtons.OK; MessageBox.Show(message, caption, buttons); //Если текущий вопрос не последний, то отправляем на сервер запрос следующего вопроса if (NumQuestion != maxQuestionNumber) { ServiceMessage msg = new ServiceMessage(Command.NextQuestion, perm[NumQuestion]); _server.Write(msg); } //Иначе завершаем тестирование и выводим результат для пользователя else { message = "Тест завершен. Правильных ответов " + rightAnswer; message += " из " + maxQuestionNumber + "."; MessageBox.Show(message, caption, buttons); _listener.Dispose(); Close(); } }
// функция пересылает картинку с сервера всем клиентам private void Send_picture() { foreach (var client in _clientList) { try { Monitor.Enter(panel1); Monitor.Enter(pic); _client_pictures = NetworkingFactory.UdpWriter <Pictures>(client, Ports.PictPort); var msg = new Pictures(pic); _client_pictures.Write(msg); } finally { Monitor.Exit(panel1); Monitor.Exit(pic); } } }
//Обработка нажатия на кнопку "Добавить вопрос в базу" private void OnAddButton(object sender, EventArgs e) { string caption = "Info"; var message = ""; MessageBoxButtons buttons = MessageBoxButtons.OK; //Проверяем, что введенных данных достаточно для добавления вопроса в базу if (QTextBox.Text == null || TextVar1.Text == null || TextVar2.Text == null || VarComboBox.SelectedItem == null || (TextVar3.Text == null && TextVar4.Text != null)) { message = "Вопрос не может быть добавлен. Недостаточно данных."; } else if ((VarComboBox.SelectedItem.ToString() == "3" && TextVar3.Text == null) || (VarComboBox.SelectedItem.ToString() == "4" && TextVar4.Text == null)) { message = "Вопрос не может быть добавлен. Вариант, выбранный в качестве правильного, пуст."; } if (message != "") { MessageBox.Show(message, caption, buttons); } else { //Создаем объет "Вопрос" и инициализируем его введенными в поля формы данными var question = new Question(QTextBox.Text, Convert.ToString(VarComboBox.SelectedItem), TextVar1.Text, TextVar2.Text, TextVar3.Text, TextVar4.Text); //Отправляем сообщение на сервер ServiceMessage msg = new ServiceMessage(question, Command.AddQuestion); _server.Write(msg); message = "Вопрос успешно добавлен в базу."; MessageBox.Show(message, caption, buttons); //Закрываем форму this.Close(); } }
private static void OnServiceMessage(object sender, IncommingMessageEventArgs <Lines> e) { // если такого клиента, который прислал линию, ещё нет в списке, добавить его в список if (!_clientList.Contains(e.Sender.Address)) { _clientList.Add(e.Sender.Address); } // для каждого клиента в списке подключенных (потом вместо списка можно использовать БД) foreach (var client in _clientList) { //_client.Dispose(); _client = NetworkingFactory.UdpWriter <Lines>(client, 9090); var msg = new Lines(e.Message.PrPoint(), e.Message.CurtPoint(), e.Message.pen()); // для графического объекта вызываем стандартную функцию рисования линии с аргументами, полученными от клиента g.DrawLine(e.Message.pen(), e.Message.CurtPoint(), e.Message.PrPoint()); _client.Write(msg); _client.Dispose(); } }
// обработчик события "появилась линия" private void OnLinesMessage(object sender, IncommingMessageEventArgs <Lines> e) { // если такого клиента, который прислал линию, ещё нет в списке, добавить его в список if (!_clientList.Contains(e.Sender.Address)) { _clientList.Add(e.Sender.Address); } // для каждого клиента в списке подключенных (потом вместо списка можно использовать БД) foreach (var client in _clientList) { _client_line = NetworkingFactory.UdpWriter <Lines>(client, Ports.LineServerPort); var msg = new Lines(e.Message.PrPoint(), e.Message.CurtPoint(), e.Message.pen()); // передать информацию о линии всем клиентам _client_line.Write(msg); _client_line.Dispose(); } try { Monitor.Enter(panel1); Graphics G = Graphics.FromImage(pic); foreach (var line in linesList) { G.DrawLine(line.pen(), line.CurtPoint(), line.PrPoint()); } linesList = new List <Lines>(); G.DrawLine(e.Message.pen(), e.Message.CurtPoint(), e.Message.PrPoint()); G.Dispose(); } catch { linesList.Add(e.Message); } finally { Monitor.Exit(panel1); } }
// обработчик события "очистка экрана" private void OnServiceMessage(object sender, IncommingMessageEventArgs <ServiceMessage> e) { // если такого клиента, который прислал линию, ещё нет в списке, добавить его в список if (!_clientList.Contains(e.Sender.Address)) { _clientList.Add(e.Sender.Address); } if (e.Message.Command == Command.CleanScreen) { //для каждого клиента в списке подключенных foreach (var client in _clientList) { _client = NetworkingFactory.UdpWriter <ServiceMessage>(client, Ports.SMServerPort); var msg = new ServiceMessage(Command.CleanScreen); linesList = new List <Lines>(); clear(); _client.Write(msg); _client.Dispose(); } } else if (e.Message.Command == Command.GetPic) { try { Monitor.Enter(panel1); Monitor.Enter(pic); _client_pictures = NetworkingFactory.UdpWriter <Pictures>(e.Sender.Address, Ports.PictPort); var msg = new Pictures(pic); _client_pictures.Write(msg); } finally { Monitor.Exit(panel1); Monitor.Exit(pic); } } }
/// <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 void Write(INetworkWriter networkWriter) { Write(networkWriter.Write(this)); }
public void Write(INetworkWriter networkWriter, NetworkConnection connection) { Write(networkWriter.Write(this), connection); }