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
}