2017-02-17 12 views
1

nanomsgのC#データバインディングを使用しています。私は、外部のプログラムがURLをipc:// report_dataにGoogle Protocol Bufferメッセージを送信していると私のサブスクライバは、同じ正確なURLに接続します。だから、私は加入者がそのURLで送信されているデータを取得できると期待していますが、そうではありません。私は関数Receive()を使用して、これまでに何も来ることはありません。そのURLには1つのタイプのメッセージしかないので、そのトピックについて心配していません。 nanomsgの経験を持つ人は、トピックに関係なく、転送URLに入ってくるデータをどのように読むのか知っていますか?nanomsgを使用するパブリッシャからのデータの購読/受信。

これは私の加入者および受信メッセージのためのコードです:

public static void CreateSubscriber(string url, string topic) 
{ 
    Console.WriteLine("\nCreating new subscriber with topic {0} and url {1}.", topic, url); 

    var subscriber = new SubscribeSocket(); 

    subscriber.Connect(url); 
    var sw = Stopwatch.StartNew(); 

    while (sw.Elapsed.TotalSeconds < 5000) 
    { 
     if (sw.Elapsed.TotalSeconds % 3 == 0) 
     { 
      Console.WriteLine("Checking for new data."); 
      var streamOutput = ReceiveProtoBufferMessage(subscriber, topic); 
     } 
    } 
    sw.Stop(); 
    Thread.Sleep(1); 
    Console.WriteLine("Disposing subscriber."); 
    subscriber.Dispose(); 
} 

static byte[] ReceiveProtoBufferMessage(SubscribeSocket s, string topic) 
{ 
    byte[] data = null; 

    try 
    { 
     data = s.Receive(); 
     Console.WriteLine("Received data."); 
    } 
    catch 
    { 
     Console.WriteLine("Couldn't receive data."); 
    } 

    if (data != null) 
    { 
     Console.WriteLine("Data is not null."); 
    } 
    else 
    { 
     Console.WriteLine("Null data"); 
    } 

    return data; 
} 
+0

なぜあなたは 'sw.Elapsed.TotalSeconds%3 == 0'をやっていますか? 'sw.Elapsed.TotalSeconds'は' double'なので、そのようなモジュラスを行うことは '0'になるという保証はありません。 「新しいデータをチェックしています」というメッセージが表示されますか? – Enigmativity

答えて

0

はそれを考え出した - 加入者が、私は加入者が空の文字列トピックをサブスクライブに行われたすべてのメッセージを拾うようにするために:「」。

関連する問題