2013-09-26 4 views

Antwort

13

Erste Protoc auf Ihrem Computer

sudo apt-get install protobuf-compiler 

mit installieren Sie dann die von https://code.google.com/p/goprotobuf/ go Protokollpuffer Bibliothek installieren. Die Dartlang-Version finden Sie hier: https://github.com/dart-lang/dart-protoc-plugin.

Der nächste Schritt besteht darin, eine .proto-Datei zu schreiben, die eine Definition der zu sendenden Nachricht enthält. Beispiele finden Sie hier: https://developers.google.com/protocol-buffers/docs/proto.

Zum Beispiel:

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

dann das Protoc Tool verwenden, um eine Go-Datei und eine Dart-Datei für diese Proto-Datei zu kompilieren.

Um ein Car-Objekt in go zu schaffen, erinnern sich die Typen zu nutzen:

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

Dann können Sie das Objekt über einen http.ResponseWriter senden, w wie folgt:

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

In Mit dem Dart-Code können Sie die Informationen wie folgt abrufen:

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); 
    }); 
} 

Wenn alles funktioniert, sollten Sie jetzt ein Auto o bject in Ihrem Dart-Anwendung :)

+0

Ich bin überrascht, dass das Lesen von Binärdaten als String funktioniert. Was machen Sie mit Zeichenkodierungen? Zum Beispiel sollten UTF8-Daten niemals bestimmte Bytefolgen enthalten: http://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences –

+0

Entschuldigung, Sie haben absolut Recht! Der ursprüngliche Code funktioniert nicht mit utf-8. Ich werde es aktualisieren ... fertig! – ehrt1974

+0

Tolle Antwort ... können Sie näher erläutern, warum dieser dart2js Hack benötigt wird? Ich treffe es, kurz bevor ich deine Antwort gelesen habe, und ich bin neugierig. – sjr