コード例 #1
0
        /// <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);
        }
コード例 #2
0
 public UdpMessageListener(int port)
 {
     reader = NetworkingFactory.UdpReader <E>(port);
 }