From 99975d9f7fc25d9e0640080b90dc6d7eaba241b4 Mon Sep 17 00:00:00 2001 From: oneRain Date: Fri, 24 Apr 2020 15:38:10 +0800 Subject: [PATCH] * LCIMChatRoom.cs: * LCIMConversation.cs: * LCIMConversationQuery.cs: * LCIMServiceConversation.cs: * LCIMTemporaryConversation.cs: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * LCIMConversationController.cs: chore: 完善对话的接口 --- Realtime/Conversation/LCIMChatRoom.cs | 20 ++++++++++++++++++- Realtime/Conversation/LCIMConversation.cs | 2 +- .../Conversation/LCIMConversationQuery.cs | 2 +- .../Conversation/LCIMServiceConversation.cs | 15 ++++++++++++++ .../Conversation/LCIMTemporaryConversation.cs | 9 +++++++++ .../Controller/LCIMConversationController.cs | 19 ++++++++++++++++++ Test/Realtime.Test/LocalSignatureFactory.cs | 7 +++++++ 7 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 Test/Realtime.Test/LocalSignatureFactory.cs diff --git a/Realtime/Conversation/LCIMChatRoom.cs b/Realtime/Conversation/LCIMChatRoom.cs index 13919f8..e5f89b3 100644 --- a/Realtime/Conversation/LCIMChatRoom.cs +++ b/Realtime/Conversation/LCIMChatRoom.cs @@ -1,18 +1,36 @@ -using System.Collections.ObjectModel; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Threading.Tasks; namespace LeanCloud.Realtime { + /// + /// 聊天室 + /// public class LCIMChatRoom : LCIMConversation { public LCIMChatRoom(LCIMClient client) : base(client) { } + /// + /// 获取在线用户数量 + /// + /// public async Task GetOnlineMembersCount() { return await GetMembersCount(); } + /// + /// 获取在线用户 + /// + /// + /// public async Task> GetOnlineMembers(int limit = 50) { return await Client.ConversationController.GetOnlineMembers(Id, limit); } + + public override Task AddMembers(IEnumerable clientIds) { + throw new Exception("Add members is not allowed in chat room."); + } } } diff --git a/Realtime/Conversation/LCIMConversation.cs b/Realtime/Conversation/LCIMConversation.cs index f703d3d..b9556ce 100644 --- a/Realtime/Conversation/LCIMConversation.cs +++ b/Realtime/Conversation/LCIMConversation.cs @@ -206,7 +206,7 @@ namespace LeanCloud.Realtime { /// /// 用户 Id /// - public async Task AddMembers(IEnumerable clientIds) { + public virtual async Task AddMembers(IEnumerable clientIds) { if (clientIds == null || clientIds.Count() == 0) { throw new ArgumentNullException(nameof(clientIds)); } diff --git a/Realtime/Conversation/LCIMConversationQuery.cs b/Realtime/Conversation/LCIMConversationQuery.cs index 3e1cfa4..5904ab1 100644 --- a/Realtime/Conversation/LCIMConversationQuery.cs +++ b/Realtime/Conversation/LCIMConversationQuery.cs @@ -9,7 +9,7 @@ namespace LeanCloud.Realtime { get; private set; } - private LCIMClient client; + private readonly LCIMClient client; public LCIMConversationQuery(LCIMClient client) { Condition = new LCCompositionalCondition(); diff --git a/Realtime/Conversation/LCIMServiceConversation.cs b/Realtime/Conversation/LCIMServiceConversation.cs index b6f52c9..93e8da2 100644 --- a/Realtime/Conversation/LCIMServiceConversation.cs +++ b/Realtime/Conversation/LCIMServiceConversation.cs @@ -2,8 +2,23 @@ using System.Threading.Tasks; namespace LeanCloud.Realtime { + /// + /// 系统对话 + /// public class LCIMServiceConversation : LCIMConversation { public LCIMServiceConversation(LCIMClient client) : base(client) { } + + public async Task Subscribe() { + await Join(); + } + + public async Task Unsubscribe() { + await Quit(); + } + + public async Task CheckSubscription() { + return await Client.ConversationController.CheckSubscription(Id); + } } } diff --git a/Realtime/Conversation/LCIMTemporaryConversation.cs b/Realtime/Conversation/LCIMTemporaryConversation.cs index 3fc19c3..01f20ad 100644 --- a/Realtime/Conversation/LCIMTemporaryConversation.cs +++ b/Realtime/Conversation/LCIMTemporaryConversation.cs @@ -1,11 +1,20 @@ using System; namespace LeanCloud.Realtime { + /// + /// 临时对话 + /// public class LCIMTemporaryConversation : LCIMConversation { + /// + /// 过期时间 + /// public DateTime ExpiredAt { get; } + /// + /// 是否过期 + /// public bool IsExpired { get { return DateTime.Now > ExpiredAt; diff --git a/Realtime/Internal/Controller/LCIMConversationController.cs b/Realtime/Internal/Controller/LCIMConversationController.cs index 79c9f71..019d291 100644 --- a/Realtime/Internal/Controller/LCIMConversationController.cs +++ b/Realtime/Internal/Controller/LCIMConversationController.cs @@ -521,6 +521,25 @@ namespace LeanCloud.Realtime.Internal.Controller { return members; } + /// + /// 查询是否订阅 + /// + /// + /// + internal async Task CheckSubscription(string convId) { + ConvCommand conv = new ConvCommand(); + conv.Cids.Add(convId); + GenericCommand request = NewCommand(CommandType.Conv, OpType.IsMember); + request.ConvMessage = conv; + GenericCommand response = await Client.Connection.SendRequest(request); + JsonObjectMessage jsonObj = response.ConvMessage.Results; + Dictionary result = JsonConvert.DeserializeObject>(jsonObj.Data); + if (result.TryGetValue(convId, out object obj)) { + return (bool)obj; + } + return false; + } + private LCIMPartiallySuccessResult NewPartiallySuccessResult(IEnumerable succesfulIds, IEnumerable errors) { LCIMPartiallySuccessResult result = new LCIMPartiallySuccessResult { diff --git a/Test/Realtime.Test/LocalSignatureFactory.cs b/Test/Realtime.Test/LocalSignatureFactory.cs new file mode 100644 index 0000000..0db73d8 --- /dev/null +++ b/Test/Realtime.Test/LocalSignatureFactory.cs @@ -0,0 +1,7 @@ +using System; +namespace Realtime.Test { + public class LocalSignatureFactory { + public LocalSignatureFactory() { + } + } +}