내 프로젝트 중 하나에서 JSON 대신 dart-protobuf을 사용하려고합니다. 문제는 라이브러리가 라이브러리를 사용하는 방법에 대한 예제를 제공하지 않으며 테스트가 실제로 도움이되지 않는다는 것입니다.dart-protobuf 사용 방법
나는 또한 .proto
파일의 구문 분석이 어떻게 작동하는지 혼란스러워합니다.
그래서이 라이브러리를 다트에서 사용하는 방법에 대한 간단한 예를 찾고 있습니다.
내 프로젝트 중 하나에서 JSON 대신 dart-protobuf을 사용하려고합니다. 문제는 라이브러리가 라이브러리를 사용하는 방법에 대한 예제를 제공하지 않으며 테스트가 실제로 도움이되지 않는다는 것입니다.dart-protobuf 사용 방법
나는 또한 .proto
파일의 구문 분석이 어떻게 작동하는지 혼란스러워합니다.
그래서이 라이브러리를 다트에서 사용하는 방법에 대한 간단한 예를 찾고 있습니다.
저는 dart-protobuf에 익숙하지 않지만 proto 정의에서 Dart protobuf 라이브러리를 생성하려면 protobuf 컴파일러와 dart-protoc-plugin 프로젝트를 사용해야합니다.
어떤 여기에 지침이있다 : 나는 그것을 사용 https://github.com/dart-lang/dart-protoc-plugin
그것은 끝내. 나를 위해 가장 힘든 부분 (de/serialization) 아래. 어쩌면 워드 프로세서가 더 좋을 수도 있습니다.
송신 요청
request.send(query.writeToBuffer());
응답을 수신
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 (pb.MovieMessage
응답을 역 직렬화하는 프로토콜 버퍼 목적) (query
가 보내 프로토콜 버퍼 목적)
내 방법 t o 서버에 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