Exemplo n.º 1
0
        /// <summary>
        /// Recalls the async.
        /// </summary>
        /// <returns>The async.</returns>
        /// <param name="message">Message.</param>
        public Task <AVIMRecalledMessage> RecallAsync(IAVIMMessage message)
        {
            var tcs      = new TaskCompletionSource <AVIMRecalledMessage>();
            var patchCmd = new PatchCommand().Recall(message);

            RunCommandAsync(patchCmd)
            .OnSuccess(t => {
                var recalledMsg = new AVIMRecalledMessage();
                AVIMMessage.CopyMetaData(message, recalledMsg);
                tcs.SetResult(recalledMsg);
            });
            return(tcs.Task);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Modifies the aysnc.
        /// </summary>
        /// <returns>The aysnc.</returns>
        /// <param name="oldMessage">要修改的消息对象</param>
        /// <param name="newMessage">新的消息对象</param>
        public Task <IAVIMMessage> UpdateAsync(IAVIMMessage oldMessage, IAVIMMessage newMessage)
        {
            var tcs      = new TaskCompletionSource <IAVIMMessage>();
            var patchCmd = new PatchCommand().Modify(oldMessage, newMessage);

            this.RunCommandAsync(patchCmd)
            .OnSuccess(t => {
                // 从旧消息对象中拷贝数据
                AVIMMessage.CopyMetaData(oldMessage, newMessage);
                // 获取更新时间戳
                var response = t.Result.Item2;
                if (response.TryGetValue("lastPatchTime", out object updatedAtObj) &&
                    long.TryParse(updatedAtObj.ToString(), out long updatedAt))
                {
                    newMessage.UpdatedAt = updatedAt;
                }
                tcs.SetResult(newMessage);
            });
            return(tcs.Task);
        }