コード例 #1
0
 /// <summary>
 /// Sends a <seealso cref="QueryArchiveMessage"/> to the server and requests the MAM archive.
 /// </summary>
 /// <param name="filter">A filter for filtering the MAM results like filtering by JID.</param>
 /// <param name="rsm">Optional configuration for the result set.</param>
 /// <param name="to">The target of the request. null for request to your own server. Used for requesting MUC-MAMs.</param>
 /// <returns>The result of the request.</returns>
 public async Task<MessageResponseHelperResult<MamResult>> requestMamAsync(QueryFilter filter, Set rsm, string to)
 {
     QueryArchiveMessage msg = new QueryArchiveMessage(filter, rsm, CONNECTION.account.getFullJid(), to);
     List<QueryArchiveResultMessage> results = new List<QueryArchiveResultMessage>();
     Predicate<AbstractAddressableMessage> predicate = (x) =>
     {
         if (x is QueryArchiveResultMessage result && string.Equals(result.QUERY_ID, msg.QUERY_ID))
         {
             results.Insert(0, result);
             return false;
         }
         return x is QueryArchiveFinishMessage fin && string.Equals(fin.ID, msg.ID) && string.Equals(fin.QUERY_ID, msg.QUERY_ID);
     };
     AsyncMessageResponseHelper<AbstractAddressableMessage> helper = new AsyncMessageResponseHelper<AbstractAddressableMessage>(CONNECTION, predicate)
     {
         matchId = false
     };
     MessageResponseHelperResult<AbstractAddressableMessage> finResult = await helper.startAsync(msg);
     MamResult mamResult = null;
     if (finResult.STATE == MessageResponseHelperResultState.SUCCESS)
     {
         mamResult = new MamResult(finResult.RESULT as QueryArchiveFinishMessage, results);
     }
     return new MessageResponseHelperResult<MamResult>(finResult.STATE, mamResult);
 }
コード例 #2
0
        /// <summary>
        /// Sends a <seealso cref="QueryArchiveMessage"/> to the server and requests the MAM archive.
        /// </summary>
        /// <param name="filter">A filter for filtering the MAM results like filtering by JID.</param>
        /// <param name="rsm">Optional configuration for the result set.</param>
        /// <param name="to">The target of the request. null for request to your own server. Used for requesting MUC-MAMs.</param>
        /// <returns>The result of the request.</returns>
        public async Task <MessageResponseHelperResult <MamResult> > requestMamAsync(QueryFilter filter, Set rsm, string to)
        {
            QueryArchiveMessage msg = new QueryArchiveMessage(filter, rsm, CONNECTION.account.getFullJid(), to);
            List <QueryArchiveResultMessage>       results   = new List <QueryArchiveResultMessage>();
            Predicate <AbstractAddressableMessage> predicate = (x) =>
            {
                if (x is QueryArchiveResultMessage result && string.Equals(result.QUERY_ID, msg.QUERY_ID))
                {
                    results.Insert(0, result);
                    return(false);
                }
                if (x is IQErrorMessage && string.Equals(msg.ID, x.ID))
                {
                    return(true);
                }
                return(x is QueryArchiveFinishMessage fin && string.Equals(fin.ID, msg.ID));
            };
            AsyncMessageResponseHelper <AbstractAddressableMessage> helper = new AsyncMessageResponseHelper <AbstractAddressableMessage>(CONNECTION, predicate)
            {
                matchId = false
            };
            MessageResponseHelperResult <AbstractAddressableMessage> finResult = await helper.startAsync(msg);

            MamResult mamResult = null;

            if (finResult.STATE == MessageResponseHelperResultState.SUCCESS)
            {
                if (finResult.RESULT is QueryArchiveFinishMessage archiveFinishMessage)
                {
                    mamResult = new MamResult(finResult.RESULT as QueryArchiveFinishMessage, results);
                }
                else
                {
                    if (finResult.RESULT is IQErrorMessage errorMessage)
                    {
                        Logger.Warn($"Failed to request MAM from {to} with: {errorMessage.ERROR_OBJ}");
                    }
                    return(new MessageResponseHelperResult <MamResult>(MessageResponseHelperResultState.ERROR, null));
                }
            }
            return(new MessageResponseHelperResult <MamResult>(finResult.STATE, mamResult));
        }