2016-04-05 2 views
2

Я пытаюсь определить свою структуру MQTT пакета через Protobuf я внедрено следующий код опубликовать сообщение с помощью Protobufкак установить формат Protobuf в протоколе MQTT

Код:

package com.cupola.demo; 

import org.eclipse.paho.client.mqttv3.MqttClient; 
import org.eclipse.paho.client.mqttv3.MqttConnectOptions; 
import org.eclipse.paho.client.mqttv3.MqttException; 
import org.eclipse.paho.client.mqttv3.MqttMessage; 
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; 

public class Publish { 

public static void main(String[] args) { 

    Sample sas = new Sample(); 
    String topic = "Cupola"; 
    String content = sas.passMessage(24,"Noor"); 
    int qos = 2; 
    String broker = "tcp://localhost:1883"; 
    String clientId = "DemoPublish"; 
    MemoryPersistence persistence = new MemoryPersistence(); 

    try { 
     MqttClient sampleClient = new MqttClient(broker, clientId, persistence); 
     MqttConnectOptions connOpts = new MqttConnectOptions(); 
     connOpts.setCleanSession(true); 
     System.out.println("Connecting to broker: " + broker); 
     sampleClient.connect(connOpts); 
     System.out.println("Connected"); 
     System.out.println("Publishing message: " + content); 
     MqttMessage message = new MqttMessage(content.getBytes()); 
     message.setQos(qos); 
     sampleClient.publish(topic, message); 
     System.out.println("Message published"); 
     sampleClient.disconnect(); 
     System.out.println("Disconnected"); 
//   System.exit(0); 
     } 
     catch (MqttException me) { 
     System.out.println("reason " + me.getReasonCode()); 
     System.out.println("msg " + me.getMessage()); 
     System.out.println("loc " + me.getLocalizedMessage()); 
     System.out.println("cause " + me.getCause()); 
     System.out.println("excep " + me); 
     me.printStackTrace(); 
    } 
} 

}

Вот заданные значения путем вызова функции от издателя и установки значений в соответствии с прото-файлом

package com.cupola.demo; 

import com.cupola.demo.CatProto.Cat; 

public class Sample { 

public String passMessage(int age,String name) { 

    // creating the cat 
    Cat noor= CatProto.Cat.newBuilder() 
      .setAge(age) 
      .setName(name) 
      .build(); 
    String message=noor.toString(); 


    return message; 
} 

}

Это мой Cat.proto файл:

option java_outer_classname="CatProto"; 

message Cat { 
optional int32 age = 1; 
required string name = 2; 
} 

это правильно или мне нужно изменить путь. Пожалуйста, предложите мне. Благодарю вас.

+1

Какая проблема вы на самом деле видите здесь? – hardillb

+0

Я хочу заполнить атрибуты пакета mqtt и формат сообщения должен быть определен protobuf. Таким образом, упомянутый выше код - это нормально для моего требования, или мне нужно модифицировать больше. Спасибо за быстрый ответ – Noor

+1

С помощью этой библиотеки java protobuffer вы используете? – hardillb

ответ

3

Если предположить, что с помощью библиотеки Google Protobuff, то вы хотите использовать toByteArray() не toString() в методе passMessage().

public byte[] passMessage(int age,String name) { 

    // creating the cat 
    Cat noor= CatProto.Cat.newBuilder() 
      .setAge(age) 
      .setName(name) 
      .build(); 
    byte message[] = noor.toByteArray(); 


    return message; 
} 
+0

, и мне нужно объявить сообщение как байт [] другой мудрый, он вызывает ошибку и благодарит за ваши предложения – Noor

Смежные вопросы