/* The AddUserVote MessageHandler * It handles messages of ADD_USER_VOTE_REQUEST type. */ private static void AddUserVote(RMessage message, TcpClient connection) { Console.WriteLine("AddUserVote"); // Get the vote data from the message UserVoteData vote = (UserVoteData)message.Data; // Update the voter's rank UserVoteData rating = UserVoteConnector.CheckUserVote(vote); if (rating == null) { UserConnector.UpdateUserRank(vote.Id_voter_user, Ranking.VOTE_USER); } // Update the votee's rank UserConnector.VoteUser(vote); // Send the vote back to the client RMessage replyMessage = new RMessage(MessageType.ADD_USER_VOTE_REPLY, vote); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); // Send the updated user rank to all clients UserData user = UserConnector.GetUserById(vote.Id_votee_user); replyMessage = new RMessage(MessageType.RANK_USER_UPDATED, user); List <ClientWorker> allWorkers = ServerCore.GetAllWorkers(); foreach (ClientWorker workersIterator in allWorkers) { workersIterator.SendMessage(replyMessage); } }
/* 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); }
/* The GetUserById MessageHandler * It handles messages of GET_USER_BY_ID_REQUEST type. */ private static void GetUserById(RMessage message, TcpClient connection) { Console.WriteLine("GetUserById"); UserData user = UserConnector.GetUser((UInt32)message.Data); RMessage replyMessage = new RMessage(MessageType.GET_USER_BY_ID_REPLY, user); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetDomainQuestions MessageHandler * It handles messages of GET_DOMAIN_QUESTIONS_REQUEST type. */ private static void GetDomainQuestions(RMessage message, TcpClient connection) { Console.WriteLine("GetDomainQuestions"); List <QuestionData> questions = QuestionConnector.GetDomainQuestions((DomainData)message.Data); RMessage replyMessage = new RMessage(MessageType.GET_DOMAIN_QUESTIONS_REPLY, questions); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The PartnerInfoRequested MessageHandler * It handles messages of PARTNER_INFO_REQUEST type. */ private static void PartnerInfoRequested(RMessage message, TcpClient connection) { Console.WriteLine("PartnerInfoRequested"); UserData partner = UserConnector.GetUserById((uint)message.Data); RMessage replyMessage = new RMessage(MessageType.PARTNER_INFO_REPLY, partner); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetFriendList MessageHandler * It handles messages of GET_ALL_FRIENDSHIPS_REQUEST type. */ private static void GetAllFriendships(RMessage message, TcpClient connection) { Console.WriteLine("GetAllFriendships"); List <FriendshipData> friendlist = FriendshipConnector.GetFriendshipList(ServerCore.GetIdByConnection(connection)); RMessage replyMessage = new RMessage(MessageType.GET_ALL_FRIENDSHIPS_REPLY, friendlist); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetQuestion MessageHandler * It handles messages of GET_QUESTION_REQUEST type. */ private static void GetQuestion(RMessage message, TcpClient connection) { Console.WriteLine("GetQuestion"); QuestionData question = QuestionConnector.GetQuestion((UInt32)(message.Data)); RMessage replyMessage = new RMessage(MessageType.GET_QUESTION_REPLY, question); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
private static void GetDomainByName(RMessage message, TcpClient connection) { Console.WriteLine("GetDomainByName"); DomainData domain = DomainConnector.GetDomainByName((String)message.Data); RMessage replyMessage = new RMessage(MessageType.GET_DOMAIN_BY_NAME_REPLY, domain); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetQuestionResources MessageHandler * It handles messages of GET_QUESTION_RESOURCES_REQUEST type. */ private static void GetQuestionResources(RMessage message, TcpClient connection) { Console.WriteLine("GetQuestionResources"); QuestionData question = (QuestionData)message.Data; List <ResourceData> resources = ResourceConnector.GetQuestionResources(question.Id); RMessage replyMessage = new RMessage(MessageType.GET_QUESTION_RESOURCES_REPLY, resources); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetAllDomains MessageHandler * It handles messages of GET_ALL_DOMAINS_REQUEST type. */ private static void GetAllDomains(RMessage message, TcpClient connection) { Console.WriteLine("GetAllDomains request"); RMessage replyMessage = new RMessage( MessageType.GET_ALL_DOMAINS_REPLY, DomainConnector.GetAllDomains()); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The CheckUserVote MessageHandler * It handles messages of CHECK_USER_VOTE_REQUEST type. */ private static void CheckUserVote(RMessage message, TcpClient connection) { Console.WriteLine("CheckUserVote"); UserVoteData userVote = (UserVoteData)message.Data; UserVoteData rating = UserVoteConnector.CheckUserVote(userVote); RMessage replyMessage; replyMessage = new RMessage(MessageType.CHECK_USER_VOTE_REPLY, rating); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The SignIn MessageHandler * It handles messages of SIGN_IN_REQUEST type. */ private static void SignIn(RMessage message, TcpClient connection) { RMessage replyMessage; UserData user1 = (UserData)message.Data; UserData user2 = UserConnector.GetUser(user1.Username); // Check if the password match if (user2 != null && user2.Password != user1.Password) { user2 = null; } // If the credentials do not match, refuse the authentification if (user2 == null) { ServerCore.GetWorkerByConnection(connection).SendMessage( new RMessage(MessageType.SIGN_IN_REPLY, null)); return; } // If the user can authenticate, disconnect another user connected // with the same username if (user2 != null) { TcpClient previousConnection = ServerCore.GetConnectionById(user2.Id); if (previousConnection != null) { ServerCore.RemoveIdConnectionMapping(user2.Id, previousConnection); replyMessage = new RMessage( MessageType.SIGN_OUT_REPLY, user2); ServerCore.GetWorkerByConnection(previousConnection) .SendMessage(replyMessage); } } List <Object> payload = new List <Object>(); payload.Add(user2); // user data payload.Add(DomainConnector.GetAllDomains()); // all domains payload.Add(DomainConnector.GetUserValidations(user2.Id)); // domains for which the user has certificates replyMessage = new RMessage( MessageType.SIGN_IN_REPLY, payload); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); // If the user connected successfully, store the connection mapping if (user2 != null) { ServerCore.AddIdConnectionMapping(user2.Id, connection); } }
/* The CheckUserDomainValidation MessageHandler * It handles messages of GET_USER_CERTIFIED_DOMAINS_REQUEST type. */ private static void CheckUserDomainValidation(RMessage message, TcpClient connection) { Console.WriteLine("GetUserDomainValidation"); List <Object> resultContent = new List <Object>(); resultContent.Add((Object)((UserData)message.Data)); resultContent.Add((Object)DomainConnector.GetUserValidations(((UserData)message.Data).Id)); RMessage replyMessage = new RMessage(MessageType.GET_USER_CERTIFIED_DOMAINS_REPLY, resultContent); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
private static void GetDomainResources(RMessage message, TcpClient connection) { Console.WriteLine("GetDomainResources"); List <Object> resultContent = new List <Object>(); resultContent.Add((Object)message.Data); resultContent.Add((Object)ResourceConnector.GetDomainResources((DomainData)message.Data)); RMessage replyMessage = new RMessage(MessageType.GET_DOMAIN_RESOURCES_REPLY, resultContent); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetResourceOwner MessageHandler * It handles messages of GET_RESOURCE_OWNER type. */ private static void GetResourceOwner(RMessage message, TcpClient connection) { Console.WriteLine("GetResourceOwner"); List <Object> resultContent = new List <Object>(); ResourceData res = (ResourceData)(((List <Object>)message.Data)[1]); resultContent.Add(((List <Object>)message.Data)[0]); resultContent.Add(((List <Object>)message.Data)[1]); resultContent.Add(UserConnector.GetUser(res.Owner)); RMessage replyMessage = new RMessage(MessageType.GET_RESOURCE_OWNER_REPLY, resultContent); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetUserInfo MessageHandler * It handles messages of GET_USER_INFO_REQUEST type. */ private static void GetUserInfo(RMessage message, TcpClient connection) { UserData user = (UserData)message.Data; user = UserConnector.GetUserById(user.Id); List <Object> list = new List <Object>(); list.Add(user); list.Add(DomainConnector.GetAllDomains()); // all domains list.Add(DomainConnector.GetUserValidations(user.Id)); // domains for which the user has certificates RMessage replyMessage = new RMessage(MessageType.GET_USER_INFO_REPLY, list); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetAllDomainsOrdered MessageHandler * It handles messages of GET_ALL_DOMAINS_ORDERED_REQUEST type. */ private static void GetAllDomainsOrdered(RMessage message, TcpClient connection) { uint uid = ServerCore.GetIdByConnection(connection); List <DomainData> validations = DomainConnector.GetUserValidations(uid); List <DomainData> nonValidations = DomainConnector.GetUserNonValidations(uid); validations.AddRange(nonValidations); RMessage replyMessage = new RMessage( MessageType.GET_ALL_DOMAINS_ORDERED_REPLY, validations); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
private static void SignOut(RMessage message, TcpClient connection) { Console.WriteLine("SignOut"); UserData user = (UserData)message.Data; Console.WriteLine("SignOut Succeeded."); ServerCore.RemoveIdConnectionMapping(user.Id, connection); RMessage replyMessage = new RMessage( MessageType.SIGN_OUT_REPLY, user); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The CheckResourceVote MessageHandler * It handles messages of RANK_CHECK_RESOURCE_VOTE_REQUEST type. */ private static void CheckResourceVote(RMessage message, TcpClient connection) { Console.WriteLine("CheckResourceVote"); UserData usr = (UserData)(((List <Object>)message.Data)[0]); ResourceData res = (ResourceData)(((List <Object>)message.Data)[1]); ResourceVoteData resVote = ResourceVoteConnector.CheckResourceVote(usr, res); List <Object> replyContent = new List <Object>(); replyContent.Add(usr); replyContent.Add(res); replyContent.Add(resVote); RMessage replyMessage = new RMessage(MessageType.RANK_CHECK_RESOURCE_VOTE_REPLY, replyContent); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The UserTakenCheck MessageHandler * It handles messages of USERNAME_TAKEN_REQUEST type. */ private static void UserTakenCheck(RMessage message, TcpClient connection) { Console.WriteLine("UserTakenCheck request"); UserData user = (UserData)message.Data; Boolean taken = false; if (user != null) { taken = (UserConnector.GetUser(user.Username) != null); } RMessage replyMessage = new RMessage( MessageType.USERNAME_TAKEN_REPLY, taken); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetFriendList MessageHandler * It handles messages of CHANGE_USER_STATE_REQUEST type. */ private static void ChangeUserState(RMessage message, TcpClient connection) { Console.WriteLine("ChangeUserState"); uint id = ServerCore.GetIdByConnection(connection); UserData user = UserConnector.UpdateUserState(id, (bool)message.Data); List <UserData> friendList = UserConnector.GetFriendList(id); RMessage replyMessage = new RMessage(MessageType.CHANGE_USER_STATE_REPLY, user); foreach (UserData friend in friendList) { ClientWorker worker = ServerCore.GetWorkerById(friend.Id); if (worker != null) { ServerCore.GetWorkerById(friend.Id).SendMessage(replyMessage); } } ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The GetResources MessageHandler * It handles messages of GET_QUESTION_RESOURCES_REQUEST type. */ private static void GetResources(RMessage message, TcpClient connection) { Console.WriteLine("GetResources"); List <DomainData> domains = (List <DomainData>)message.Data; List <ResourceData> resources = new List <ResourceData>(); for (int i = 0; i < domains.Count; i++) { List <ResourceData> res = ResourceConnector.GetDomainResources(domains[i]); for (int j = 0; j < res.Count; j++) { resources.Add(res[j]); } } RMessage replyMessage = new RMessage(MessageType.GET_QUESTION_DOMAINS_RESOURCES_REPLY, resources); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
private static void GetAnswers(RMessage message, TcpClient connection) { Console.WriteLine("GetAnswers"); UInt32 questionId = (UInt32)message.Data; List <AnswerData> answers = LogConnector.GetQuestionAnswers(questionId); List <UserData> users = new List <UserData>(); for (int i = 0; i < answers.Count; i++) { users.Add(UserConnector.GetUser(answers[i].Owner)); } List <Object> data = new List <Object>(); data.Add(answers); data.Add(users); RMessage replyMessage = new RMessage(MessageType.GET_QUESTION_ANSWERS_REPLY, data); ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage); }
/* The SignIn MessageHandler * It handles messages of END_IT_ALL_REQUEST type. */ private static void EndItAll(RMessage message, TcpClient connection) { Console.WriteLine("EndItAll"); ServerCore.GetWorkerByConnection(connection).CloseConnection(); }