public Task <BroadcastProfileMessage> GetProfile(Signature signature, DateTime?creationTimeLowerLimit) { if (signature == null) { throw new ArgumentNullException(nameof(signature)); } var BroadcastClue = _coreManager.GetBroadcastClue(signature, "Profile"); if (BroadcastClue == null) { return(Task.FromResult <BroadcastProfileMessage>(null)); } if (creationTimeLowerLimit != null && BroadcastClue.CreationTime <= creationTimeLowerLimit) { return(Task.FromResult <BroadcastProfileMessage>(null)); } return(Task.Run(() => { try { var stream = _coreManager.VolatileGetStream(BroadcastClue.Metadata, 1024 * 1024 * 32); if (stream == null) { return null; } var content = ContentConverter.FromStream <ProfileContent>(stream, 0); if (content == null) { return null; } var result = new BroadcastProfileMessage( BroadcastClue.Certificate.GetSignature(), BroadcastClue.CreationTime, content); return result; } catch (Exception e) { Log.Error(e); } return null; })); }
public Task <IEnumerable <MulticastCommentMessage> > GetMulticastCommentMessages(Tag tag, int trustMessageCountUpperLimit, int untrustMessageCountUpperLimit, IEnumerable <MessageCondition> conditions) { if (tag == null) { throw new ArgumentNullException(nameof(tag)); } var now = DateTime.UtcNow; return(Task.Run(() => { try { var filter = new Dictionary <Signature, HashSet <DateTime> >(); { foreach (var item in conditions) { filter.GetOrAdd(item.AuthorSignature, (_) => new HashSet <DateTime>()).Add(item.CreationTime); } } var trustedMetadatas = new List <MulticastClue>(); var untrustedMetadatas = new List <MulticastClue>(); { foreach (var MulticastClue in _coreManager.GetMulticastClues(tag, "ChatMessage")) { if (_searchSignatures.Contains(MulticastClue.Certificate.GetSignature())) { trustedMetadatas.Add(MulticastClue); } else { untrustedMetadatas.Add(MulticastClue); } } trustedMetadatas.Sort((x, y) => y.CreationTime.CompareTo(x.CreationTime)); untrustedMetadatas.Sort((x, y) => { int c; if (0 != (c = y.Cost.CashAlgorithm.CompareTo(x.Cost.CashAlgorithm))) { return c; } if (0 != (c = y.Cost.Value.CompareTo(x.Cost.Value))) { return c; } return y.CreationTime.CompareTo(x.CreationTime); }); } var results = new List <MulticastCommentMessage>(); foreach (var MulticastClue in CollectionUtils.Unite(trustedMetadatas.Take(trustMessageCountUpperLimit), untrustedMetadatas.Take(untrustMessageCountUpperLimit))) { if (filter.TryGetValue(MulticastClue.Certificate.GetSignature(), out var hashSet) && hashSet.Contains(MulticastClue.CreationTime)) { continue; } var stream = _coreManager.VolatileGetStream(MulticastClue.Metadata, 1024 * 1024 * 1); if (stream == null) { continue; } var content = ContentConverter.FromStream <CommentContent>(stream, 0); if (content == null) { continue; } var result = new MulticastCommentMessage( MulticastClue.Tag, MulticastClue.Certificate.GetSignature(), MulticastClue.CreationTime, MulticastClue.Cost, content); results.Add(result); } return (IEnumerable <MulticastCommentMessage>)results.ToArray(); } catch (Exception e) { Log.Error(e); } return Array.Empty <MulticastCommentMessage>(); })); }