Beispiel #1
0
        /* The GetFriendList MessageHandler
         * It handles messages of UPDATE_FRIENDSHIP_REQ type.
         */
        private static void UpdateFriendship(RMessage message, TcpClient connection)
        {
            Console.WriteLine("UpdateFriendship");
            FriendshipData friendship = (FriendshipData)message.Data;
            RMessage       replyMessageFormer, replyMessageLatter;

            if (friendship.Status)
            {
                FriendshipConnector.ConfirmFriendship(friendship);
                replyMessageFormer = new RMessage(MessageType.CONFIRM_FRIENDSHIP_REPLY, friendship.Latter);
                replyMessageLatter = new RMessage(MessageType.CONFIRM_FRIENDSHIP_REPLY, friendship.Former);
                UserConnector.UpdateUserRank(friendship.Latter, Ranking.ADD_FRIEND);
                UserConnector.UpdateUserRank(friendship.Former, Ranking.ADD_FRIEND);
            }
            else
            {
                FriendshipConnector.DeleteFriendship(friendship);
                replyMessageFormer = new RMessage(MessageType.DENY_FRIENDSHIP_REPLY, friendship.Latter);
                replyMessageLatter = new RMessage(MessageType.DENY_FRIENDSHIP_REPLY, friendship.Former);
            }
            ClientWorker formerWorker = ServerCore.GetWorkerById(friendship.Former);

            if (formerWorker != null)
            {
                formerWorker.SendMessage(replyMessageFormer);
            }
            ClientWorker latterWorker = ServerCore.GetWorkerById(friendship.Latter);

            if (latterWorker != null)
            {
                latterWorker.SendMessage(replyMessageLatter);
            }
        }
Beispiel #2
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);
            }
        }
Beispiel #3
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);
        }
Beispiel #4
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);
        }
Beispiel #5
0
        /* The GetFriendList MessageHandler
         * It handles messages of GET_ALL_FRIENDS_REQUEST type.
         */
        private static void GetFriendList(RMessage message, TcpClient connection)
        {
            Console.WriteLine("GetFriendList");
            List <UserData> friendlist   = UserConnector.GetFriendList(ServerCore.GetIdByConnection(connection));
            RMessage        replyMessage = new RMessage(MessageType.GET_ALL_FRIENDS_REPLY, friendlist);

            ServerCore.GetWorkerByConnection(connection).SendMessage(replyMessage);
        }
Beispiel #6
0
        /* The TakeNewCert MessageHandler
         * It handles messages of MESSAGE_TYPE type.
         */
        private static void TakeNewCert(RMessage message, TcpClient connection)
        {
            List <object> list   = (List <object>)message.Data;
            UserData      user   = (UserData)list[0];
            DomainData    domain = (DomainData)list[1];
            int           score  = (int)list[2];

            UserConnector.UpdateUserRank(user.Id, GetRank(score));
            ValidationConnector.AddValidation(user.Id, domain.ID);
        }
Beispiel #7
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);
            }
        }
Beispiel #8
0
        private static void AddAnswer(RMessage message, TcpClient connection)
        {
            Console.WriteLine("ChangeQuestionStatus");
            AnswerData answer = (AnswerData)message.Data;

            LogConnector.AddAnswer(answer);
            UserConnector.UpdateUserRank(answer.Owner, Ranking.ADD_ANSWER);
            foreach (ClientWorker workersIterator in ServerCore.GetAllWorkers())
            {
                workersIterator.SendMessage(new RMessage(MessageType.ADD_ANSWER_REPLY, answer));
            }
        }
Beispiel #9
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);
        }
Beispiel #10
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);
        }
Beispiel #11
0
        /* The GetFriendList MessageHandler
         * It handles messages of ADD_SAY_REQUEST type.
         */
        private static void AddSay(RMessage message, TcpClient connection)
        {
            Console.WriteLine("AddSay");
            SayData say = (SayData)(message.Data);
            uint    id  = say.Id;

            say.Id = ServerCore.GetIdByConnection(connection);
            if (ServerCore.GetWorkerById(id) != null)
            {
                RMessage replyMessage = new RMessage(MessageType.ADD_SAY_REPLY, say);
                ServerCore.GetWorkerById(id).SendMessage(replyMessage);
            }
            UserConnector.UpdateUserRank(say.Id, Ranking.ADD_SAY);
        }
Beispiel #12
0
        /* The PostResource MessageHandler
         * It handles messages of ADD_RESOURCE_REQUEST type.
         */
        private static void PostResource(RMessage message, TcpClient connection)
        {
            Console.WriteLine("PostResource");
            ResourceConnector.AddResource((ResourceData)message.Data);
            // a lil' something for the user
            UserConnector.UpdateUserRank(ServerCore.GetIdByConnection(connection), Ranking.USER_POSTED_RESOURCE_VALUE);

            ResourceData        adddedResource = ResourceConnector.GetResource((ResourceData)message.Data);
            RMessage            replyMessage   = new RMessage(MessageType.ADD_RESOURCE_REPLY, adddedResource);
            List <ClientWorker> clientList     = ServerCore.GetAllWorkers();

            foreach (ClientWorker client in clientList)
            {
                client.SendMessage(replyMessage);
            }
        }
Beispiel #13
0
        /*
         * On connection crash, makes the user offline
         */
        private static void MakeUserOffline(TcpClient connection)
        {
            uint            id           = ServerCore.GetIdByConnection(connection);
            UserData        user         = UserConnector.UpdateUserState(id, false);
            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);
                }
            }
        }
Beispiel #14
0
        /* The GetFriendList MessageHandler
         * It handles messages of ADD_FRIEND_REQ type.
         */
        private static void AddFriend(RMessage message, TcpClient connection)
        {
            Console.WriteLine("AddFriend");
            uint     thisUserId = ServerCore.GetIdByConnection(connection);
            UserData friend     = UserConnector.GetUser((String)message.Data);
            UserData thisUser   = UserConnector.GetUser(thisUserId);

            if (friend == null)
            {
                return;
            }
            if (friend.Id == thisUserId)
            {
                return;
            }
            List <FriendshipData> friendships = FriendshipConnector.GetFriendshipList(thisUserId);

            foreach (FriendshipData friendshipIt in friendships)
            {
                if (friendshipIt.Former == friend.Id || friendshipIt.Latter == friend.Id)
                {
                    return;
                }
            }
            FriendshipData friendship = new FriendshipData(thisUserId, friend.Id, false);

            FriendshipConnector.AddFriendship(friendship);

            ClientWorker formerWorker = ServerCore.GetWorkerById(friendship.Former);
            ClientWorker latterWorker = ServerCore.GetWorkerById(friendship.Latter);

            RMessage replyMessageFormer = new RMessage(MessageType.ADD_FRIEND_REPLY, friend);
            RMessage replyMessageLatter = new RMessage(MessageType.ADD_FRIEND_REPLY, thisUser);
            RMessage replyMessage       = new RMessage(MessageType.ADD_FRIENDSHIP_REPLY, friendship);

            if (formerWorker != null)
            {
                formerWorker.SendMessage(replyMessageFormer);
                formerWorker.SendMessage(replyMessage);
            }
            if (latterWorker != null)
            {
                latterWorker.SendMessage(replyMessageLatter);
                latterWorker.SendMessage(replyMessage);
            }
        }
Beispiel #15
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);
        }
Beispiel #16
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);
        }
Beispiel #17
0
        private void TaskRegister()
        {
            var login    = loginText.text;
            var password = passwordText.text;

            var user = new User(login, password);

            var result = UserConnector.Register(user);

            if (result == "Success")
            {
                MainMenuControls.OnLoggedIn(login);
                HideBox();
            }
            else
            {
                warningText.SetActive(true);
                passwordText.text = "";
            }
        }
Beispiel #18
0
        /* The ResourceVote MessageHandler
         * It handles messages of VOTE_RESOURCE_REQUEST type.
         */
        private static void ResourceVote(RMessage message, TcpClient connection)
        {
            Console.WriteLine("VoteResource");
            ResourceVoteData resVote = (ResourceVoteData)message.Data;

            ResourceVoteData oldResVote = ResourceVoteConnector.UpdateVote(resVote);

            ResourceConnector.VoteResource(oldResVote, resVote);
            UserConnector.UpdateUserRank(ServerCore.GetIdByConnection(connection), Ranking.USER_VOTED_RESOURCE_VALUE);

            ResourceData editedResource = ResourceConnector.GetResource(resVote.Id_Resource);

            RMessage            replyMessage = new RMessage(MessageType.EDIT_RESOURCE_REPLY, editedResource);
            List <ClientWorker> clientList   = ServerCore.GetAllWorkers();

            foreach (ClientWorker client in clientList)
            {
                client.SendMessage(replyMessage);
            }
        }
Beispiel #19
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);
        }
Beispiel #20
0
        /* The AddQuestion MessageHandler
         * It handles messages of ADD_QUESTION_REQUEST type.
         */
        private static void AddQuestion(RMessage message, TcpClient connection)
        {
            Console.WriteLine("AddQuestion");
            List <Object>     data      = (List <Object>)message.Data;
            QuestionData      question0 = (QuestionData)data[0];
            List <DomainData> domains   = (List <DomainData>)data[1];

            QuestionConnector.AddQuestion(question0);
            UserConnector.UpdateUserRank(question0.Owner, Ranking.ADD_QUESTION);

            UInt32       id       = (UInt32)(Int64Connector.GetLastInsertId());
            QuestionData question = QuestionConnector.GetQuestion(id);

            QuestionConnector.AddDomainQuestion(id, domains);

            List <ClientWorker> allWorkers = ServerCore.GetAllWorkers();

            foreach (ClientWorker workersIterator in allWorkers)
            {
                workersIterator.SendMessage(new RMessage(MessageType.ADD_QUESTION_REPLY, question));
            }
        }
Beispiel #21
0
        /* The CreateNewUser MessageHandler
         * It handles messages of CREATE_NEW_USER_REQUEST type.
         */
        private static void CreateNewUser(RMessage message, TcpClient connection)
        {
            Console.WriteLine("CreateNewUser request");

            List <object>     items   = (List <object>)message.Data;
            UserData          user    = (UserData)items[0];
            List <DomainData> domains = (List <DomainData>)items[1];
            List <int>        scores  = (List <int>)items[2];

            double initialRank = 0;

            for (int i = 0; i < domains.Count; ++i)
            {
                initialRank += GetRank(scores[i]);
            }

            UserConnector.AddUser(user.Username, user.Password, user.Email, initialRank);
            user = UserConnector.GetUser(user.Username);

            foreach (DomainData item in domains)
            {
                ValidationConnector.AddValidation(user.Id, item.ID);
            }
        }
Beispiel #22
0
        /* The LogConnector MessageHandler
         * It handles messages of RANK_USER_LOGGED_TIME_REQUEST type.
         */
        private static void LogConnector(RMessage message, TcpClient connection)
        {
            double value = Ranking.USER_UP_TIME_POINT_VALUE * (Double)message.Data;

            UserConnector.UpdateUserRank(ServerCore.GetIdByConnection(connection), value);
        }