1
0
mirror of https://github.com/shirou/mqttcli.git synced 2025-04-28 13:48:50 +08:00

first commit

This commit is contained in:
Shirou WAKAYAMA 2014-07-15 12:20:59 +09:00
commit 51150666a1
2 changed files with 160 additions and 0 deletions

102
main.go Normal file
View File

@ -0,0 +1,102 @@
package main
import (
"fmt"
"os"
"github.com/Sirupsen/logrus"
"github.com/codegangsta/cli"
)
var log = logrus.New()
var usage = `
Usage here
`
func initFunc() {
log.Formatter = new(logrus.TextFormatter)
log.Level = logrus.Debug
}
// connects MQTT broker
func connect(c *cli.Context) (*MQTTClient, error){
host := c.String("host")
port := c.Int("p")
clientId := c.String("i")
cafile := c.String("cafile")
scheme := "tcp"
if cafile != "" {
scheme = "ssl"
}
user := c.String("u")
password := c.String("P")
brokerUri := fmt.Sprintf("%s://%s:%d", scheme, host, port)
log.Info("Broker URI: %s", brokerUri)
client := NewMQTTClient()
log.Debug("Connecting...")
_, err := client.Connect(brokerUri, clientId, user, password)
if err != nil{
return nil, err
}
log.Debug("Connected")
return client, nil
}
func publish(c *cli.Context) {
client, err := connect(c)
if err != nil{
log.Error(err)
os.Exit(1)
}
qos := c.Int("q")
topic := c.String("t")
if topic == "" {
log.Errorf("Please specify topic")
os.Exit(1)
}
log.Infof("Topic: %s", topic)
payload := c.String("m")
retain := c.Bool("r")
log.Infof("Retain: %t", retain)
client.Publish(topic, []byte(payload), qos, retain)
log.Debug("Published")
}
func main() {
initFunc()
app := cli.NewApp()
app.Name = "mqttcli"
app.Usage = usage
app.Commands = []cli.Command{
{
Name: "publish",
Usage: "publish",
Flags: []cli.Flag{
cli.StringFlag{"host", "test.mosquitto.org", "Broker IP address"},
cli.IntFlag{"p", 1883, "Broker Port"},
cli.StringFlag{"t", "", "Topic"},
cli.IntFlag{"q", 0, "QoS"},
cli.StringFlag{"cafile", "", "CA file"},
cli.StringFlag{"u", "", "username"},
cli.StringFlag{"P", "", "password"},
cli.StringFlag{"i", "client0", "ClientiId"},
cli.StringFlag{"m", "test message", "Message body"},
cli.BoolFlag{"r", "Retain flag"},
},
Action: publish,
},
}
app.Run(os.Args)
}

58
mqtt.go Normal file
View File

@ -0,0 +1,58 @@
package main
import (
MQTT "git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git"
"crypto/tls"
)
type MQTTClient struct {
Opts *MQTT.ClientOptions
Client *MQTT.MqttClient
}
func NewMQTTClient() *MQTTClient {
return &MQTTClient{}
}
// connect to MQTT broker
func (m *MQTTClient) Connect(brokerUri string, clientId string,
user string, password string) (*MQTT.MqttClient, error) {
m.Opts = MQTT.NewClientOptions()
m.Opts.SetBroker(brokerUri)
m.Opts.SetClientId(clientId)
m.Opts.SetTraceLevel(MQTT.Critical)
// m.Opts.SetTraceLevel(MQTT.Verbose)
if user != "" {
m.Opts.SetUsername(user)
}
if password != "" {
m.Opts.SetPassword(password)
}
insecure := true
if insecure {
tlsConfig := &tls.Config{InsecureSkipVerify: true,}
m.Opts.SetTlsConfig(tlsConfig)
}
m.Client = MQTT.NewClient(m.Opts)
_, err := m.Client.Start()
if err != nil {
return nil, err
}
return m.Client, nil
}
func (m *MQTTClient) Publish(topic string, payload []byte, qos int, retain bool) error {
mqttmsg := MQTT.NewMessage(payload)
// FIXME: validate qos number
mqttmsg.SetQoS(MQTT.QoS(qos))
mqttmsg.SetRetainedFlag(retain)
// receipt := m.Client.PublishMessage(msg.Destination, mqttmsg)
receipt := m.Client.PublishMessage(topic, mqttmsg)
<-receipt
return nil
}