mirror of https://github.com/tidwall/tile38.git
106 lines
3.0 KiB
Go
106 lines
3.0 KiB
Go
/*
|
|
* Copyright (c) 2013 IBM Corp.
|
|
*
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
*
|
|
* Contributors:
|
|
* Seth Hoenig
|
|
* Allan Stockdill-Mander
|
|
* Mike Robertson
|
|
*/
|
|
|
|
/*----------------------------------------------------------------------
|
|
This sample is designed to demonstrate the ability to set individual
|
|
callbacks on a per-subscription basis. There are three handlers in use:
|
|
brokerLoadHandler - $SYS/broker/load/#
|
|
brokerConnectionHandler - $SYS/broker/connection/#
|
|
brokerClientHandler - $SYS/broker/clients/#
|
|
The client will receive 100 messages total from those subscriptions,
|
|
and then print the total number of messages received from each.
|
|
It may take a few moments for the sample to complete running, as it
|
|
must wait for messages to be published.
|
|
-----------------------------------------------------------------------*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
MQTT "github.com/eclipse/paho.mqtt.golang"
|
|
)
|
|
|
|
var brokerLoad = make(chan bool)
|
|
var brokerConnection = make(chan bool)
|
|
var brokerClients = make(chan bool)
|
|
|
|
func brokerLoadHandler(client MQTT.Client, msg MQTT.Message) {
|
|
brokerLoad <- true
|
|
fmt.Printf("BrokerLoadHandler ")
|
|
fmt.Printf("[%s] ", msg.Topic())
|
|
fmt.Printf("%s\n", msg.Payload())
|
|
}
|
|
|
|
func brokerConnectionHandler(client MQTT.Client, msg MQTT.Message) {
|
|
brokerConnection <- true
|
|
fmt.Printf("BrokerConnectionHandler ")
|
|
fmt.Printf("[%s] ", msg.Topic())
|
|
fmt.Printf("%s\n", msg.Payload())
|
|
}
|
|
|
|
func brokerClientsHandler(client MQTT.Client, msg MQTT.Message) {
|
|
brokerClients <- true
|
|
fmt.Printf("BrokerClientsHandler ")
|
|
fmt.Printf("[%s] ", msg.Topic())
|
|
fmt.Printf("%s\n", msg.Payload())
|
|
}
|
|
|
|
func main() {
|
|
opts := MQTT.NewClientOptions().AddBroker("tcp://iot.eclipse.org:1883").SetClientID("router-sample")
|
|
opts.SetCleanSession(true)
|
|
|
|
c := MQTT.NewClient(opts)
|
|
if token := c.Connect(); token.Wait() && token.Error() != nil {
|
|
panic(token.Error())
|
|
}
|
|
|
|
if token := c.Subscribe("$SYS/broker/load/#", 0, brokerLoadHandler); token.Wait() && token.Error() != nil {
|
|
fmt.Println(token.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
if token := c.Subscribe("$SYS/broker/connection/#", 0, brokerConnectionHandler); token.Wait() && token.Error() != nil {
|
|
fmt.Println(token.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
if token := c.Subscribe("$SYS/broker/clients/#", 0, brokerClientsHandler); token.Wait() && token.Error() != nil {
|
|
fmt.Println(token.Error())
|
|
os.Exit(1)
|
|
}
|
|
|
|
loadCount := 0
|
|
connectionCount := 0
|
|
clientsCount := 0
|
|
|
|
for i := 0; i < 100; i++ {
|
|
select {
|
|
case <-brokerLoad:
|
|
loadCount++
|
|
case <-brokerConnection:
|
|
connectionCount++
|
|
case <-brokerClients:
|
|
clientsCount++
|
|
}
|
|
}
|
|
|
|
fmt.Printf("Received %3d Broker Load messages\n", loadCount)
|
|
fmt.Printf("Received %3d Broker Connection messages\n", connectionCount)
|
|
fmt.Printf("Received %3d Broker Clients messages\n", clientsCount)
|
|
|
|
c.Disconnect(250)
|
|
}
|