Skip to content

Commit

Permalink
join GetScreenSizeChangeChannel.
Browse files Browse the repository at this point in the history
  • Loading branch information
m1k1o committed Jan 29, 2023
1 parent 6e62b79 commit f308071
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 51 deletions.
50 changes: 23 additions & 27 deletions server/internal/capture/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,41 +55,37 @@ func (manager *CaptureManagerCtx) Start() {

go func() {
for {
_, ok := <-manager.desktop.GetBeforeScreenSizeChangeChannel()
before, ok := <-manager.desktop.GetScreenSizeChangeChannel()
if !ok {
manager.logger.Info().Msg("before screen size change channel was closed")
manager.logger.Info().Msg("screen size change channel was closed")
return
}

if manager.video.Started() {
manager.video.destroyPipeline()
}
if before {
// before screen size change, we need to destroy all pipelines

if manager.broadcast.Started() {
manager.broadcast.destroyPipeline()
}
}
}()

go func() {
for {
_, ok := <-manager.desktop.GetAfterScreenSizeChangeChannel()
if !ok {
manager.logger.Info().Msg("after screen size change channel was closed")
return
}
if manager.video.Started() {
manager.video.destroyPipeline()
}

if manager.video.Started() {
err := manager.video.createPipeline()
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
manager.logger.Panic().Err(err).Msg("unable to recreate video pipeline")
if manager.broadcast.Started() {
manager.broadcast.destroyPipeline()
}
} else {
// after screen size change, we need to recreate all pipelines

if manager.video.Started() {
err := manager.video.createPipeline()
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
manager.logger.Panic().Err(err).Msg("unable to recreate video pipeline")
}
}
}

if manager.broadcast.Started() {
err := manager.broadcast.createPipeline()
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
manager.logger.Panic().Err(err).Msg("unable to recreate broadcast pipeline")
if manager.broadcast.Started() {
err := manager.broadcast.createPipeline()
if err != nil && !errors.Is(err, types.ErrCapturePipelineAlreadyExists) {
manager.logger.Panic().Err(err).Msg("unable to recreate broadcast pipeline")
}
}
}
}
Expand Down
31 changes: 14 additions & 17 deletions server/internal/desktop/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ import (
var mu = sync.Mutex{}

type DesktopManagerCtx struct {
logger zerolog.Logger
wg sync.WaitGroup
shutdown chan struct{}
beforeScreenSizeChangeChannel chan bool
afterScreenSizeChangeChannel chan int16
config *config.Desktop
logger zerolog.Logger
wg sync.WaitGroup
shutdown chan struct{}
config *config.Desktop

screenSizeChangeChannel chan bool
}

func New(config *config.Desktop) *DesktopManagerCtx {
return &DesktopManagerCtx{
logger: log.With().Str("module", "desktop").Logger(),
shutdown: make(chan struct{}),
beforeScreenSizeChangeChannel: make(chan bool),
afterScreenSizeChangeChannel: make(chan int16),
config: config,
logger: log.With().Str("module", "desktop").Logger(),
shutdown: make(chan struct{}),
config: config,

screenSizeChangeChannel: make(chan bool),
}
}

Expand Down Expand Up @@ -84,18 +84,15 @@ func (manager *DesktopManagerCtx) Start() {
}()
}

func (manager *DesktopManagerCtx) GetBeforeScreenSizeChangeChannel() chan bool {
return manager.beforeScreenSizeChangeChannel
}

func (manager *DesktopManagerCtx) GetAfterScreenSizeChangeChannel() chan int16 {
return manager.afterScreenSizeChangeChannel
func (manager *DesktopManagerCtx) GetScreenSizeChangeChannel() chan bool {
return manager.screenSizeChangeChannel
}

func (manager *DesktopManagerCtx) Shutdown() error {
manager.logger.Info().Msgf("desktop shutting down")

close(manager.shutdown)
close(manager.screenSizeChangeChannel)
manager.wg.Wait()

xorg.DisplayClose()
Expand Down
4 changes: 2 additions & 2 deletions server/internal/desktop/xorg.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ func (manager *DesktopManagerCtx) ScreenConfigurations() map[int]types.ScreenCon

func (manager *DesktopManagerCtx) SetScreenSize(size types.ScreenSize) error {
mu.Lock()
manager.GetBeforeScreenSizeChangeChannel() <- true
manager.GetScreenSizeChangeChannel() <- true

defer func() {
manager.GetAfterScreenSizeChangeChannel() <- size.Rate
manager.GetScreenSizeChangeChannel() <- false
mu.Unlock()
}()

Expand Down
7 changes: 2 additions & 5 deletions server/internal/types/desktop.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ type DesktopErrorMessage struct {
type DesktopManager interface {
Start()
Shutdown() error
GetBeforeScreenSizeChangeChannel() chan bool
GetAfterScreenSizeChangeChannel() chan int16
GetScreenSizeChangeChannel() (before chan bool) // true - before, false - after

// clipboard
ReadClipboard() string
Expand Down Expand Up @@ -73,8 +72,6 @@ type DesktopManager interface {

// xevent
GetCursorChangedChannel() chan uint64
GetClipboardUpdatedChannel() chan bool
GetFileChooserDialogOpenedChannel() chan bool
GetFileChooserDialogClosedChannel() chan bool
GetClipboardUpdatedChannel() chan struct{}
GetEventErrorChannel() chan DesktopErrorMessage
}

0 comments on commit f308071

Please sign in to comment.