mirror of https://github.com/jetkvm/kvm.git
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package native
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
var (
|
|
videoFrameChan chan []byte = make(chan []byte)
|
|
videoStateChan chan VideoState = make(chan VideoState)
|
|
logChan chan nativeLogMessage = make(chan nativeLogMessage)
|
|
indevEventChan chan int = make(chan int)
|
|
)
|
|
|
|
func (n *Native) handleVideoFrameChan() {
|
|
lastFrame := time.Now()
|
|
for {
|
|
frame := <-videoFrameChan
|
|
now := time.Now()
|
|
sinceLastFrame := now.Sub(lastFrame)
|
|
lastFrame = now
|
|
n.onVideoFrameReceived(frame, sinceLastFrame)
|
|
}
|
|
}
|
|
|
|
func (n *Native) handleVideoStateChan() {
|
|
for {
|
|
state := <-videoStateChan
|
|
n.onVideoStateChange(state)
|
|
}
|
|
}
|
|
|
|
func (n *Native) handleLogChan() {
|
|
for {
|
|
entry := <-logChan
|
|
l := n.l.With().
|
|
Str("file", entry.File).
|
|
Str("func", entry.FuncName).
|
|
Int("line", entry.Line).
|
|
Logger()
|
|
|
|
switch entry.Level {
|
|
case zerolog.DebugLevel:
|
|
l.Debug().Msg(entry.Message)
|
|
case zerolog.InfoLevel:
|
|
l.Info().Msg(entry.Message)
|
|
case zerolog.WarnLevel:
|
|
l.Warn().Msg(entry.Message)
|
|
case zerolog.ErrorLevel:
|
|
l.Error().Msg(entry.Message)
|
|
case zerolog.PanicLevel:
|
|
l.Panic().Msg(entry.Message)
|
|
case zerolog.FatalLevel:
|
|
l.Fatal().Msg(entry.Message)
|
|
case zerolog.TraceLevel:
|
|
l.Trace().Msg(entry.Message)
|
|
case zerolog.NoLevel:
|
|
l.Info().Msg(entry.Message)
|
|
default:
|
|
l.Info().Msg(entry.Message)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (n *Native) handleIndevEventChan() {
|
|
for {
|
|
event := <-indevEventChan
|
|
name := uiEventCodeToName(event)
|
|
n.onIndevEvent(name)
|
|
}
|
|
}
|