Пример #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);
            }
        }
Пример #2
0
        private SMessage SetDicObj(RMessage m)
        {
            string name;

            if (!m.Parameters.TryGetValue("name", out name))
            {
                throw new ShareMemoryException("Message 中缺少参数 \"name\", 应通过 \"name\" 参数指定要访问的 Dictionary 的 名字 。");
            }

            string key;

            if (!m.Parameters.TryGetValue("key", out key))
            {
                throw new ShareMemoryException("Message 中缺少参数 \"key\", 应通过 \"key\" 参数指定要存的值的 键 。");
            }

            if (m.Content == null)
            {
                throw new ShareMemoryException("Message 中缺少 Content , 应通过 Content 传递要放到 Dictionary 里的 对象 的 序列化数据 。");
            }

            byte[] b = new byte[m.ContentLength];

            Read(m.Content, b);

            this.mm.SetDicObj(name, key, b);

            SMessage sMsg = new SMessage();

            return(sMsg);
        }
Пример #3
0
        public void OnListDomainQuestions(RMessage message)
        {
            List <QuestionData> questions = (List <QuestionData>)message.Data;

            model.Current_all_questions = questions;
            QuestionsDomainsUpdated(model);
        }
Пример #4
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);
        }
        public void Xml2RLocationMessage()
        {
            XDocument xml = XDocument.Parse(@"<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>");
            RMessage  msg = RMessageFactory.CreateFromXml(xml);

            Assert.IsInstanceOfType(msg, typeof(RLocationMessage));
            RLocationMessage img = (RLocationMessage)msg;

            Assert.AreEqual("toUser", img.ToUserName);
            Assert.AreEqual("fromUser", img.FromUserName);
            Assert.AreEqual(1351776360, img.CreateTime);
            Assert.AreEqual("location", img.MsgType);

            Assert.AreEqual("23.134521", img.Location_X);
            Assert.AreEqual("113.358803", img.Location_Y);
            Assert.AreEqual(20, img.Scale);
            Assert.AreEqual("位置信息", img.Label);

            Assert.AreEqual("1234567890123456", img.MsgId);
        }
Пример #6
0
        public void DeleteResource()
        {
            ResourceData reqContent = model.Resource;
            RMessage     msg        = new RMessage(MessageType.DELETE_RESOURCE_REQUEST, reqContent);

            Service.Instance.AddMessage(msg);
        }
Пример #7
0
        private SMessage GetDicObj(RMessage m)
        {
            string name;

            if (!m.Parameters.TryGetValue("name", out name))
            {
                throw new ShareMemoryException("Message 中缺少参数 \"name\", 应通过 \"name\" 参数指定要访问的 Dictionary 的 名字 。");
            }

            string key;

            if (!m.Parameters.TryGetValue("key", out key))
            {
                throw new ShareMemoryException("Message 中缺少参数 \"key\", 应通过 \"key\" 参数指定要取的值的 键 。");
            }

            byte[] b = this.mm.GetDicObj(name, key);

            SMessage sMsg = new SMessage();

            if (b != null)
            {
                sMsg.Content       = new MemoryStream(b);
                sMsg.ContentLength = b.Length;
            }

            return(sMsg);
        }
Пример #8
0
        public void OnChangeQuestionStatus(RMessage message)
        {
            QuestionData question = (QuestionData)message.Data;

            for (int i = 0; i < model.All_questions.Count; i++)
            {
                if (model.All_questions[i].Id == question.Id)
                {
                    model.All_questions[i].Status = question.Status;
                    break;
                }
            }

            for (int i = 0; i < model.Current_my_questions.Count; i++)
            {
                if (model.Current_my_questions[i].Id == question.Id)
                {
                    model.Current_my_questions[i].Status = question.Status;
                    break;
                }
            }

            for (int i = 0; i < model.Current_all_questions.Count; i++)
            {
                if (model.Current_all_questions[i].Id == question.Id)
                {
                    model.Current_all_questions[i].Status = question.Status;
                    break;
                }
            }

            QuestionsDomainsUpdated(model);
        }
Пример #9
0
        /*
         * Callback functions section (for asynchronous actions).
         * These methods will be triggered by the Context.
         */
        #region callbacks

        public void OnListQuestions(RMessage message)
        {
            List <QuestionData> questions = (List <QuestionData>)message.Data;

            model.All_questions = questions;
            QuestionListReset();
        }
Пример #10
0
        public void OnListDomains(RMessage message)
        {
            List <DomainData> domains = (List <DomainData>)message.Data;

            model.Domains = domains;
            QuestionsDomainsUpdated(model);
        }
Пример #11
0
        public RMessage AddObj(RMessage obj)
        {
            var data = db.RMessages.Add(obj);

            db.SaveChanges();
            return(obj);
        }
Пример #12
0
        public bool HandleMessage(TMessage msg)
        {
            string type = msg.MsgType;

            try
            {
                if (!object.Equals(null, MsgHandlers[type]))
                {
                    List <MessageHandler> handlerList = MsgHandlers[type];
                    for (int i = 0; i < handlerList.Count; i++)
                    {
                        MessageHandler handler = handlerList[i];
                        bool           handled = false;
                        RMessage       msg_r   = handler(msg.GetMessage(), ref handled);
                        if (handled)
                        {
                            StreamWriter sw = new StreamWriter(this.OutStream);
                            sw.Write(msg_r.ToString());
                            sw.Close();
                            break;
                        }
                    }
                    return(true);
                }
            }
            catch (Exception e)
            {
                return(false);
            }
            return(false);
        }
Пример #13
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);
            }
        }
Пример #14
0
        public JsonResult LayDS(string ngay)
        {
            RMessage message = new RMessage {
                code = Resources.Global.Message_Error, success = false
            };
            List <ThongTinSanPhamVayModel> rs = new List <ThongTinSanPhamVayModel>();

            try
            {
                DateTime dtDate = DateTime.MinValue;
                if (ngay != "")
                {
                    dtDate = DateTimeFormat.ConvertddMMyyyyToDateTime(ngay);
                }
                rs = new SanPhamBLL().LayThongTinSanPhamByID(3, dtDate);
                if (rs == null)
                {
                    rs = new List <ThongTinSanPhamVayModel>();
                }
            }
            catch (BusinessException ex)
            {
                message.success = false;
                message.code    = ex.Message;
            }
            return(Json(rs, JsonRequestBehavior.AllowGet));
        }
        public void Xml2RVideoMessage()
        {
            XDocument xml = XDocument.Parse(@"<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[video]]></MsgType>
<MediaId><![CDATA[media_id]]></MediaId>
<ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId>
<MsgId>1234567890123456</MsgId>
</xml>");
            RMessage  msg = RMessageFactory.CreateFromXml(xml);

            Assert.IsInstanceOfType(msg, typeof(RVideoMessage));
            RVideoMessage img = (RVideoMessage)msg;

            Assert.AreEqual("toUser", img.ToUserName);
            Assert.AreEqual("fromUser", img.FromUserName);
            Assert.AreEqual(1357290913, img.CreateTime);
            Assert.AreEqual("video", img.MsgType);

            Assert.AreEqual("media_id", img.MediaId);
            Assert.AreEqual("thumb_media_id", img.ThumbMediaId);

            Assert.AreEqual("1234567890123456", img.MsgId);
        }
        public void Xml2RImageMessage()
        {
            XDocument xml = XDocument.Parse(@"<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[image]]></MsgType>
 <PicUrl><![CDATA[this is a url]]></PicUrl>
 <MediaId><![CDATA[media_id]]></MediaId>
 <MsgId>1234567890123456</MsgId>
 </xml>");
            RMessage  msg = RMessageFactory.CreateFromXml(xml);

            Assert.IsInstanceOfType(msg, typeof(RImageMessage));
            RImageMessage img = (RImageMessage)msg;

            Assert.AreEqual("toUser", img.ToUserName);
            Assert.AreEqual("fromUser", img.FromUserName);
            Assert.AreEqual(1348831860, img.CreateTime);
            Assert.AreEqual("image", img.MsgType);

            Assert.AreEqual("this is a url", img.PicUrl);
            Assert.AreEqual("media_id", img.MediaId);

            Assert.AreEqual("1234567890123456", img.MsgId);
        }
        public void Xml2RLinkMessage()
        {
            XDocument xml = XDocument.Parse(@"<xml>
           <ToUserName><![CDATA[toUser]]></ToUserName>
           <FromUserName><![CDATA[fromUser]]></FromUserName>
           <CreateTime>1351776360</CreateTime>
           <MsgType><![CDATA[link]]></MsgType>
           <Title><![CDATA[公众平台官网链接]]></Title>
           <Description><![CDATA[公众平台官网链接]]></Description>
           <Url><![CDATA[url]]></Url>
           <MsgId>1234567890123456</MsgId>
           </xml>");
            RMessage  msg = RMessageFactory.CreateFromXml(xml);

            Assert.IsInstanceOfType(msg, typeof(RLinkMessage));
            RLinkMessage img = (RLinkMessage)msg;

            Assert.AreEqual("toUser", img.ToUserName);
            Assert.AreEqual("fromUser", img.FromUserName);
            Assert.AreEqual(1351776360, img.CreateTime);
            Assert.AreEqual("link", img.MsgType);

            Assert.AreEqual("公众平台官网链接", img.Title);
            Assert.AreEqual("公众平台官网链接", img.Description);
            Assert.AreEqual("url", img.Url);

            Assert.AreEqual("1234567890123456", img.MsgId);
        }
Пример #18
0
        public bool OnGetResourceOwnerRule(RMessage message)
        {
            if (message.Type != MessageType.GET_RESOURCE_OWNER_REPLY)
            {
                return(false);
            }
            DomainData dom = (DomainData)(((List <Object>)message.Data)[0]);

            if (model.Domain != null && dom.ID != model.Domain.ID)
            {
                return(false);
            }
            ResourceData res = (ResourceData)(((List <Object>)message.Data)[1]);

            try
            {
                if (res.Id != model.Resource.Id)
                {
                    return(false);
                }
            }
            catch (NullReferenceException)
            {
                return(false);
            }
            return(true);
        }
Пример #19
0
        public bool TryDe <T>(out T value)
        {
            SMessage m = new SMessage();

            m.Parameters.Add(new Para("method", "Dequeue"));
            m.Parameters.Add(new Para("name", this.name));

            RMessage rMsg = this.rpc.Send(m);

            Type t = typeof(T);

            if (rMsg.ContentLength == 0)
            {
                value = default(T);
                return(false);
            }

            byte[] b = new byte[rMsg.ContentLength];

            Util.Read(rMsg.Content, b);

            DeSerializer deSerializer = new DeSerializer();

            value = deSerializer.DeSerialize <T>(b);

            return(true);
        }
Пример #20
0
        public void OnResourceDeleted(RMessage message)
        {
            // remove deleted resource from model
            ResourceData delResource = (ResourceData)message.Data;
            ResourceData localResource;

            localResource = null;
            foreach (ResourceData res in model.Resources)
            {
                if (res.Id == delResource.Id)
                {
                    localResource = res;
                }
            }
            model.Resources.Remove(localResource);

            localResource = null;
            foreach (ResourceData res in model.Resources_All)
            {
                if (res.Id == delResource.Id)
                {
                    localResource = res;
                }
            }
            model.Resources_All.Remove(localResource);

            ResourceDeleted(model);
            ShelfResourceList(model);
        }
Пример #21
0
        public bool TryGet <T>(string key, out T value)
        {
            if (key == null)
            {
                throw new ShareMemoryClientException("参数 key 不能为 null 。");
            }

            SMessage m = new SMessage();

            m.Parameters.Add(new Para("method", "GetDicObj"));
            m.Parameters.Add(new Para("name", this.name));
            m.Parameters.Add(new Para("key", key));

            RMessage rMsg = this.rpc.Send(m);

            Type t = typeof(T);

            if (rMsg.ContentLength == 0)
            {
                value = default(T);
                return(false);
            }

            byte[] b = new byte[rMsg.ContentLength];

            Util.Read(rMsg.Content, b);

            DeSerializer deSerializer = new DeSerializer();

            value = deSerializer.DeSerialize <T>(b);

            return(true);
        }
Пример #22
0
 private void WriteMsg(RMessage m)
 {
     foreach (KeyValuePair <string, string> o in m.Parameters)
     {
         WriteMsg(o.Key + " " + o.Value);
     }
 }
Пример #23
0
        public void AddFriend(String userName)
        {
            RMessage msg = new RMessage(MessageType.ADD_FRIEND_REQUEST, userName);

            // Handle the request to the service
            Service.Instance.AddMessage(msg);
        }
Пример #24
0
        /*
         * Callback functions section (for asynchronous actions).
         * These methods will be triggered by the Context.
         */
        #region callbacks

        public void OnChangeUserState(RMessage message)
        {
            UserData friend = (UserData)message.Data;

            model.Partner.Status = friend.Status;
            ChangeUserState(model);
        }
Пример #25
0
        public void OnFriendshipConfirmed(RMessage message)
        {
            uint thisUserId = LoggedInUserModel.Instance.User.Id;

            model.GetFriendshipById((uint)(message.Data)).Status = true;
            FriendListStateChanged(model);
        }
Пример #26
0
        /*
         * Commands section
         */
        #region commands

        public void GetPartnerInfo()
        {
            // Create a new request
            RMessage msg = new RMessage(MessageType.PARTNER_INFO_REQUEST, id);

            // Handle the request to the service
            Service.Instance.AddMessage(msg);
        }
Пример #27
0
        public void OnFriendshipDenied(RMessage message)
        {
            uint thisUserId = LoggedInUserModel.Instance.User.Id;

            model.Friendships.Remove(model.GetFriendshipById((uint)(message.Data)));
            model.Users.Remove(model.GetFriendById((uint)(message.Data)));
            FriendListStateChanged(model);
        }
Пример #28
0
        /*
         * Callback functions section (for asynchronous actions).
         * These methods will be triggered by the Context.
         */
        #region callbacks

        public void OnAddSay(RMessage message)
        {
            ConversationView newConversation;
            SayData          sayData = (SayData)message.Data;

            newConversation = new ConversationView(sayData.Id, model.StyleChoice);
            Context.FireCallback(message);
        }
Пример #29
0
        public void UpdateUserState(Boolean newState)
        {
            // Create a new request
            RMessage msg = new RMessage(MessageType.CHANGE_USER_STATE_REQUEST, newState);

            // Handle the request to the service
            Service.Instance.AddMessage(msg);
        }
Пример #30
0
 public bool OnGetUserInfoRule(RMessage message)
 {
     if (message.Type != MessageType.GET_USER_INFO_REPLY)
     {
         return(false);
     }
     return(true);
 }
 /// <summary>
 /// Sends a message to the rendering thread.
 /// </summary>
 /// <param name="whatMessage">The message to send</param>
 public void sendMessage(RMessage whatMessage)
 {
     lock (messageQueue)
     {
         messageQueue.Enqueue(whatMessage);
         System.Threading.Monitor.PulseAll(messageQueue);
     }
 }