MCPcopy Create free account
hub / github.com/CyCoreSystems/ari-proxy / manageBridge

Function manageBridge

_examples/bridge/main.go:96–143  ·  view source on GitHub ↗
(ctx context.Context, h *ari.BridgeHandle, wg *sync.WaitGroup)

Source from the content-addressed store, hash-verified

94}
95
96func manageBridge(ctx context.Context, h *ari.BridgeHandle, wg *sync.WaitGroup) {
97 // Delete the bridge when we exit
98 defer h.Delete()
99
100 destroySub := h.Subscribe(ari.Events.BridgeDestroyed)
101 defer destroySub.Cancel()
102
103 enterSub := h.Subscribe(ari.Events.ChannelEnteredBridge)
104 defer enterSub.Cancel()
105
106 leaveSub := h.Subscribe(ari.Events.ChannelLeftBridge)
107 defer leaveSub.Cancel()
108
109 wg.Done()
110 for {
111 select {
112 case <-ctx.Done():
113 return
114 case <-destroySub.Events():
115 log.Debug("bridge destroyed")
116 return
117 case e, ok := <-enterSub.Events():
118 if !ok {
119 log.Error("channel entered subscription closed")
120 return
121 }
122 v := e.(*ari.ChannelEnteredBridge)
123 log.Debug("channel entered bridge", "channel", v.Channel.Name)
124 go func() {
125 if err := play.Play(ctx, h, play.URI("sound:confbridge-join")).Err(); err != nil {
126 log.Error("failed to play join sound", "error", err)
127 }
128 }()
129 case e, ok := <-leaveSub.Events():
130 if !ok {
131 log.Error("channel left subscription closed")
132 return
133 }
134 v := e.(*ari.ChannelLeftBridge)
135 log.Debug("channel left bridge", "channel", v.Channel.Name)
136 go func() {
137 if err := play.Play(ctx, h, play.URI("sound:confbridge-leave")).Err(); err != nil {
138 log.Error("failed to play leave sound", "error", err)
139 }
140 }()
141 }
142 }
143}

Callers 1

ensureBridgeFunction · 0.85

Calls 8

CancelMethod · 0.80
DoneMethod · 0.80
EventsMethod · 0.80
ErrMethod · 0.80
DeleteMethod · 0.45
SubscribeMethod · 0.45
ErrorMethod · 0.45
PlayMethod · 0.45

Tested by

no test coverage detected