//----------------------[ RTM Operations ]-------------------//
        public Answer Ping(Int64 connectionId, string endpoint, Quest quest)
        {
            AdvanceAnswer.SendAnswer(new Answer(quest));

            Int64 now = ClientEngine.GetCurrentSeconds();

            Interlocked.Exchange(ref lastPingTime, now);

            return(null);
        }
Esempio n. 2
0
        public Answer DuplexQuest(Int64 connectionId, string endpoint, Quest quest)
        {
            Console.WriteLine("Received server push. Value of key 'int' is{0}", quest.Want <int>("int"));
            AdvanceAnswer.SendAnswer(new Answer(quest));

            Console.WriteLine("Answer is sent, processor will do other thing, and function will not return.");
            Thread.Sleep(2000);
            Console.WriteLine("processor function will return.");
            return(null);
        }
        public Answer PushRoomMessage(Int64 connectionId, string endpoint, Quest quest)
        {
            AdvanceAnswer.SendAnswer(new Answer(quest));

            if (questProcessor == null)
            {
                return(null);
            }

            long from   = quest.Want <long>("from");
            long roomId = quest.Want <long>("rid");
            long mid    = quest.Want <long>("mid");

            if (duplicatedFilter.CheckRoomMessage(roomId, from, mid) == false)
            {
                return(null);
            }

            RTMMessage rtmMessage = BuildRTMMessage(quest, from, roomId, mid);

            if (rtmMessage.messageType == (byte)MessageType.Chat)
            {
                if (rtmMessage.translatedInfo != null)
                {
                    questProcessor.PushRoomChat(rtmMessage);
                }
            }
            else if (rtmMessage.messageType == (byte)MessageType.Cmd)
            {
                questProcessor.PushRoomCmd(rtmMessage);
            }
            else if (rtmMessage.messageType >= 40 && rtmMessage.messageType <= 50)
            {
                questProcessor.PushRoomFile(rtmMessage);
            }
            else
            {
                questProcessor.PushRoomMessage(rtmMessage);
            }

            return(null);
        }
        public Answer PushBroadcastMessage(Int64 connectionId, string endpoint, Quest quest)
        {
            AdvanceAnswer.SendAnswer(new Answer(quest));

            if (questProcessor == null)
            {
                return(null);
            }

            long from = quest.Want <long>("from");
            long mid  = quest.Want <long>("mid");

            if (duplicatedFilter.CheckBroadcastMessage(from, mid) == false)
            {
                return(null);
            }

            byte   mtype = quest.Want <byte>("mtype");
            string attrs = quest.Want <string>("attrs");
            long   mtime = quest.Want <long>("mtime");

            if (mtype == RTMClient.MessageMType_Chat)
            {
                TranslatedMessage tm = ProcessChatMessage(quest, out string orginialMessage);
                if (tm == null)
                {
                    questProcessor.PushBroadcastChat(from, mid, orginialMessage, attrs, mtime);
                }
                else
                {
                    questProcessor.PushBroadcastChat(from, mid, tm, attrs, mtime);
                }

                return(null);
            }

            MessageInfo messageInfo = BuildMessageInfo(quest);

            if (mtype == RTMClient.MessageMType_Audio)
            {
                byte[] audioData = messageInfo.binaryData;

                if (!messageInfo.isBinary)
                {
                    audioData = RTMClient.ConvertStringToByteArray(messageInfo.message);
                }

                questProcessor.PushBroadcastAudio(from, mid, audioData, attrs, mtime);
                return(null);
            }

            if (mtype == RTMClient.MessageMType_Cmd)
            {
                questProcessor.PushBroadcastCmd(from, mid, messageInfo.message, attrs, mtime);
            }
            else if (mtype >= 40 && mtype <= 50)
            {
                questProcessor.PushBroadcastFile(from, mtype, mid, messageInfo.message, attrs, mtime);
            }
            else
            {
                if (messageInfo.isBinary)
                {
                    questProcessor.PushBroadcastMessage(from, mtype, mid, messageInfo.binaryData, attrs, mtime);
                }
                else
                {
                    questProcessor.PushBroadcastMessage(from, mtype, mid, messageInfo.message, attrs, mtime);
                }
            }

            return(null);
        }