Пример #1
0
        /* 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);
            }
        }
Пример #2
0
        /* 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);
        }
Пример #3
0
        /* 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);
        }
Пример #4
0
        /* 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);
        }
Пример #5
0
        /* 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);
        }
Пример #6
0
        /* 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);
        }
Пример #7
0
        /* 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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        /* 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);
        }
Пример #10
0
        /* 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);
        }
Пример #11
0
        /* 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);
        }
Пример #12
0
        /* 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);
            }
        }
Пример #13
0
        /* 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);
        }
Пример #14
0
        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);
        }
Пример #15
0
        /* 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);
        }
Пример #16
0
        /* 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);
        }
Пример #17
0
        /* 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);
        }
Пример #18
0
        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);
        }
Пример #19
0
        /* 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);
        }
Пример #20
0
        /* 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);
        }
Пример #21
0
        /* 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);
        }
Пример #22
0
        /* 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);
        }
Пример #23
0
        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);
        }
Пример #24
0
 /* 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();
 }