github.com/gkstretton/dark/services/goo@v0.0.0-20231114224855-2d1a2074d446/obs/event_listeners.go (about)

     1  package obs
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/gkstretton/asol-protos/go/machinepb"
     7  	"github.com/gkstretton/dark/services/goo/events"
     8  	"github.com/gkstretton/dark/services/goo/session"
     9  )
    10  
    11  func sessionListener(sm *session.SessionManager) {
    12  	sessionChan := sm.SubscribeToEvents()
    13  	stateReportChan := events.Subscribe()
    14  	for {
    15  		select {
    16  		case <-sessionChan:
    17  			handleSessionEvent(sm)
    18  		case sr := <-stateReportChan:
    19  			handleStateReport(sr)
    20  		}
    21  	}
    22  }
    23  
    24  func handleStateReport(sr *machinepb.StateReport) {
    25  	// var scene string
    26  
    27  	// todo: proper obs scene logic
    28  	// if sr.Status == machinepb.Status_IDLE_MOVING ||
    29  	// 	sr.Status == machinepb.Status_IDLE_STATIONARY {
    30  	// 	scene = SCENE_IDLE
    31  	// } else {
    32  	// 	scene = SCENE_LIVE
    33  	// }
    34  
    35  	// err := setScene(scene)
    36  	// if err != nil {
    37  	// 	fmt.Printf("error setting scene in session listener: %v\n", err)
    38  	// }
    39  }
    40  
    41  func handleSessionEvent(e *session.SessionManager) {
    42  	var scene string
    43  
    44  	s, err := e.GetLatestSession()
    45  	if err != nil {
    46  		fmt.Printf("failed to get latest session in handleSessionEvent: %v\n", err)
    47  		scene = SCENE_ERROR
    48  	} else if s == nil {
    49  		scene = SCENE_COMPLETE
    50  	} else if s.Complete {
    51  		scene = SCENE_COMPLETE
    52  	} else if s.Paused {
    53  		scene = SCENE_PAUSED
    54  	} else {
    55  		scene = SCENE_LIVE
    56  	}
    57  
    58  	err = setScene(scene)
    59  	if err != nil {
    60  		fmt.Printf("error setting scene in session listener: %v\n", err)
    61  	}
    62  
    63  	if s != nil {
    64  		if s.Production {
    65  			setSessionNumber(int(s.ProductionId), true)
    66  		} else {
    67  			setSessionNumber(int(s.Id), false)
    68  		}
    69  	}
    70  
    71  }