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() {
+ }
+ }
+}