2017-05-31 42 views
1

libmosquitを使用して1つのブローカーからメッセージを取得して別のブローカーに公開する方法はありますか?Mosquitto - 1つのブローカーを購読し、Cを使用して別のブローカーにプッシュ

Schematics

そのかわいいだけmosquito_publish機能に話題を変更することが簡単ではなく、ブローカーの設定は

mosquitto_connect(mosq, "localhost",1883 , 60); 

が 例えばmosquitto_connet二回目の実行で行われます

mosquitto_connect(mosq, "mqtt.example.io",1883 , 60); 

は、最後の接続になります。

私は2つのモスキートの構造体を作成しようとしましたが、情報を取得して適切なブローカーにプッシュするために、メッセージフォームのサブチャネルについて2番目の情報を通知する方法はわかりません。

+0

もちろん、他の質問は、中央のクライアントを使用するのではなく、2つのブローカーをブリッジすることができない理由です。 – hardillb

+0

最初のブローカーからのメッセージに基づいて公開するメッセージの内容を変更する必要があります。 – pzydziak

答えて

2

への最後のコールの詳細を保持しているので(私もそれをテストしていませんでした)。エラーチェックを追加する必要があります。

#include <stdio.h> 
#include <mosquitto.h> 


void on_connect1(struct mosquitto *mosq, void *obj, int result) 
{ 
    int rc = MOSQ_ERR_SUCCESS; 

    if(!result){ 
     mosquitto_subscribe(mosq, NULL, "/v1/topic1", 0); 
    }else{ 
     fprintf(stderr, "%s\n", mosquitto_connack_string(result)); 
    } 
} 

void on_message1(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) 
{ 
    struct mosquitto *mosq2 = (struct mosquitto *)obj; 

    mosquitto_publish(mosq, NULL, "/v1/topic2", message->payloadlen, message->payload, message->qos, message->retain); 
} 

int main(int argc, char *argv[]) 
{ 
    struct mosquitto *mosq1, *mosq2; 

    mosquitto_lib_init(); 

    mosq2 = mosquitto_new(NULL, true, NULL); 
    mosq1 = mosquitto_new(NULL, true, mosq2); 

    mosquitto_connect_callback_set(mosq1, on_connect1); 
    mosquitto_message_callback_set(mosq1, on_message1); 

    mosquitto_connect(mosq2, "mqtt.example.io", 1883, 60); 
    mosquitto_connect(mosq1, "localhost", 1883, 60); 

    mosquitto_loop_start(mosq2); 
    mosquitto_loop_forever(mosq1, -1, 1); 

    mosquitto_destroy(mosq1); 
    mosquitto_destroy(mosq2); 

    mosquitto_lib_cleanup(); 

    return 0; 
} 
+0

ありがとう、私はすでにその問題を管理していましたが、あなたの答えに感謝して、3番目のmosquitto_new argの使い方を知っています。 – pzydziak

1

はい、

完全に2つのクライアントインスタンスが必要です。これは、mosquitto_new()関数によって返されたmosquitto構造体の2つの別個のインスタンスを意味します。ブローカーごとに1つ。あなたは同じ構造を再利用している瞬間に

それだけでこのような何かが仕事をする必要がありますmosquitto_connect()

関連する問題