Ejemplo n.º 1
0
        public void MaximumIsGreaterThanAnyDateTime()
        {
            var t1 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t1, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t1) > 0);

            var t2 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t2, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t2) > 0);

            var t3 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Unspecified));

            Assert.IsTrue(MessageTimestamp.Compare(t3, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t3) > 0);

            var t4 = new MessageTimestamp(new DateTime(1, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t4, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t4) > 0);

            var t5 = new MessageTimestamp(new DateTime(1, DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t5, MessageTimestamp.MaxValue) < 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MaxValue, t5) > 0);
        }
Ejemplo n.º 2
0
        private static void AssertResponseMessage(MessageId messageId, MessageTimestamp messageTimestamp, int amount, Guid purchaseId, string externalTransactionId, PaymentResponseMessage <StandardPaymentResponseTxn> message)
        {
            Assert.AreEqual(messageId, message.MessageInfo.MessageId);
            Assert.AreEqual(messageTimestamp, message.MessageInfo.MessageTimestamp);
            Assert.AreEqual(ApiVersion, message.MessageInfo.ApiVersion);
            Assert.AreEqual(MerchantId, message.MerchantInfo.MerchantId);
            Assert.AreEqual(RequestType.Payment, message.RequestType);

            Assert.AreEqual(int.Parse(StatusCode), message.Status.StatusCode);
            Assert.AreEqual(StatusDescription, message.Status.StatusDescription);

            Assert.AreEqual(amount, message.Payment.TxnList.Txn.Amount);
            Assert.AreEqual(Currency.AUD, message.Payment.TxnList.Txn.Currency);
            Assert.AreEqual(purchaseId, message.Payment.TxnList.Txn.PurchaseId);
            Assert.AreEqual(true, message.Payment.TxnList.Txn.IsApproved);
            Assert.AreEqual(ResponseCode, message.Payment.TxnList.Txn.ResponseCode);
            Assert.AreEqual(ResponseText, message.Payment.TxnList.Txn.ResponseText);
            Assert.AreEqual(SettlementDate, message.Payment.TxnList.Txn.SettlementDate);
            Assert.AreEqual(externalTransactionId, message.Payment.TxnList.Txn.ExternalTransactionId);

            Assert.AreEqual(Pan, message.Payment.TxnList.Txn.CreditCardInfo.Pan);
            Assert.AreEqual(ExpiryDate, message.Payment.TxnList.Txn.CreditCardInfo.ExpiryDate);
            Assert.AreEqual(CreditCardType.Visa, message.Payment.TxnList.Txn.CreditCardInfo.CardType);
            Assert.AreEqual(CreditCardType.Visa.ToString(), message.Payment.TxnList.Txn.CreditCardInfo.CardDescription);
        }
Ejemplo n.º 3
0
        public void MinimumIsLessThanAnyDateTime()
        {
            Func <long, long> localTicksToUtcTicks = ticks => new DateTime(ticks, DateTimeKind.Local).ToUniversalTime().Ticks;

            var t1 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t1, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t1) < 0);

            var t2 = new MessageTimestamp(new DateTime(localTicksToUtcTicks(3423), DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t2, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t2) < 0);

            var t3 = new MessageTimestamp(new DateTime(3423, DateTimeKind.Unspecified));

            Assert.IsTrue(MessageTimestamp.Compare(t3, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t3) < 0);

            var t4 = new MessageTimestamp(new DateTime(1, DateTimeKind.Local));

            Assert.IsTrue(MessageTimestamp.Compare(t4, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t4) < 0);

            var t5 = new MessageTimestamp(new DateTime(localTicksToUtcTicks(1), DateTimeKind.Utc));

            Assert.IsTrue(MessageTimestamp.Compare(t5, MessageTimestamp.MinValue) > 0);
            Assert.IsTrue(MessageTimestamp.Compare(MessageTimestamp.MinValue, t5) < 0);
        }
Ejemplo n.º 4
0
 public FrameBegin(long position, long endPosition, IThread t, MessageTimestamp time, StringSlice name, StringSlice rawText = new StringSlice())
     :
     base(position, endPosition, t, time, rawText)
 {
     this.name  = name;
     this.flags = MessageFlag.StartFrame;
 }
Ejemplo n.º 5
0
 public Content(long position, long endPosition, IThread t, MessageTimestamp time, StringSlice msg, SeverityFlag s, StringSlice rawText = new StringSlice())
     :
     base(position, endPosition, t, time, rawText)
 {
     this.message = msg;
     this.flags   = MessageFlag.Content | (MessageFlag)s;
 }
Ejemplo n.º 6
0
 private static void AssertResponseMessage(MessageId messageId, MessageTimestamp messageTimestamp, ResponseMessage message)
 {
     Assert.AreEqual(messageId, message.MessageInfo.MessageId);
     Assert.AreEqual(messageTimestamp, message.MessageInfo.MessageTimestamp);
     Assert.AreEqual(ApiVersion, message.MessageInfo.ApiVersion);
     Assert.AreEqual(MerchantId, message.MerchantInfo.MerchantId);
     Assert.AreEqual(RequestType.Echo, message.RequestType);
 }
Ejemplo n.º 7
0
 void Reset()
 {
     content.Length = 0;
     attribName     = null;
     thread         = null;
     dateTime       = new MessageTimestamp();
     severity       = SeverityFlag.Info;
 }
Ejemplo n.º 8
0
        public void TestParseMessageTimestamp()
        {
            var now = DateTime.Now;
            var messageTimestamp1 = new MessageTimestamp(new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond));
            var messageTimestamp2 = MessageTimestamp.Parse(messageTimestamp1.ToString());

            Assert.AreEqual(messageTimestamp2, messageTimestamp1);
        }
Ejemplo n.º 9
0
        public virtual IEnumerator <ITask> SetTimerHandler(SetTimer setTimer)
        {
            MessageTimestamp timeStamp = setTimer.GetHeader <MessageTimestamp>();
            DateTime         start;

            if (timeStamp == null)
            {
                start = DateTime.Now;
            }
            else
            {
                start = timeStamp.Value;
            }

            StringBuilder log = new StringBuilder();

            if (_state.Timeout > 0 && _state.Expires > DateTime.Now)
            {
                log.AppendFormat(
                    CultureInfo.InvariantCulture,
                    "Override previous timer of {0}ms, expected at {1}.",
                    _state.Timeout,
                    _state.Expires
                    );
#if URT_MINCLR
                log.Append("\n");
#else
                log.AppendLine();
#endif
            }

            if (setTimer.Body.Interval > 0)
            {
                _state.Timeout = setTimer.Body.Interval;
                _state.Expires = start.AddMilliseconds(_state.Timeout);

                log.AppendFormat(
                    CultureInfo.InvariantCulture,
                    "Set new timer of {0}ms, expected at {1}.",
                    _state.Timeout,
                    _state.Expires
                    );
            }
            else
            {
                _state.Timeout = 0;
                _state.Expires = DateTime.MaxValue;

                log.Append("Timer stopped");
            }
            LogVerbose(log.ToString());

            setTimer.ResponsePort.Post(DefaultUpdateResponseType.Instance);

            SendNotification(_subMgr, setTimer);
            yield break;
        }
Ejemplo n.º 10
0
        public void TestCloneResponseMessage()
        {
            // Deserialize.

            var messageId         = MessageId.NewMessageId();
            var messageTimestamp  = new MessageTimestamp(DateTime.Now);
            var serializedMessage = string.Format(ResponseMessageFormat, messageId, messageTimestamp);
            var message           = (ResponseMessage)Serialization.Deserialize(serializedMessage).Clone();

            // Check.

            AssertResponseMessage(messageId, messageTimestamp, message);
        }
Ejemplo n.º 11
0
        public void TimeZoneTest()
        {
            var m1 = new MessageTimestamp(new DateTime(123213213, DateTimeKind.Local));

            Assert.AreEqual(MessageTimestampTimezone.Unknown, m1.TimeZone);

            var m2 = new MessageTimestamp(new DateTime(123213213, DateTimeKind.Unspecified));

            Assert.AreEqual(MessageTimestampTimezone.Unknown, m2.TimeZone);

            var m3 = new MessageTimestamp(new DateTime(123213213, DateTimeKind.Utc));

            Assert.AreEqual(MessageTimestampTimezone.UTC, m3.TimeZone);
        }
Ejemplo n.º 12
0
        public int CompareTo(TextLogEventTrigger t)
        {
            int x;

            if ((x = Math.Sign(this.StreamPosition - t.StreamPosition)) != 0)
            {
                return(x);
            }
            if ((x = MessageTimestamp.Compare(this.Timestamp, t.Timestamp)) != 0)
            {
                return(x);
            }
            return(0);
        }
        public void Verify(int actualLine, IMessage actualMessage, int actualFrameLevel)
        {
            ExpectedMessage expectedMessage;

            if (expectedMessages.TryGetValue(actualLine, out expectedMessage))
            {
                expectedMessage.Verified = true;
                Assert.IsNotNull(actualMessage);
                if (expectedMessage.Date != null)
                {
                    Assert.IsTrue(MessageTimestamp.EqualStrict(expectedMessage.Date.Value, actualMessage.Time),
                                  string.Format("Expected message timestamp: {0}, actual: {1}", expectedMessage.Date.Value, actualMessage.Time));
                }
                else if (expectedMessage.DateVerifier != null)
                {
                    Assert.IsTrue(expectedMessage.DateVerifier(actualMessage.Time));
                }
                if (expectedMessage.Thread != null)
                {
                    Assert.AreEqual(expectedMessage.Thread, actualMessage.Thread.ID);
                }
                if (expectedMessage.Type != null)
                {
                    Assert.AreEqual(expectedMessage.Type.Value, actualMessage.Flags & MessageFlag.TypeMask);
                }
                if (expectedMessage.ContentType != null)
                {
                    Assert.AreEqual(expectedMessage.ContentType.Value, actualMessage.Flags & MessageFlag.ContentTypeMask);
                }
                if (expectedMessage.Text != null)
                {
                    if (expectedMessage.TextNeedsNormalization)
                    {
                        Assert.AreEqual(StringUtils.NormalizeLinebreakes(expectedMessage.Text), StringUtils.NormalizeLinebreakes(actualMessage.Text.Value));
                    }
                    else
                    {
                        Assert.AreEqual(expectedMessage.Text, actualMessage.Text.Value);
                    }
                }
                else if (expectedMessage.TextVerifier != null)
                {
                    Assert.IsTrue(expectedMessage.TextVerifier(actualMessage.Text.Value));
                }
                if (expectedMessage.FrameLevel != null)
                {
                    Assert.AreEqual(expectedMessage.FrameLevel.Value, actualFrameLevel);
                }
            }
        }
Ejemplo n.º 14
0
        public void TestDeserializeResponseMessageWithThinlink()
        {
            // Deserialize.

            var       messageId             = MessageId.NewMessageId();
            var       messageTimestamp      = new MessageTimestamp(DateTime.Now);
            const int amount                = 10;
            var       purchaseId            = Guid.NewGuid();
            var       externalTransactionId = Guid.NewGuid().ToString();
            var       serializedMessage     = string.Format(ResponseMessageFormat, messageId, messageTimestamp, amount, purchaseId, externalTransactionId, Thinlink);
            var       message               = Serialization.Deserialize <StandardPaymentResponseTxn>(serializedMessage);

            // Check.

            AssertResponseMessage(messageId, messageTimestamp, amount, purchaseId, externalTransactionId, message);
        }
Ejemplo n.º 15
0
        public void TestCloneResponseMessage()
        {
            // Deserialize.

            var       messageId             = MessageId.NewMessageId();
            var       messageTimestamp      = new MessageTimestamp(DateTime.Now);
            const int amount                = 10;
            var       purchaseId            = Guid.NewGuid();
            var       externalTransactionId = Guid.NewGuid().ToString();
            var       serializedMessage     = string.Format(ResponseMessageFormat, messageId, messageTimestamp, amount, purchaseId, externalTransactionId);
            var       message               = (PaymentResponseMessage <RefundResponseTxn>)Serialization.Deserialize <RefundResponseTxn>(serializedMessage).Clone();

            // Check.

            AssertResponseMessage(messageId, messageTimestamp, amount, purchaseId, externalTransactionId, message);
        }
Ejemplo n.º 16
0
        public static int Compare(StateInspectorEvent evt1, MessageTimestamp evt2time, ILogSource evt2source, long evt2Position)
        {
            int sign = MessageTimestamp.Compare(evt1.Trigger.Timestamp.Adjust(evt1.Output.LogSource.TimeOffsets), evt2time);

            if (sign != 0)
            {
                return(sign);
            }
            sign = MessagesComparer.CompareLogSourceConnectionIds(
                evt1.Output.LogSource.GetSafeConnectionId(), evt2source.GetSafeConnectionId());
            if (sign != 0)
            {
                return(sign);
            }
            sign = Math.Sign(evt1.Trigger.StreamPosition - evt2Position);
            return(sign);
        }
Ejemplo n.º 17
0
        public void LoselessFormatTest()
        {
            var d1 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Local));
            var d2 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Utc));
            var d3 = new MessageTimestamp(new DateTime(2010, 10, 22, 3, 3, 4, DateTimeKind.Unspecified));

            var d1_str      = d1.StoreToLoselessFormat();
            var d2_str      = d2.StoreToLoselessFormat();
            var d3_str      = d3.StoreToLoselessFormat();
            var d1_restored = MessageTimestamp.ParseFromLoselessFormat(d1_str);
            var d2_restored = MessageTimestamp.ParseFromLoselessFormat(d2_str);
            var d3_restored = MessageTimestamp.ParseFromLoselessFormat(d3_str);

            Assert.AreEqual(0, MessageTimestamp.Compare(d1, d1_restored));
            Assert.AreEqual(0, MessageTimestamp.Compare(d2, d2_restored));
            Assert.AreEqual(0, MessageTimestamp.Compare(d2, d2_restored));
        }
Ejemplo n.º 18
0
        public int CompareThreads(IThread t1, IThread t2)
        {
            if (t1.IsDisposed || t2.IsDisposed)
            {
                return(0);
            }
            int ret = 0;

            switch (sortColumn)
            {
            case 0:
                ret = string.Compare(t2.ID, t1.ID);
                break;

            case 1:
                ret = MessageTimestamp.Compare(GetBookmarkDate(t2.FirstKnownMessage), GetBookmarkDate(t1.FirstKnownMessage));
                break;

            case 2:
                ret = MessageTimestamp.Compare(GetBookmarkDate(t2.LastKnownMessage), GetBookmarkDate(t1.LastKnownMessage));
                break;
            }
            return(ascending ? ret : -ret);
        }
Ejemplo n.º 19
0
        static VisualizerNode MakeRootNode(
            IReadOnlyList <IStateInspectorOutputsGroup> groups,
            EventHandler <NodeCreatedEventArgs> nodeCreationHandler,
            ImmutableDictionary <ILogSource, string> annotationsMap,
            VisualizerNode existingRoot
            )
        {
            var existingRoots = existingRoot.Children.ToLookup(c => c.InspectedObject);

            var children = ImmutableList.CreateRange(
                groups.SelectMany(
                    group => group.Roots.Select(rootObj =>
            {
                var existingNode = existingRoots[rootObj].FirstOrDefault();
                if (existingNode != null)
                {
                    return(existingNode.SetAnnotationsMap(annotationsMap));
                }
                var newNode = MakeVisualizerNode(rootObj, 1, annotationsMap);
                newNode.SetInitialProps(nodeCreationHandler);                                 // call handler on second phase when all children and parents are initiated
                return(newNode);
            })
                    )
                );

            children = children.Sort((n1, n2) => MessageTimestamp.Compare(GetNodeTimestamp(n1), GetNodeTimestamp(n2)));

            var result = new VisualizerNode(null, children, true, false, 0, annotationsMap);

            if (!result.HasSelectedNodes && result.Children.Count > 0)
            {
                result = result.Children[0].Select(true);
            }

            return(result);
        }
Ejemplo n.º 20
0
 static MessageTimestamp ParseDateTime(string str)
 {
     return(MessageTimestamp.ParseFromLoselessFormat(str));
 }
Ejemplo n.º 21
0
 internal TextLogEventTrigger(XmlReader reader)
     : this(
         long.Parse(reader.GetAttribute(triggerPositionAttrShort)),
         MessageTimestamp.ParseFromLoselessFormat(reader.GetAttribute(triggerTimestampAttrShort)))
 {
 }
Ejemplo n.º 22
0
 public TextLogEventTrigger(IBookmark bmk)
 {
     StreamPosition = bmk.Position;
     Timestamp      = new MessageTimestamp(bmk.Time.Adjust(bmk.GetLogSource().TimeOffsets.Inverse()).ToUnspecifiedTime());
 }
Ejemplo n.º 23
0
 public TextLogEventTrigger(long position, MessageTimestamp timestamp)
 {
     this.StreamPosition = position;
     this.Timestamp      = new MessageTimestamp(timestamp.ToUnspecifiedTime());
 }
Ejemplo n.º 24
0
 public TextLogEventTrigger(XElement evtElement) : this(
         long.Parse(evtElement.Attribute(triggerPositionAttr).Value),
         MessageTimestamp.ParseFromLoselessFormat(evtElement.Attribute(triggerTimestampAttr).Value))
 {
 }
Ejemplo n.º 25
0
        /// <summary>
        /// Read a scope info
        /// </summary>
        public virtual async Task <(SyncContext, long)> GetLocalTimestampAsync(SyncContext context, MessageTimestamp message)
        {
            // Open the connection
            using (var connection = this.CreateConnection())
            {
                try
                {
                    await connection.OpenAsync();

                    var scopeBuilder     = this.GetScopeBuilder();
                    var scopeInfoBuilder = scopeBuilder.CreateScopeInfoBuilder(message.ScopeInfoTableName, connection);
                    var localTime        = scopeInfoBuilder.GetLocalTimestamp();
                    return(context, localTime);
                }
                finally
                {
                    if (connection.State != ConnectionState.Closed)
                    {
                        connection.Close();
                    }
                }
            }
        }
Ejemplo n.º 26
0
 public string ToLine()
 {
     return($"{JsonFileVersion}|{MinerClientVersion}|{Time.ToString()}|{MessageTimestamp.ToString()}|{OutputKeywordTimestamp.ToString()}|{WsStatus.ToString()}");
 }
Ejemplo n.º 27
0
        void EnsureTreeView()
        {
            if (!treeViewInvalidated)
            {
                return;
            }
            treeViewInvalidated = false;

            var  oldRoots      = view.EnumCollection(view.RootNodesCollection).ToList();
            var  newRoots      = new List <NodeInfo>();
            bool updateStarted = false;

            MarkAllViewPartsAsDead();
            foreach (var group in model.Groups)
            {
                TreeViewPart part;
                if (!viewPartsCache.TryGetValue(group.Key, out part))
                {
                    viewPartsCache.Add(group.Key, part = new TreeViewPart()
                    {
                        Key = group.Key
                    });

                    foreach (var rootObj in group.Roots)
                    {
                        if (!updateStarted)
                        {
                            view.BeginTreeUpdate();
                            updateStarted = true;
                        }
                        var nodesToCollapse = new List <NodeInfo>();
                        var rootNode        = CreateViewNode(view, new NodesCollectionInfo(), rootObj, 0, nodesToCollapse);
                        part.RootNodes.Add(rootNode);
                        view.ExpandAll(rootNode);
                        nodesToCollapse.ForEach(view.Collapse);
                    }
                }
                newRoots.AddRange(part.RootNodes);
                part.OutputIsAlive = true;
            }
            RemoveDeadViewPartsFromCache();

            newRoots.Sort((n1, n2) => MessageTimestamp.Compare(GetNodeTimestamp(n1), GetNodeTimestamp(n2)));

            bool propsNeedUpdating = false;

            if (!newRoots.SequenceEqual(oldRoots))
            {
                if (!updateStarted)
                {
                    view.BeginTreeUpdate();
                }

                var oldSelectedNodes = view.SelectedNodes;
                var newSelectedNodes = (
                    from selectedNode in oldSelectedNodes
                    let selectedObj = GetInspectedObject(selectedNode)
                                      where selectedObj != null
                                      let selectedObjRoot = selectedObj.GetRoot()
                                                            where newRoots.Any(r => r.Tag == selectedObjRoot)
                                                            select selectedNode
                    ).ToArray();

                view.Clear(view.RootNodesCollection);
                foreach (var rootNode in newRoots)
                {
                    view.AddNode(view.RootNodesCollection, rootNode);
                }

                if (newSelectedNodes.Length > 0)
                {
                    view.SelectedNodes = newSelectedNodes;
                    selectedObjectsPathsBeforeSelectionLoss.Clear();
                }
                else if (oldSelectedNodes.Length > 0)
                {
                    selectedObjectsPathsBeforeSelectionLoss.Clear();
                    selectedObjectsPathsBeforeSelectionLoss.AddRange(
                        from selectedNode in oldSelectedNodes
                        let selectedObj = GetInspectedObject(selectedNode)
                                          where selectedObj != null
                                          select new InspectedObjectPath(selectedObj)
                        );
                }
                else if (selectedObjectsPathsBeforeSelectionLoss.Count > 0)
                {
                    newSelectedNodes = (
                        from p in selectedObjectsPathsBeforeSelectionLoss
                        let n = p.Follow(this)
                                where n != null
                                select n.Value
                        ).ToArray();
                    if (newSelectedNodes.Length > 0)
                    {
                        view.SelectedNodes = newSelectedNodes;
                        view.ScrollSelectedNodesInView();
                        selectedObjectsPathsBeforeSelectionLoss.Clear();
                    }
                }

                view.EndTreeUpdate();
            }
            newRoots.ForEach(UpdateRootNodeText);

            if (propsNeedUpdating)
            {
                UpdateSelectedObjectPropertiesAndHistory();
            }
        }
Ejemplo n.º 28
0
 public async Task <(SyncContext, Int64)> GetLocalTimestampAsync(SyncContext ctx, MessageTimestamp message)
 => await this.LocalProvider.GetLocalTimestampAsync(ctx, message);
Ejemplo n.º 29
0
 public FrameEnd(long position, long endPosition, IThread thread, MessageTimestamp time, StringSlice rawText = new StringSlice())
     :
     base(position, endPosition, thread, time, rawText)
 {
     this.flags = MessageFlag.EndFrame;
 }
Ejemplo n.º 30
0
        async Task <bool> IScreenBuffer.MoveToBookmark(
            IBookmark bookmark,
            BookmarkLookupMode mode,
            CancellationToken cancellation)
        {
            using (CreateTrackerForNewOperation(string.Format("MoveToBookmark({0})", mode), cancellation))
            {
                var matchMode                = mode & BookmarkLookupMode.MatchModeMask;
                MessageTimestamp dt          = bookmark.Time;
                long             position    = bookmark.Position;
                int    lineIndex             = bookmark.LineIndex;
                string logSourceCollectionId = bookmark.LogSourceConnectionId;
                var    tmp   = buffers.ToDictionary(s => s.Key, s => new SourceBuffer(s.Value));
                var    tasks = tmp.Select(s => new
                {
                    buf  = s.Value,
                    task =
                        (buffers.Count == 1 && matchMode == BookmarkLookupMode.ExactMatch) ?
                        GetScreenBufferLines(s.Key, position, bufferSize, EnumMessagesFlag.Forward | EnumMessagesFlag.IsActiveLogPositionHint, isRawLogMode, cancellation) :
                        GetScreenBufferLines(s.Key, dt.ToLocalDateTime(), bufferSize, isRawLogMode, cancellation),
                }).ToList();
                await Task.WhenAll(tasks.Select(i => i.task));

                cancellation.ThrowIfCancellationRequested();
                foreach (var t in tasks)
                {
                    t.buf.Set(t.task.Result);
                }
                bool messageFound = false;
                if (matchMode == BookmarkLookupMode.FindNearestTime)
                {
                    messageFound = true;
                }
                else
                {
                    foreach (var i in GetMessagesInternal(tmp.Values).Forward(0, int.MaxValue))
                    {
                        var cmp = MessagesComparer.CompareLogSourceConnectionIds(i.Message.Message.GetConnectionId(), logSourceCollectionId);
                        if (cmp == 0)
                        {
                            cmp = Math.Sign(i.Message.Message.Position - position);
                        }
                        if (cmp == 0)
                        {
                            cmp = Math.Sign(((SourceBuffer)i.SourceCollection).Get(i.SourceIndex).LineIndex - lineIndex);
                        }
                        if (matchMode == BookmarkLookupMode.ExactMatch)
                        {
                            messageFound = cmp == 0;
                        }
                        else if (matchMode == BookmarkLookupMode.FindNearestBookmark)
                        {
                            messageFound = cmp > 0;
                        }
                        if (messageFound)
                        {
                            break;
                        }
                        var sb = ((SourceBuffer)i.SourceCollection);
                        sb.UnnededTopMessages++;
                    }
                }
                if (!messageFound)
                {
                    if (matchMode == BookmarkLookupMode.FindNearestBookmark)
                    {
                        await MoveToStreamsEndInternal(cancellation);

                        return(true);
                    }
                    return(false);
                }

                buffers = tmp;

                FinalizeSourceBuffers();

                if (AllLogsAreAtEnd())
                {
                    await MoveToStreamsEndInternal(cancellation);
                }
                else
                {
                    SetScrolledLines(0);
                    if ((mode & BookmarkLookupMode.MoveBookmarkToMiddleOfScreen) != 0)
                    {
                        var additionalSpace = ((int)Math.Floor(viewSize) - 1) / 2;
                        if (additionalSpace > 0)
                        {
                            await ShiftByInternal(-additionalSpace, cancellation);
                        }
                    }
                }

                return(true);
            }
        }