package services import ( "context" "git.aiterp.net/lucifer/new-server/app/config" "git.aiterp.net/lucifer/new-server/models" "log" ) func StartPublisher() { ctx := context.Background() go func() { for devices := range config.PublishChannel { if len(devices) == 0 { continue } // Emergency solution! Please avoid! // Send devices not belonging to the first channel separately bridgeID := devices[0].BridgeID for _, device := range devices { if device.BridgeID != bridgeID { config.PublishChannel<-[]models.Device{device} } } bridge, err := config.BridgeRepository().Find(ctx, devices[0].BridgeID) if err != nil { log.Println("Publishing error (1): " + err.Error()) continue } driver, err := config.DriverProvider().Provide(bridge.Driver) if err != nil { log.Println("Publishing error (2): " + err.Error()) continue } err = driver.Publish(ctx, bridge, devices) if err != nil { log.Println("Publishing error (3): " + err.Error()) continue } } }() }