Kepler core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

52 lines
1.0 KiB

package mqtt
import (
"fmt"
"net/url"
"time"
"github.com/eclipse/paho.mqtt.golang"
"cygnux.net/kepler/config"
)
type Broker interface {
mqtt.Client
}
type broker struct {
mqtt.Client
}
func SetupBroker(cfg config.Config) (Broker, error) {
var opts = mqtt.NewClientOptions()
if svr := cfg.GetString("server"); svr != "" {
if _, e := url.Parse(svr); nil != e {
return nil, e
} else {
opts.AddBroker(svr)
}
} else if svrs := cfg.GetStringSlice("servers"); len(svrs) > 0 {
for _, svr := range svrs {
if _, e := url.Parse(svr); nil != e {
return nil, e
} else {
opts.AddBroker(svr)
}
}
} else {
return nil, fmt.Errorf(" server or servers should be provided")
}
opts.SetClientID(cfg.GetString("clientId"))
if s := cfg.GetString("username"); s != "" {
opts.SetUsername(s)
}
if s := cfg.GetString("password"); s != "" {
opts.SetPassword(s)
}
if d := cfg.GetDuration("keepAlive"); d > time.Second {
opts.SetKeepAlive(d)
}
client := mqtt.NewClient(opts)
return broker{Client: client}, nil
}