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 }