package main
import (
"flag"
"fmt"
"sync"
"time"
//导入mqtt包
MQTT "github.com/eclipse/paho.mqtt.golang"
)
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
fmt.Printf("TOPIC: %s\n", msg.Topic())
fmt.Printf("MSG: %s\n", msg.Payload())
}
var fail_nums int = 0
func main() {
//生成连接的客户端数
c := flag.Uint64("n", 3000, "client nums")
flag.Parse()
nums := int(*c)
wg := sync.WaitGroup{}
for i := 0; i < nums; i++ {
wg.Add(1)
time.Sleep(5 * time.Millisecond)
go createTask(i, &wg)
}
wg.Wait()
}
func createTask(taskId int, wg *sync.WaitGroup) {
defer wg.Done()
opts := MQTT.NewClientOptions().AddBroker("tcp://192.168.1.110:1883").SetUsername("test").SetPassword("test")
opts.SetClientID(fmt.Sprintf("go-simple-client:%d-%d", taskId, time.Now().Unix()))
opts.SetDefaultPublishHandler(f)
opts.SetConnectTimeout(time.Duration(60) * time.Second)
//创建连接
c := MQTT.NewClient(opts)
if token := c.Connect(); token.WaitTimeout(time.Duration(60)*time.Second) && token.Wait() && token.Error() != nil {
fail_nums++
fmt.Printf("taskId:%d,fail_nums:%d,error:%s \n", taskId, fail_nums, token.Error())
return
}
//每隔5秒向topic发送一条消息
i := 0
for {
i++
time.Sleep(time.Duration(5) * time.Second)
text := fmt.Sprintf("this is msg #%d! from task:%d", i, taskId)
token := c.Publish("test", 1, false, text)
token.Wait()
}
c.Disconnect(250)
fmt.Println("task ok!!")
}
package main
import (
"bytes"
"crypto/rand"
"crypto/tls"
"encoding/json"
"flag"
"fmt"
"math/big"
"sync"
"time"
MQTT "github.com/eclipse/paho.mqtt.golang"
)
type Device struct {
ID int `json:"id"`
Mac string `json:"mac"`
Name string `json:"name"`
ProductType string `json:"product_type"`
Lang string `json:"lang"`
IP string `json:"ip"`
IP2 string `json:"ip2"`
Gateway string `json:"gateway"`
Gateway2 string `json:"gateway2"`
Netmask string `json:"netmask"`
Netmask2 string `json:"netmask2"`
Inet string `json:"inet"`
AreaID int `json:"area_id"`
State int `json:"state"`
RestartTime string `json:"restart_time"`
LiveDetection int `json:"live_detection"`
FeverHigh float32 `json:"fever_high"`
FeverLow float32 `json:"fever_low"`
TempAdd float32 `json:"temp_add"`
FaceRecThred float32 `json:"face_rec_thred"`
FaceMinThred float32 `json:"half_face_rec_thred"`
GateIsOpen int `json:"gate_is_open"`
GateOpenType int `json:"gate_open_type"`
GateOpenDur int `json:"gate_open_dur"`
GateOpenCondition int `json:"gate_open_condition"`
IoType int `json:"io_type"`
IDThred float32 `json:"id_thred"`
VisitorGateOpenType int `json:"visitor_gate_open_type"`
VisitorCardNo string `json:"visitor_card_no"`
Volume int `json:"volume"`
ScreenOff int `json:"screen_off"`
ScreenFillLight int `json:"screen_fill_light"`
SuccessMsg string `json:"success_msg"`
FailMsg string `json:"fail_msg"`
Version string `json:"version"`
LogSnap int `json:"log_snap"`
SyncPeriod int `json:"sync_period"`
FlowKeep int `json:"flow_keep"`
LastConnect string `json:"last_connect"`
LastModify string `json:"last_modify"`
CreateTime string `json:"create_time"`
Online bool `json:"online"`
GateVoltage int `json:"gate_voltage"`
GateAlarm int `json:"gate_alarm"`
GateAlarmSec int `json:"gate_alarm_sec"`
Brightness int `json:"brightness"`
AutoBacklightCom int `json:"auto_backlight_com"`
AudioUpload string `json:"audio_upload"`
OSVersion string `json:"os_version"`
APKversion string `json:"apk_version"`
MyVersion string `json:"funpacs_version"`
}
type DeviceState struct {
CPU float32 `json:"CPU"`
CPUTemp float32 `json:"CPUTemp"`
Memory int64 `json:"Memory"`
Runtime int64 `json:"runtime"`
APK int `json:"APK"`
APKRuntime int64 `json:"APKRuntime"`
NPU bool `json:"NPU"`
}
type MqttMsg struct {
Mac string `json:"mac"`
Cate string `json:"cate"`
SubCate int `json:"subCate"`
Cmd string `json:"cmd"`
SN uint64 `json:"SN"`
Time int64 `json:"time"`
DeviceData Device `json:"deviceData"`
DeviceState DeviceState `json:"deviceState"`
}
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
fmt.Printf("TOPIC: %s\n", msg.Topic())
fmt.Printf("MSG: %s\n", msg.Payload())
}
func CreateRandomString(len int) string {
var container string
var str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
b := bytes.NewBufferString(str)
length := b.Len()
bigInt := big.NewInt(int64(length))
for i := 0; i < len; i++ {
randomInt, _ := rand.Int(rand.Reader, bigInt)
container += string(str[randomInt.Int64()])
}
return container
}
var fail_nums int = 0
var gMyDevice Device
func main() {
fmt.Println("PACS test start")
//生成连接的客户端数
c := flag.Uint64("n", 1, "client nums")
flag.Parse()
nums := int(*c)
fmt.Println("Client number: ", nums)
wg := sync.WaitGroup{}
for i := 0; i < nums; i++ {
wg.Add(1)
time.Sleep(5 * time.Millisecond)
go createTask(i, &wg)
}
wg.Wait()
}
func createTask(taskId int, wg *sync.WaitGroup) {
defer wg.Done()
opts := MQTT.NewClientOptions().AddBroker("tls://192.168.6.123:8883").SetUsername("superpacsmqtt").SetPassword("mqttpacssuper")
opts.SetClientID(fmt.Sprintf("pacs-test-client:%d-%d", taskId, time.Now().Unix()))
opts.SetTLSConfig(&tls.Config{InsecureSkipVerify: true})
opts.SetDefaultPublishHandler(f)
opts.SetConnectTimeout(time.Duration(60) * time.Second)
//创建连接
c := MQTT.NewClient(opts)
if token := c.Connect(); token.WaitTimeout(time.Duration(60)*time.Second) && token.Wait() && token.Error() != nil {
fail_nums++
fmt.Printf("taskId:%d,fail_nums:%d,error:%s \n", taskId, fail_nums, token.Error())
return
}
gServerRunTime := time.Now().Unix()
//mac := "TEST" + strconv.Itoa(taskId)
mac := "TEST" + CreateRandomString(8)
topic := "hub/funpacs/u/" + mac
gMyDevice.ID = taskId
gMyDevice.Mac = mac
gMyDevice.Name = mac
gMyDevice.ProductType = "MS-5738"
gMyDevice.Lang = "en"
gMyDevice.State = 1
gMyDevice.MyVersion = "1.0.68"
data := MqttMsg{SN: 1, Time: time.Now().Unix(), Mac: mac, Cate: "status", Cmd: "deviceData", DeviceData: gMyDevice}
jsDat, _ := json.Marshal(&data)
msg := string(jsDat)
fmt.Println(msg)
c.Publish(topic, 1, false, msg)
//每隔5秒向topic发送一条消息
i := 0
for {
i++
time.Sleep(time.Duration(5) * time.Second)
runtime := time.Now().Unix() - gServerRunTime
ds := DeviceState{Runtime: runtime, APK: i}
sdata := MqttMsg{SN: 1, Time: time.Now().Unix(), Mac: mac, Cate: "status", Cmd: "deviceStat", DeviceState: ds}
jsDat, _ := json.Marshal(&sdata)
msg := string(jsDat)
fmt.Println(msg)
token := c.Publish(topic, 1, false, msg)
token.Wait()
}
}