napperley
11/30/2020, 1:13 AMAlexey Belkov [JB]
11/30/2020, 1:15 PMArtyom Degtyarev [JB]
11/30/2020, 1:16 PMnapperley
11/30/2020, 10:08 PMmaven {
url = uri("<https://dl.bintray.com/digieng/development>")
}
After adding the repository the dependency is added. In this case the dependency is applied to the linuxX64 target:
linuxX64("linuxX64") {
compilations.getByName("main") {
dependencies {
val kmqttClientVer = "0.2.1-dev"
implementation("org.digieng:kmqtt-client:$kmqttClientVer")
}
cinterops.create("paho_mqtt") {
val pahoMqttDir = "${System.getenv("HOME")}/paho_mqtt_c-1.3.7"
val includeDir = "$pahoMqttDir/include"
compilerOpts(includeDir)
extraOpts("-libraryPath", "$pahoMqttDir/lib")
includeDirs(includeDir)
}
}
// ...
}
With the library it is recommended to create a definition file called paho_mqtt.def, that is stored in src/nativeInterop/cinterop. Inside the def file add the following:
headers = MQTTClient.h MQTTClientPersistence.h
headerFilter = MQTTClient.h MQTTClientPersistence.h
staticLibraries.linux = libpaho-mqtt3c.a
---
static inline MQTTClient_connectOptions* createMqttConnectionOptions() {
MQTTClient_connectOptions* options = (MQTTClient_connectOptions*) malloc(sizeof(MQTTClient_connectOptions));
options->struct_id[0] = 'M';
options->struct_id[1] = 'Q';
options->struct_id[2] = 'T';
options->struct_id[3] = 'C';
options->struct_version = 6;
options->reliable = 1;
options->will = NULL;
options->username = NULL;
options->password = NULL;
options->retryInterval = 0;
options->ssl = NULL;
options->serverURIcount = 0;
options->serverURIs = NULL;
options->MQTTVersion = MQTTVERSION_DEFAULT;
options->maxInflightMessages = -1;
return options;
}
static inline MQTTClient_message* createMqttMessage() {
MQTTClient_message* msg = (MQTTClient_message*) malloc(sizeof(MQTTClient_message));
return msg;
}
fun main(args: Array<String>) {
val mqttHost = args.last().split(":").first()
val mqttPort = args.last().split(":").last().toUInt()
val mqttClient = MqttClient(brokerUrl = "tcp://$host:$port")
val mqttConnOptions = MqttConnectionOptions()
mqttClient.deliveryCompleteHandler = { println("Published message.") }
mqttClient?.connect(mqttConnOptions)
val msg = MqttMessage(payload = "Hello World! :)")
while (true) {
mqttClient.publish(topic = "/greeting", msg = msg)
}
}