* LCIMChatRoom.cs:

* LCIMConversation.cs:
* LCIMConversationQuery.cs:
* LCIMServiceConversation.cs:
* LCIMTemporaryConversation.cs:

* LCIMConversationController.cs: chore: 完善对话的接口
oneRain 2020-04-24 15:38:10 +08:00
parent d6411d8b0d
commit 99975d9f7f
7 changed files with 71 additions and 3 deletions

View File

@ -1,18 +1,36 @@
using System.Collections.ObjectModel; using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace LeanCloud.Realtime { namespace LeanCloud.Realtime {
/// <summary>
/// 聊天室
/// </summary>
public class LCIMChatRoom : LCIMConversation { public class LCIMChatRoom : LCIMConversation {
public LCIMChatRoom(LCIMClient client) : public LCIMChatRoom(LCIMClient client) :
base(client) { base(client) {
} }
/// <summary>
/// 获取在线用户数量
/// </summary>
/// <returns></returns>
public async Task<int> GetOnlineMembersCount() { public async Task<int> GetOnlineMembersCount() {
return await GetMembersCount(); return await GetMembersCount();
} }
/// <summary>
/// 获取在线用户
/// </summary>
/// <param name="limit"></param>
/// <returns></returns>
public async Task<ReadOnlyCollection<string>> GetOnlineMembers(int limit = 50) { public async Task<ReadOnlyCollection<string>> GetOnlineMembers(int limit = 50) {
return await Client.ConversationController.GetOnlineMembers(Id, limit); return await Client.ConversationController.GetOnlineMembers(Id, limit);
} }
public override Task<LCIMPartiallySuccessResult> AddMembers(IEnumerable<string> clientIds) {
throw new Exception("Add members is not allowed in chat room.");
}
} }
} }

View File

@ -206,7 +206,7 @@ namespace LeanCloud.Realtime {
/// </summary> /// </summary>
/// <param name="clientIds">用户 Id</param> /// <param name="clientIds">用户 Id</param>
/// <returns></returns> /// <returns></returns>
public async Task<LCIMPartiallySuccessResult> AddMembers(IEnumerable<string> clientIds) { public virtual async Task<LCIMPartiallySuccessResult> AddMembers(IEnumerable<string> clientIds) {
if (clientIds == null || clientIds.Count() == 0) { if (clientIds == null || clientIds.Count() == 0) {
throw new ArgumentNullException(nameof(clientIds)); throw new ArgumentNullException(nameof(clientIds));
} }

View File

@ -9,7 +9,7 @@ namespace LeanCloud.Realtime {
get; private set; get; private set;
} }
private LCIMClient client; private readonly LCIMClient client;
public LCIMConversationQuery(LCIMClient client) { public LCIMConversationQuery(LCIMClient client) {
Condition = new LCCompositionalCondition(); Condition = new LCCompositionalCondition();

View File

@ -2,8 +2,23 @@
using System.Threading.Tasks; using System.Threading.Tasks;
namespace LeanCloud.Realtime { namespace LeanCloud.Realtime {
/// <summary>
/// 系统对话
/// </summary>
public class LCIMServiceConversation : LCIMConversation { public class LCIMServiceConversation : LCIMConversation {
public LCIMServiceConversation(LCIMClient client) : base(client) { public LCIMServiceConversation(LCIMClient client) : base(client) {
} }
public async Task Subscribe() {
await Join();
}
public async Task Unsubscribe() {
await Quit();
}
public async Task<bool> CheckSubscription() {
return await Client.ConversationController.CheckSubscription(Id);
}
} }
} }

View File

@ -1,11 +1,20 @@
using System; using System;
namespace LeanCloud.Realtime { namespace LeanCloud.Realtime {
/// <summary>
/// 临时对话
/// </summary>
public class LCIMTemporaryConversation : LCIMConversation { public class LCIMTemporaryConversation : LCIMConversation {
/// <summary>
/// 过期时间
/// </summary>
public DateTime ExpiredAt { public DateTime ExpiredAt {
get; get;
} }
/// <summary>
/// 是否过期
/// </summary>
public bool IsExpired { public bool IsExpired {
get { get {
return DateTime.Now > ExpiredAt; return DateTime.Now > ExpiredAt;

View File

@ -521,6 +521,25 @@ namespace LeanCloud.Realtime.Internal.Controller {
return members; return members;
} }
/// <summary>
/// 查询是否订阅
/// </summary>
/// <param name="convId"></param>
/// <returns></returns>
internal async Task<bool> 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<string, object> result = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonObj.Data);
if (result.TryGetValue(convId, out object obj)) {
return (bool)obj;
}
return false;
}
private LCIMPartiallySuccessResult NewPartiallySuccessResult(IEnumerable<string> succesfulIds, private LCIMPartiallySuccessResult NewPartiallySuccessResult(IEnumerable<string> succesfulIds,
IEnumerable<ErrorCommand> errors) { IEnumerable<ErrorCommand> errors) {
LCIMPartiallySuccessResult result = new LCIMPartiallySuccessResult { LCIMPartiallySuccessResult result = new LCIMPartiallySuccessResult {

View File

@ -0,0 +1,7 @@
using System;
namespace Realtime.Test {
public class LocalSignatureFactory {
public LocalSignatureFactory() {
}
}
}