publish method
Implementation
Future<dynamic> publish(
String key,
String channel,
Map<String, dynamic> message,
int ttl
) async {
// if (message["type"] != "RECEIPTS")
print("publish message");
// message["id"] = generateMd5(key);
// divide image to chunks
if (message["type"] == MediaType.audio ||
message["type"] == MediaType.video ||
message["type"] == MediaType.image ||
message["type"] == MediaType.file) {
List<Uint8List> listofChunks =
byteToChunks(base64.decode(message["content"]));
Map<String, dynamic> header = {
"headerId": generateMd5(key),
"totalPacket": listofChunks.length,
"size": base64.decode(message["content"]).length,
"topic": message["to"],
};
message.remove("content");
message.addAll(header);
print("this is header of file $message");
publishMessage(key, channel, message,ttl);
for (int i = 1; i <= listofChunks.length; i++) {
await Future.delayed(Duration(microseconds: 0), () {
// Do something
print("publish message in loop $i");
Map<String, dynamic> filePacket = {
"messageId": message["id"],
"packetNo": i,
"topic": message["to"],
"content": base64.encode(listofChunks[i - 1]),
};
message.remove("totalPacket");
message.remove("size");
message.addAll(filePacket);
print("this is file packet$message");
publishMessage(key, channel, message,ttl);
});
}
} else {
publishMessage(key, channel, message,ttl);
}
// print("this is publised message $message");
// MqttQos qos = MqttQos.atLeastOnce;
// bool retain = false;
// // var options = new Map<String, String>();
// // if (!me) options["me"] = "0";
// // if (ttl > 0) options["ttl"] = ttl.toString();
// var topic = _formatChannel(key, channel, null);
// // var chatid = generateMd5(key);
// // print("chat id: $chatid");
// print("This is before publish");
// final builder = MqttClientPayloadBuilder();
// builder.addString(jsonEncode(message));
// return _mqtt.publishMessage(topic, qos, builder.payload, retain: retain);
}