我正在考慮在我的一個項目中使用dart-protobuf而不是JSON。問題是圖書館沒有提供任何如何使用它的例子,測試也沒有真正幫助。如何使用dart-protobuf
我也對如何解析.proto
文件的工作有點困惑。
所以我正在尋找一個簡單的例子來說明如何在飛鏢中使用這個庫。
我正在考慮在我的一個項目中使用dart-protobuf而不是JSON。問題是圖書館沒有提供任何如何使用它的例子,測試也沒有真正幫助。如何使用dart-protobuf
我也對如何解析.proto
文件的工作有點困惑。
所以我正在尋找一個簡單的例子來說明如何在飛鏢中使用這個庫。
我對dart-protobuf不太熟悉,但看起來您必須使用protobuf編譯器和dart-protoc-plugin項目來從原型定義生成Dart protobuf庫。
我用它和它的真棒。 對我來說最難的部分(de/serialization)。現在文檔可能會更好。
發送請求(query
是協議緩衝對象發送)
request.send(query.writeToBuffer());
接收響應(pb.MovieMessage
是協議緩衝對象反序列化響應)
request.onLoad.listen((ProgressEvent e) {
if ((request.status >= 200 && request.status < 300) ||
request.status == 0 || request.status == 304) {
List<int> buffer = new Uint8List.view(request.response);
var response = new pb.MovieMessage.fromBuffer(buffer);
EDIT
我的方法t Ø發送PB請求到服務器
Future<pb.MovieMessage> send(pb.MovieMessage query) {
var completer = new Completer<pb.MovieMessage>();
var uri = Uri.parse("http://localhost:8080/public/data/");
var request = new HttpRequest()
..open("POST", uri.toString(), async: true)
..overrideMimeType("application/x-google-protobuf")
..setRequestHeader("Accept", "application/x-google-protobuf")
..setRequestHeader("Content-Type", "application/x-google-protobuf")
..responseType = "arraybuffer"
..withCredentials = true // seems to be necessary so that cookies are sent
..onError.listen((e) {
completer.completeError(e);
})
..onProgress.listen((e){},
onError:(e) => _logger.severe("Error: " + e.errorMessage));
request.onReadyStateChange.listen((e){},
onError: (e) => _logger.severe("OnReadyStateChange.OnError: " + e.toString())
);
request.onLoad.listen((ProgressEvent e) {
if ((request.status >= 200 && request.status < 300) ||
request.status == 0 || request.status == 304) {
List<int> buffer = new Uint8List.view(request.response);
var response = new pb.MovieMessage.fromBuffer(buffer);
response.errors.forEach((pb.Error e) => _logger.severe("Error: " + e.errorMessage));
completer.complete(response);
} else {
completer.completeError(e);
}
});
request.send(query.writeToBuffer());
return completer.future;
}
你是如何創建初始請求的? – lucperkins
我不確定你需要什麼。我添加了更多的代碼。如果你解釋了你已經取得的成就以及你陷入困境的原因,那麼可能會更容易提供幫助。 –
謝謝!我剛剛發現了這一秒。描述:»通常不需要導入這個庫---只有protoc插件生成的庫直接導入這個庫。«有點混亂,因爲我沒有真正意識到我必須自己生成庫。 – enyo