74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package controllers
|
|
|
|
import (
|
|
"esdi/tui/internal/services"
|
|
"esdi/tui/internal/views"
|
|
|
|
"github.com/gdamore/tcell/v2"
|
|
)
|
|
|
|
type StreamingCtrl struct {
|
|
*Controller
|
|
Service *services.CDashService
|
|
StreamView *views.StreamView
|
|
Messages chan string
|
|
Internal chan string
|
|
Run bool
|
|
OnExit func()
|
|
isRunning bool
|
|
TelemServ *services.TelemetryService
|
|
}
|
|
|
|
func NewStreamingCtrl(
|
|
base *Controller,
|
|
serCDash *services.CDashService,
|
|
serTelem *services.TelemetryService,
|
|
) *StreamingCtrl {
|
|
ctrl := &StreamingCtrl{
|
|
Controller: base,
|
|
Service: serCDash,
|
|
TelemServ: serTelem,
|
|
Messages: make(chan string, 10),
|
|
Internal: make(chan string, 10),
|
|
Run: false,
|
|
StreamView: views.NewStreamView(),
|
|
isRunning: false,
|
|
}
|
|
|
|
ctrl.registerHooks()
|
|
|
|
return ctrl
|
|
}
|
|
|
|
func (sc *StreamingCtrl) registerHooks() {
|
|
sc.StreamView.TextView.SetInputCapture(func(ev *tcell.EventKey) *tcell.EventKey {
|
|
switch ev.Key() {
|
|
case tcell.KeyEsc:
|
|
sc.OnExit()
|
|
}
|
|
|
|
switch ev.Rune() {
|
|
case 's':
|
|
// Start
|
|
sc.Start()
|
|
case 'p':
|
|
// Pause
|
|
// sc.Stop()
|
|
}
|
|
|
|
return ev
|
|
})
|
|
}
|
|
|
|
func (sc *StreamingCtrl) Start() {
|
|
stream := sc.TelemServ.StartStream()
|
|
|
|
go func() {
|
|
for msg := range stream {
|
|
sc.App.QueueUpdateDraw(func() {
|
|
sc.StreamView.Update(msg)
|
|
})
|
|
}
|
|
}()
|
|
}
|