You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/08/05 11:56:13 UTC

[plc4x] 02/02: fix(plc4xbrowser): fixed issue where output got overwhelmed by to many message

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 13745432b4f0f75ec62505a499f987e53618234c
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Aug 5 13:56:04 2022 +0200

    fix(plc4xbrowser): fixed issue where output got overwhelmed by to many message
    
    + Messages are now displayed in a list right beside the output and on click they are displayed
---
 plc4go/tools/plc4xbrowser/commands.go |  4 ++--
 plc4go/tools/plc4xbrowser/main.go     |  5 ++++-
 plc4go/tools/plc4xbrowser/ui.go       | 36 +++++++++++++++++++++++++++++++----
 3 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/plc4go/tools/plc4xbrowser/commands.go b/plc4go/tools/plc4xbrowser/commands.go
index 7afb90fe2..b67e8c27e 100644
--- a/plc4go/tools/plc4xbrowser/commands.go
+++ b/plc4go/tools/plc4xbrowser/commands.go
@@ -156,9 +156,9 @@ var rootCommand = Command{
 					subscriptionRequest, err := connection.SubscriptionRequestBuilder().
 						AddEventQuery("subscriptionField", split[1]).
 						AddItemHandler(func(event model.PlcSubscriptionEvent) {
-							messagesReceived++
+							numberOfMessagesReceived++
 							start := time.Now()
-							_, _ = fmt.Fprintf(messageOutput, "[\"%d\"]\n%s[\"\"]", messagesReceived, event)
+							messageReceived(numberOfMessagesReceived, start, event)
 							plc4xBrowserLog.Debug().Msgf("write took %f seconds", time.Now().Sub(start).Seconds())
 						}).
 						Build()
diff --git a/plc4go/tools/plc4xbrowser/main.go b/plc4go/tools/plc4xbrowser/main.go
index 9cc64d20e..4c0e48a3f 100644
--- a/plc4go/tools/plc4xbrowser/main.go
+++ b/plc4go/tools/plc4xbrowser/main.go
@@ -22,8 +22,10 @@ package main
 import (
 	"io"
 	"sync"
+	"time"
 
 	plc4go "github.com/apache/plc4x/plc4go/pkg/api"
+	plc4goModel "github.com/apache/plc4x/plc4go/pkg/api/model"
 )
 
 var driverManager plc4go.PlcDriverManager
@@ -31,7 +33,8 @@ var driverAdded func(string)
 var connections map[string]plc4go.PlcConnection
 var connectionsChanged func()
 
-var messagesReceived int
+var messageReceived func(messageNumber int, receiveTime time.Time, message plc4goModel.PlcMessage)
+var numberOfMessagesReceived int
 var messageOutput io.Writer
 var messageOutputClear func()
 
diff --git a/plc4go/tools/plc4xbrowser/ui.go b/plc4go/tools/plc4xbrowser/ui.go
index e9cad8fdf..e79c55e52 100644
--- a/plc4go/tools/plc4xbrowser/ui.go
+++ b/plc4go/tools/plc4xbrowser/ui.go
@@ -21,6 +21,7 @@ package main
 
 import (
 	"fmt"
+	"github.com/apache/plc4x/plc4go/pkg/api/model"
 	"github.com/gdamore/tcell/v2"
 	"github.com/pkg/errors"
 	"github.com/rivo/tview"
@@ -205,17 +206,28 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 	outputAreaHeader := newPrimitive("Output")
 	outputArea := tview.NewGrid().
 		SetRows(3, 0, 10).
-		SetColumns(0).
+		SetColumns(0, 30).
 		AddItem(outputAreaHeader, 0, 0, 1, 1, 0, 0, false)
 	{
+		var jumpToMessageItem func(messageNumber int) bool
 		{
 			outputView := tview.NewTextView().
-				SetDynamicColors(true).
+				// TODO: currently this is broken due to https://github.com/rivo/tview/issues/751
+				//SetDynamicColors(true).
+				SetDynamicColors(false).
 				SetRegions(true).
 				SetWordWrap(true).
 				SetChangedFunc(func() {
 					application.Draw()
 				})
+			jumpToMessageItem = func(messageNumber int) bool {
+				regionId := strconv.Itoa(messageNumber)
+				if outputView.GetRegionText(regionId) == "" {
+					return false
+				}
+				outputView.Highlight(regionId).ScrollToHighlight()
+				return true
+			}
 			messageOutput = outputView
 			messageOutputClear = func() {
 				outputView.SetText("")
@@ -232,9 +244,9 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 				} else if len(currentSelection) > 0 {
 					index, _ := strconv.Atoi(currentSelection[0])
 					if key == tcell.KeyTab {
-						index = (index + 1) % messagesReceived
+						index = (index + 1) % numberOfMessagesReceived
 					} else if key == tcell.KeyBacktab {
-						index = (index - 1 + messagesReceived) % messagesReceived
+						index = (index - 1 + numberOfMessagesReceived) % numberOfMessagesReceived
 					} else {
 						return
 					}
@@ -260,6 +272,22 @@ func buildOutputArea(newPrimitive func(text string) tview.Primitive, application
 			consoleView.SetBorder(false)
 			outputArea.AddItem(consoleView, 2, 0, 1, 1, 0, 0, false)
 		}
+
+		{
+			receivedMessagesList := tview.NewList()
+			messageReceived = func(messageNumber int, receiveTime time.Time, message model.PlcMessage) {
+				application.QueueUpdateDraw(func() {
+					receivedMessagesList.AddItem(fmt.Sprintf("No %d @%s", messageNumber, receiveTime.Format("15:04:05.999999")), "", 0x0, func() {
+						if ok := jumpToMessageItem(messageNumber); !ok {
+							plc4xBrowserLog.Debug().Msgf("Adding new message to console output")
+							_, _ = fmt.Fprintf(messageOutput, "Message nr: %d\n[\"%d\"]%s[\"\"]\n", messageNumber, messageNumber, message)
+							jumpToMessageItem(messageNumber)
+						}
+					})
+				})
+			}
+			outputArea.AddItem(receivedMessagesList, 0, 1, 3, 1, 0, 0, false)
+		}
 	}
 	return outputArea
 }