/* The StartTest MessageHandler * It handles messages of START_TEST_REQUEST type. */ private static void StartTest(RMessage message, TcpClient connection) { List <DomainData> reqDomains = (List <DomainData>)message.Data; List <QuizSetData> quizList = new List <QuizSetData>(); for (int i = 0; i < reqDomains.Count; ++i) { // Get all questions from the database List <QuizItemData> allQuestions = QuizItemConnector.GetAllItems(reqDomains[i].ID); // Select random questions from the set List <int> selected = GetRandoms(allQuestions.Count, QUESTIONS_PER_SET); // Create a new QuizSet with the selected questions QuizSetData quizSet = new QuizSetData(reqDomains[i].Name); for (int j = 0; j < QUESTIONS_PER_SET; ++j) { quizSet.AddQuestion(allQuestions[selected[j]]); } quizList.Add(quizSet); } RMessage replyMessage = new RMessage( MessageType.START_TEST_REPLY, quizList); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
// Finish the current quiz set public void FinishQuizSet() { int nrCorrect = 0; QuizSetData quiz = model.CurrentQuiz; for (int i = 0; i < quiz.Question.Count; ++i) { if (quiz.Question[i].Answer == quiz.Question[i].Correct) { ++nrCorrect; } } model.SetScoreForCurrentTest(nrCorrect); if (model.IsLastSet()) { AllTestsFinished(model); } else { model.GetNextSet(); StartSet(); } }