func pub(c *service.Client, msg *message.PublishMessage) error { log.Printf("on publish: topic=%s payload=%s\n", string(msg.Topic()), string(msg.Payload())) pub := message.NewPublishMessage() pub.SetTopic([]byte("a/b/c/response")) pub.SetQoS(0) pub.SetPayload([]byte("Hi MQTT Server")) return c.Publish(pub, nil) }
func main() { flag.Parse() c := service.Client{} msg := message.NewConnectMessage() msg.SetWillQos(1) msg.SetVersion(4) msg.SetCleanSession(true) msg.SetClientId([]byte("surgemq")) msg.SetKeepAlive(10) msg.SetWillTopic([]byte("will")) msg.SetWillMessage([]byte("send me home")) msg.SetUsername([]byte("surgemq")) msg.SetPassword([]byte("verysecret")) // Connects to the remote server at 127.0.0.1 port 1883 str := *addr + ":" + *port c.Connect("tcp://"+str, msg) // Creates a new SUBSCRIBE message to subscribe to topic "abc" submsg := message.NewSubscribeMessage() submsg.AddTopic([]byte("abc"), 0) // Subscribes to the topic by sending the message. The first nil in the function // call is a OnCompleteFunc that should handle the SUBACK message from the server. // Nil means we are ignoring the SUBACK messages. The second nil should be a // OnPublishFunc that handles any messages send to the client because of this // subscription. Nil means we are ignoring any PUBLISH messages for this topic. c.Subscribe(submsg, onCompleteFunc, onPublishFunc) // Creates a new PUBLISH message with the appropriate contents for publishing pubmsg := message.NewPublishMessage() pubmsg.SetTopic([]byte("abc")) pubmsg.SetPayload(make([]byte, 1024)) pubmsg.SetQoS(0) // Publishes to the server by sending the message c.Publish(pubmsg, onCompleteFunc) // Disconnects from the server jklog.L().Infoln("disconnected.") for { time.Sleep(5000 * time.Millisecond) // c.Publish(pubmsg, onCompleteFunc) } c.Disconnect() }