//-------------[ 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); }
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)); }
//-- 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); }
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)); }
public int GetChat(out RetrievedMessage retrievedMessage, long xid, long mid, int type, int timeout = 0) { return(GetMessage(out retrievedMessage, xid, mid, type, timeout)); }