mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-05-07 01:55:57 +00:00
54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package showbridge
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/jwetzell/showbridge-go/internal/common"
|
|
)
|
|
|
|
func (r *Router) HandleEvent(event common.Event, sender common.EventDestination) {
|
|
switch event.Type {
|
|
case "ping":
|
|
r.unicastEvent(common.Event{Type: "pong", Data: map[string]any{
|
|
"timestamp": time.Now().UnixMilli(),
|
|
}}, sender)
|
|
default:
|
|
r.logger.Warn("unknown event type", "eventType", event.Type)
|
|
}
|
|
}
|
|
|
|
func (r *Router) AddEventDestination(dest common.EventDestination) {
|
|
r.eventDestinationsMu.Lock()
|
|
defer r.eventDestinationsMu.Unlock()
|
|
r.eventDestinations = append(r.eventDestinations, dest)
|
|
}
|
|
|
|
func (r *Router) RemoveEventDestination(dest common.EventDestination) {
|
|
r.eventDestinationsMu.Lock()
|
|
defer r.eventDestinationsMu.Unlock()
|
|
for i, d := range r.eventDestinations {
|
|
if d.Is(dest) {
|
|
r.eventDestinations = append(r.eventDestinations[:i], r.eventDestinations[i+1:]...)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
func (r *Router) unicastEvent(event common.Event, dest common.EventDestination) {
|
|
err := dest.Send(event)
|
|
if err != nil {
|
|
r.logger.Error("failed to send event", "error", err)
|
|
}
|
|
}
|
|
|
|
func (r *Router) broadcastEvent(event common.Event) {
|
|
r.eventDestinationsMu.Lock()
|
|
defer r.eventDestinationsMu.Unlock()
|
|
for _, dest := range r.eventDestinations {
|
|
err := dest.Send(event)
|
|
if err != nil {
|
|
r.logger.Error("failed to send event", "error", err)
|
|
}
|
|
}
|
|
}
|