2013-09-26 15 views

risposta

13

prima cosa installare ProtoC sul computer utilizzando

sudo apt-get install protobuf-compiler 

Poi installare la libreria di buffer protocollo vanno da https://code.google.com/p/goprotobuf/. La versione di dartlang può essere trovata qui: https://github.com/dart-lang/dart-protoc-plugin.

Il passo successivo è scrivere un file .proto contenente una definizione del messaggio da inviare. esempi possono essere trovati qui: https://developers.google.com/protocol-buffers/docs/proto.

Ad esempio:

message Car { 
    required string make = 1; 
    required int32 numdoors = 2; 
} 

quindi utilizzare lo strumento ProtoC per compilare un file go e un file dart per il file proto.

per creare un oggetto auto in movimento, ricordarsi di utilizzare i tipi di condizione:

c := new(Car) 
c.Make = proto.String("Citroën") 
c.Numdoors = proto.Int32(4) 

Quindi è possibile inviare l'oggetto su un http.ResponseWriter, w come segue:

binaryData, err := proto.Marshal(c) 
if err != nil { 
    // do something with error 
} 
w.Write(binaryData) 

In il codice Dart, è possibile recuperare le informazioni come segue:

void getProtoBuffer() { 
    HttpRequest.request("http://my.url.com", responseType: "arraybuffer").then((request) { 
     Uint8List buffer = new Uint8List.view(request.response, 0, (request.response as ByteBuffer).lengthInBytes); // this is a hack for dart2js because of a bug 
     Car c = new Car.fromBuffer(buffer); 
     print(c); 
    }); 
} 

Se tutto ha funzionato, ora si dovrebbe avere una Macchina o bject nella tua applicazione Dart :)

+0

Sono sorpreso che leggere i dati binari come una stringa funziona. Cosa fai riguardo le codifiche dei personaggi? Ad esempio, i dati UTF8 non dovrebbero mai contenere determinate sequenze di byte: http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences –

+0

Scusa, hai assolutamente ragione! Il codice originale non funziona con utf-8. Lo aggiornerò ... fatto! – ehrt1974

+0

Risposta straordinaria ... puoi approfondire il motivo per cui è richiesto questo dart2js mod? L'ho colpito poco prima di leggere la tua risposta e sono curioso. – sjr

Problemi correlati