internal async Task <LCIMPartiallySuccessResult> UnblockMembers(string convId, IEnumerable <string> clientIds) { BlacklistCommand blacklist = new BlacklistCommand { SrcCid = convId, }; blacklist.ToPids.AddRange(clientIds); if (Client.SignatureFactory != null) { LCIMSignature signature = await Client.SignatureFactory.CreateBlacklistSignature(convId, Client.Id, clientIds, LCIMSignatureAction.ConversationUnblockClients); blacklist.S = signature.Signature; blacklist.T = signature.Timestamp; blacklist.N = signature.Nonce; } GenericCommand request = NewCommand(CommandType.Blacklist, OpType.Unblock); request.BlacklistMessage = blacklist; GenericCommand response = await Connection.SendRequest(request); return(NewPartiallySuccessResult(response.BlacklistMessage.AllowedPids, response.BlacklistMessage.FailedPids)); }
internal async Task <LCIMPartiallySuccessResult> RemoveMembers(string convId, IEnumerable <string> removeIds) { ConvCommand conv = new ConvCommand { Cid = convId, }; conv.M.AddRange(removeIds); // 签名参数 if (Client.SignatureFactory != null) { LCIMSignature signature = await Client.SignatureFactory.CreateConversationSignature(convId, Client.Id, removeIds, LCIMSignatureAction.Kick); conv.S = signature.Signature; conv.T = signature.Timestamp; conv.N = signature.Nonce; } GenericCommand request = NewCommand(CommandType.Conv, OpType.Remove); request.ConvMessage = conv; GenericCommand response = await Connection.SendRequest(request); List <string> allowedIds = response.ConvMessage.AllowedPids.ToList(); List <ErrorCommand> errors = response.ConvMessage.FailedPids.ToList(); return(NewPartiallySuccessResult(allowedIds, errors)); }
private async Task <SessionCommand> NewSessionCommand() { SessionCommand session = new SessionCommand(); if (Client.Tag != null) { session.Tag = Client.Tag; } if (Client.DeviceId != null) { session.DeviceId = Client.DeviceId; } LCIMSignature signature = null; if (Client.SignatureFactory != null) { signature = await Client.SignatureFactory.CreateConnectSignature(Client.Id); } if (signature == null && !string.IsNullOrEmpty(Client.SessionToken)) { Dictionary <string, object> ret = await LCCore.HttpClient.Post <Dictionary <string, object> >("rtm/sign", data : new Dictionary <string, object> { { "session_token", Client.SessionToken } }); signature = new LCIMSignature { Signature = ret["signature"] as string, Timestamp = (long)ret["timestamp"], Nonce = ret["nonce"] as string }; } if (signature != null) { session.S = signature.Signature; session.T = signature.Timestamp; session.N = signature.Nonce; } return(session); }
internal async Task <LCIMConversation> CreateConv( IEnumerable <string> members = null, string name = null, bool transient = false, bool unique = true, bool temporary = false, int temporaryTtl = 86400, Dictionary <string, object> properties = null) { GenericCommand request = NewCommand(CommandType.Conv, OpType.Start); ConvCommand conv = new ConvCommand { Transient = transient, Unique = unique, }; if (members != null) { conv.M.AddRange(members); } if (temporary) { conv.TempConv = temporary; conv.TempConvTTL = temporaryTtl; } Dictionary <string, object> attrs = new Dictionary <string, object>(); if (!string.IsNullOrEmpty(name)) { attrs["name"] = name; } if (properties != null) { attrs = properties.Union(attrs.Where(kv => !properties.ContainsKey(kv.Key))) .ToDictionary(k => k.Key, v => v.Value); } conv.Attr = new JsonObjectMessage { Data = JsonConvert.SerializeObject(LCEncoder.Encode(attrs)) }; if (Client.SignatureFactory != null) { LCIMSignature signature = await Client.SignatureFactory.CreateStartConversationSignature(Client.Id, members); conv.S = signature.Signature; conv.T = signature.Timestamp; conv.N = signature.Nonce; } request.ConvMessage = conv; GenericCommand response = await Connection.SendRequest(request); string convId = response.ConvMessage.Cid; if (!Client.ConversationDict.TryGetValue(convId, out LCIMConversation conversation)) { if (transient) { conversation = new LCIMChatRoom(Client); } else if (temporary) { conversation = new LCIMTemporaryConversation(Client); } else if (properties != null && properties.ContainsKey("system")) { conversation = new LCIMServiceConversation(Client); } else { conversation = new LCIMConversation(Client); } Client.ConversationDict[convId] = conversation; } // 合并请求数据 conversation.Id = convId; conversation.Unique = unique; conversation.UniqueId = response.ConvMessage.UniqueId; conversation.Name = name; conversation.CreatorId = Client.Id; conversation.ids = members != null ? new HashSet <string>(members) : new HashSet <string>(); // 将自己加入 conversation.ids.Add(Client.Id); conversation.CreatedAt = DateTime.Parse(response.ConvMessage.Cdate); conversation.UpdatedAt = conversation.CreatedAt; return(conversation); }