csharp-sdk-upm/RTM/Source/Internal/Command/ReadCommand.cs

92 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LeanCloud.Realtime.Internal
{
internal class ReadCommand : AVIMCommand
{
internal class ConvRead
{
internal string ConvId { get; set; }
internal string MessageId { get; set; }
internal long Timestamp { get; set; }
public override bool Equals(object obj)
{
ConvRead cr = obj as ConvRead;
return cr.ConvId == this.ConvId;
}
public override int GetHashCode()
{
return this.ConvId.GetHashCode() ^ this.MessageId.GetHashCode() ^ this.Timestamp.GetHashCode();
}
}
public ReadCommand()
: base(cmd: "read")
{
}
public ReadCommand(AVIMCommand source)
: base(source)
{
}
public ReadCommand ConvId(string convId)
{
return new ReadCommand(this.Argument("cid", convId));
}
public ReadCommand ConvIds(IEnumerable<string> convIds)
{
if (convIds != null)
{
if (convIds.Count() > 0)
{
return new ReadCommand(this.Argument("cids", convIds.ToList()));
}
}
return this;
}
public ReadCommand Conv(ConvRead conv)
{
return Convs(new ConvRead[] { conv });
}
public ReadCommand Convs(IEnumerable<ConvRead> convReads)
{
if (convReads != null)
{
if (convReads.Count() > 0)
{
IList<IDictionary<string, object>> payload = new List<IDictionary<string, object>>();
foreach (var convRead in convReads)
{
var convDic = new Dictionary<string, object>();
convDic.Add("cid", convRead.ConvId);
if (!string.IsNullOrEmpty(convRead.MessageId))
{
convDic.Add("mid", convRead.MessageId);
}
if (convRead.Timestamp != 0)
{
convDic.Add("timestamp", convRead.Timestamp);
}
payload.Add(convDic);
}
return new ReadCommand(this.Argument("convs", payload));
}
}
return this;
}
}
}