Beispiel #1
0
        //-------------[ Get Messages ]---------------------//
        private RetrievedMessage BuildRetrievedMessage(Answer answer)
        {
            RetrievedMessage message = new RetrievedMessage();

            message.cursorId     = answer.Want <long>("id");
            message.messageType  = answer.Want <byte>("mtype");
            message.attrs        = answer.Want <string>("attrs");
            message.modifiedTime = answer.Want <long>("mtime");

            object originalMessage = answer.Want("msg");

            if (!CheckBinaryType(originalMessage))
            {
                message.stringMessage = (string)Convert.ChangeType(originalMessage, TypeCode.String);
            }
            else
            {
                message.binaryMessage = (byte[])originalMessage;
            }

            if (message.messageType >= 40 && message.messageType <= 50)
            {
                RTMClient.BuildFileInfo(message, errorRecorder);
            }

            return(message);
        }
Beispiel #2
0
        internal int GetMessage(out RetrievedMessage retrievedMessage, long fromUid, long toId, long messageId, int type, int timeout = 0)
        {
            retrievedMessage = null;

            TCPClient client = GetCoreClient();

            if (client == null)
            {
                return(fpnn.ErrorCode.FPNN_EC_CORE_INVALID_CONNECTION);
            }

            Quest quest = new Quest("getmsg");

            quest.Param("from", fromUid);
            quest.Param("mid", messageId);
            quest.Param("xid", toId);
            quest.Param("type", type);

            Answer answer = client.SendQuest(quest, timeout);

            if (answer.IsException())
            {
                return(answer.ErrorCode());
            }

            try
            {
                retrievedMessage = BuildRetrievedMessage(answer);
                return(fpnn.ErrorCode.FPNN_EC_OK);
            }
            catch (Exception)
            {
                return(fpnn.ErrorCode.FPNN_EC_CORE_INVALID_PACKAGE);
            }
        }
        //-- xid: peer uid, or groupId, or roomId
        //-- type: 1: p2p, 2: group; 3: room
        public bool GetMessage(Action <RetrievedMessage, int> callback, long xid, long mid, int type, int timeout = 0)
        {
            TCPClient client = GetCoreClient();

            if (client == null)
            {
                return(false);
            }

            Quest quest = new Quest("getmsg");

            quest.Param("mid", mid);
            quest.Param("xid", xid);
            quest.Param("type", type);

            return(client.SendQuest(quest, (Answer answer, int errorCode) => {
                if (errorCode == fpnn.ErrorCode.FPNN_EC_OK)
                {
                    RetrievedMessage retrievedMessage = null;
                    try
                    {
                        retrievedMessage = BuildRetrievedMessage(answer);
                    }
                    catch (Exception)
                    {
                        errorCode = fpnn.ErrorCode.FPNN_EC_CORE_INVALID_PACKAGE;
                    }
                    callback(retrievedMessage, errorCode);
                }
            }, timeout));
        }
Beispiel #4
0
        //-- toId: peer uid, or groupId, or roomId
        //-- type: 1: p2p, 2: group; 3: room
        internal bool GetMessage(Action <RetrievedMessage, int> callback, long fromUid, long toId, long messageId, int type, int timeout = 0)
        {
            TCPClient client = GetCoreClient();

            if (client == null)
            {
                if (RTMConfig.triggerCallbackIfAsyncMethodReturnFalse)
                {
                    ClientEngine.RunTask(() =>
                    {
                        callback(null, fpnn.ErrorCode.FPNN_EC_CORE_INVALID_CONNECTION);
                    });
                }

                return(false);
            }

            Quest quest = new Quest("getmsg");

            quest.Param("from", fromUid);
            quest.Param("mid", messageId);
            quest.Param("xid", toId);
            quest.Param("type", type);

            bool asyncStarted = client.SendQuest(quest, (Answer answer, int errorCode) => {
                if (errorCode == fpnn.ErrorCode.FPNN_EC_OK)
                {
                    RetrievedMessage retrievedMessage = null;
                    try
                    {
                        retrievedMessage = BuildRetrievedMessage(answer);
                    }
                    catch (Exception)
                    {
                        errorCode = fpnn.ErrorCode.FPNN_EC_CORE_INVALID_PACKAGE;
                    }
                    callback(retrievedMessage, errorCode);
                }
                else
                {
                    callback(null, errorCode);
                }
            }, timeout);

            if (!asyncStarted && RTMConfig.triggerCallbackIfAsyncMethodReturnFalse)
            {
                ClientEngine.RunTask(() =>
                {
                    callback(null, fpnn.ErrorCode.FPNN_EC_CORE_INVALID_CONNECTION);
                });
            }

            return(asyncStarted);
        }
        //-------------[ Get Messages ]---------------------//
        private RetrievedMessage BuildRetrievedMessage(Answer answer)
        {
            RetrievedMessage message = new RetrievedMessage();

            message.id    = answer.Want <long>("id");
            message.mtype = answer.Want <byte>("mtype");
            message.attrs = answer.Want <string>("attrs");
            message.mtime = answer.Want <long>("mtime");

            object originalMessage = answer.Want("msg");

            if (message.mtype != MessageMType_Audio)
            {
                if (CheckBinaryType(originalMessage))
                {
                    message.binaryMessage = (byte[])originalMessage;
                }
                else
                {
                    message.binaryMessage = ConvertStringToByteArray((string)Convert.ChangeType(originalMessage, TypeCode.String));
                }
            }
            else
            {
                if (!CheckBinaryType(originalMessage))
                {
                    message.stringMessage = (string)Convert.ChangeType(originalMessage, TypeCode.String);
                }
                else
                {
                    message.binaryMessage = (byte[])originalMessage;
                }
            }

            return(message);
        }
Beispiel #6
0
 public int GetMessage(out RetrievedMessage retrievedMessage, long fromUid, long toId, long messageId, MessageCategory messageCategory, int timeout = 0)
 {
     return(GetMessage(out retrievedMessage, fromUid, toId, messageId, (byte)messageCategory, timeout));
 }
Beispiel #7
0
 public int GetChat(out RetrievedMessage retrievedMessage, long xid, long mid, int type, int timeout = 0)
 {
     return(GetMessage(out retrievedMessage, xid, mid, type, timeout));
 }