Я использую оболочку mosquitto c ++ для публикации сообщения / файла.
В моем тесте я могу легко отправлять сообщения, содержащие текст, но как я могу отправить файл?
Мой метод публикации:
bool Publisher::publish(const char* message) {
const int ret = mosquittopp::publish(NULL, topic_, strlen(message),
(uint8_t*) message);
/* custom log for mosquitto passing res and what I'm doing */
MosquittoLog::checkResult(ret, "sending message");
return (ret == MOSQ_ERR_SUCCESS);
}
я нахожу эта почта где объясняется, как опубликовать файл с питоном.
Есть ли в с ++ почти то же самое?
Если это так, как я могу отличить файлы от простого текста на подписчике?
void Subscriber::on_message(const struct mosquitto_message* message) {
/* pseudode
if message is file do A
else if plainText do B
*/
}
В широком смысле:
Публикация файла
Чтение файла
http://courses.cs.vt.edu/cs2604/fall02/binio.html#read
Издательский
Что я не понимаю из документации mosquitto, так это то, можете ли вы уничтожить буфер сразу после его публикации, или же он должен зависать до тех пор, пока не будет отправлено сообщение MQTT.
Различение типов данных
Либо префикс полезной нагрузки с флагом, который описывает тип данных. Или используйте другую тему MQTT для разных типов данных. Если этого не произойдет, и в зависимости от того, насколько эффективным будет ваше пространство, вы можете заключить полезную нагрузку в сообщение protobuf, JSON или XML.