Browse Source

update

master
tianjialong 2 years ago
commit
fb7fb25795
  1. 10
      README.md
  2. 68
      c/main.c
  3. 9
      cpp/.clang-format
  4. 51
      cpp/.vscode/settings.json
  5. 51
      cpp/mqtt_config.cpp
  6. 36
      cpp/mqtt_config.hpp
  7. 9
      cpp/mqtt_config.json
  8. 83
      cpp/mqtt_demo.cpp

10
README.md

@ -0,0 +1,10 @@
# README
民航MQTT通讯示例代码。
C++版本编译:g++ *.cpp -l paho-mqtt3c
C语言版本编译:gcc *.c -l paho-mqtt3c

68
c/main.c

@ -0,0 +1,68 @@
#include "stdlib.h"
#include "string.h"
#include "unistd.h"
#include "MQTTClient.h"
#define ADDRESS "mqtt://iot-06z00dtdbnukzsk.mqtt.iothub.aliyuncs.com:1883"
#define USERNAME "mh_2&iekhmHv4wIC"
#define PASSWORD "8491b7d3391d51f40120bb9d81a4b713c624ce7beb216b9d37076508ac6e7446"
#define CLIENTID "iekhmHv4wIC.mh_2|securemode=2,signmethod=hmacsha256,timestamp=1680575050297|"
#define QOS 0
#define TOPIC "/sys/iekhmHv4wIC/mh_2/thing/event/property/post"
#define TIMEOUT 10000L
void publish(MQTTClient client, char *topic, char *payload)
{
MQTTClient_message message = MQTTClient_message_initializer;
message.payload = payload;
message.payloadlen = strlen(payload);
message.qos = QOS;
message.retained = 0;
MQTTClient_deliveryToken token;
MQTTClient_publishMessage(client, topic, &message, &token);
MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Send `%s` to topic `%s` \n", payload, TOPIC);
}
int on_message(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
char *payload = message->payload;
printf("Received `%s` from `%s` topic \n", payload, topicName);
MQTTClient_freeMessage(&message);
MQTTClient_free(topicName);
return 1;
}
int main(int argc, char *argv[])
{
int rc;
MQTTClient client;
MQTTClient_create(&client, ADDRESS, CLIENTID, 0, NULL);
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
conn_opts.username = USERNAME;
conn_opts.password = PASSWORD;
MQTTClient_setCallbacks(client, NULL, NULL, on_message, NULL);
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(-1);
}
else
{
printf("Connected to MQTT Broker!\n");
}
// subscribe topic
MQTTClient_subscribe(client, TOPIC, QOS);
char payload[23];
for (int i = 0; i < 100; i += 1)
{
// publish message to broker
snprintf(payload, 23, "{\"RunningState\": \"%d\"}", i);
publish(client, TOPIC, payload);
sleep(1);
}
MQTTClient_disconnect(client, TIMEOUT);
MQTTClient_destroy(&client);
return rc;
}

9
cpp/.clang-format

@ -0,0 +1,9 @@
# Defines the Chromium style for automatic reformatting.
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
Language: Cpp
BasedOnStyle: Google
ColumnLimit: 120
AlignConsecutiveMacros: true
AlignConsecutiveDeclarations: true
AlignConsecutiveAssignments: true
AlignOperands: true

51
cpp/.vscode/settings.json

@ -0,0 +1,51 @@
{
"files.associations": {
"ostream": "cpp",
"iosfwd": "cpp",
"fstream": "cpp",
"string": "cpp",
"iostream": "cpp",
"*.tcc": "cpp",
"stdexcept": "cpp",
"array": "cpp",
"atomic": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"forward_list": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"map": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"istream": "cpp",
"limits": "cpp",
"new": "cpp",
"sstream": "cpp",
"streambuf": "cpp",
"typeinfo": "cpp"
}
}

51
cpp/mqtt_config.cpp

@ -0,0 +1,51 @@
#include "mqtt_config.hpp"
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
using namespace nlohmann;
using namespace iflytop;
void MQTTConfig::initialize(string file_name) {
std::ifstream jfile(file_name);
jfile >> m_mqttConfigJson;
jfile.close();
try {
m_address = m_mqttConfigJson["address"];
m_username = m_mqttConfigJson["username"];
m_password = m_mqttConfigJson["password"];
m_clientid = m_mqttConfigJson["clientid"];
m_qos = m_mqttConfigJson["qos"];
m_topic = m_mqttConfigJson["topic"];
m_timeout = m_mqttConfigJson["timeout"];
} catch (const std::exception& e) {
std::cerr << "mqtt_config_read error: " << e.what() << '\n';
}
}
string MQTTConfig::dump() {
sstream ret;
ret << "==========================mqtt_config_dump_start===========================" << endl;
ret << "address = " << getAddress() << endl;
ret << "username = " << getUsername() << endl;
ret << "password = " << getPassword() << endl;
ret << "clientid = " << getClientid() << endl;
ret << "qos = " << getQos() << endl;
ret << "topic = " << getTopic() << endl;
ret << "timeout = " << getTimeout() << endl;
ret << "===========================mqtt_config_dump_end============================" << endl;
return ret.str();
}
string MQTTConfig::getAddress() { return m_address; }
string MQTTConfig::getUsername() { return m_username; }
string MQTTConfig::getPassword() { return m_password; }
string MQTTConfig::getClientid() { return m_clientid; }
int MQTTConfig::getQos() { return m_qos; }
string MQTTConfig::getTopic() { return m_topic; }
int MQTTConfig::getTimeout() { return m_timeout; }

36
cpp/mqtt_config.hpp

@ -0,0 +1,36 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fstream>
#include <iostream>
#include <nlohmann/json.hpp>
namespace iflytop {
using namespace std;
using namespace nlohmann;
class MQTTConfig {
private:
json m_mqttConfigJson;
string m_address;
string m_username;
string m_password;
string m_clientid;
int m_qos;
string m_topic;
int m_timeout;
public:
MQTTConfig(/* args */){};
~MQTTConfig(){};
void initialize(string file_name);
string dump();
string getAddress();
string getUsername();
string getPassword();
string getClientid();
int getQos();
string getTopic();
int getTimeout();
};
} // namespace iflytop

9
cpp/mqtt_config.json

@ -0,0 +1,9 @@
{
"address":"mqtt://iot-06z00dtdbnukzsk.mqtt.iothub.aliyuncs.com:1883",
"username": "mh_2&iekhmHv4wIC",
"password": "8491b7d3391d51f40120bb9d81a4b713c624ce7beb216b9d37076508ac6e7446",
"clientid": "iekhmHv4wIC.mh_2|securemode=2,signmethod=hmacsha256,timestamp=1680575050297|",
"qos": 0,
"topic": "/sys/iekhmHv4wIC/mh_2/thing/event/property/post",
"timeout": 10000
}

83
cpp/mqtt_demo.cpp

@ -0,0 +1,83 @@
//
// Created by zwsd
//
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <stdint>
#include <string>
#include <vector>
#include "MQTTClient.h"
#include "mqtt_config.hpp"
typedef struct {
string address;
string username;
string password;
string clientid;
int qos;
string topic;
int timeout;
} mqtt_config_t;
share_ptr<MQTTConfig> g_config;
static void publish(MQTTClient client, char *topic, char *payload) {
MQTTClient_message message = MQTTClient_message_initializer;
message.payload = payload;
message.payloadlen = strlen(payload);
message.qos = g_mqtt_config.qos;
message.retained = 0;
MQTTClient_deliveryToken token;
MQTTClient_publishMessage(client, topic, &message, &token);
MQTTClient_waitForCompletion(client, token, g_mqtt_config.timeout);
printf("Send `%s` to topic `%s` \n", payload, g_mqtt_config.topic.c_str());
}
static int on_message(void *context, char *topicName, int topicLen, MQTTClient_message *message) {
char *payload = (char *)message->payload;
printf("Received `%s` from `%s` topic \n", payload, topicName);
MQTTClient_freeMessage(&message);
MQTTClient_free(topicName);
return 1;
}
int main(int argc, char *argv[]) {
int rc;
MQTTClient client;
MQTTConfig mqttConfig;
g_config = make_shared<MQTTConfig>();
g_config->initialize("mqtt_config.json");
printf("mqtt_config.json: \n%s\n", g_config->dump().c_str());
MQTTClient_create(&client, g_mqtt_config.address.c_str(), g_mqtt_config.clientid.c_str(), 0, NULL);
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
conn_opts.username = g_mqtt_config.username.c_str();
conn_opts.password = g_mqtt_config.password.c_str();
MQTTClient_setCallbacks(client, NULL, NULL, on_message, NULL);
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
printf("Failed to connect, return code %d\n", rc);
exit(-1);
} else {
printf("Connected to MQTT Broker!\n");
}
MQTTClient_subscribe(client, g_mqtt_config.topic.c_str(), g_mqtt_config.qos);
char payload[23];
for (int i = 0; i < 100; i += 1) {
snprintf(payload, 23, "{\"RunningState\": \"%d\"}", i);
publish(client, (char *)g_mqtt_config.topic.c_str(), payload);
sleep(1);
}
MQTTClient_disconnect(client, g_mqtt_config.timeout);
MQTTClient_destroy(&client);
return 0;
}
Loading…
Cancel
Save