5package io.flutter.plugin.common;
7import androidx.annotation.NonNull;
9import io.flutter.plugin.common.StandardMessageCodec.ExposedByteArrayOutputStream;
10import java.nio.ByteBuffer;
11import java.nio.ByteOrder;
30 this.messageCodec = messageCodec;
36 final ExposedByteArrayOutputStream stream =
new ExposedByteArrayOutputStream();
37 messageCodec.
writeValue(stream, methodCall.method);
38 messageCodec.
writeValue(stream, methodCall.arguments);
39 final ByteBuffer
buffer = ByteBuffer.allocateDirect(stream.size());
40 buffer.put(stream.buffer(), 0, stream.size());
47 methodCall.order(ByteOrder.nativeOrder());
48 final Object method = messageCodec.
readValue(methodCall);
49 final Object arguments = messageCodec.
readValue(methodCall);
50 if (method instanceof String && !methodCall.hasRemaining()) {
51 return new MethodCall((String) method, arguments);
53 throw new IllegalArgumentException(
"Method call corrupted");
59 final ExposedByteArrayOutputStream stream =
new ExposedByteArrayOutputStream();
62 final ByteBuffer
buffer = ByteBuffer.allocateDirect(stream.size());
63 buffer.put(stream.buffer(), 0, stream.size());
70 @NonNull String errorCode, @NonNull String errorMessage, @NonNull Object errorDetails) {
71 final ExposedByteArrayOutputStream stream =
new ExposedByteArrayOutputStream();
75 if (errorDetails instanceof Throwable) {
80 final ByteBuffer
buffer = ByteBuffer.allocateDirect(stream.size());
81 buffer.put(stream.buffer(), 0, stream.size());
88 @NonNull String errorCode,
89 @NonNull String errorMessage,
90 @NonNull Object errorDetails,
91 @NonNull String errorStacktrace) {
92 final ExposedByteArrayOutputStream stream =
new ExposedByteArrayOutputStream();
96 if (errorDetails instanceof Throwable) {
101 messageCodec.
writeValue(stream, errorStacktrace);
102 final ByteBuffer
buffer = ByteBuffer.allocateDirect(stream.size());
103 buffer.put(stream.buffer(), 0, stream.size());
110 envelope.order(ByteOrder.nativeOrder());
111 final byte flag = envelope.get();
116 if (!envelope.hasRemaining()) {
123 final Object code = messageCodec.
readValue(envelope);
125 final Object details = messageCodec.
readValue(envelope);
126 if (code instanceof String
128 && !envelope.hasRemaining()) {
133 throw new IllegalArgumentException(
"Envelope corrupted");
static String getStackTraceString(@Nullable Throwable tr)
final Object readValue(@NonNull ByteBuffer buffer)
void writeValue(@NonNull ByteArrayOutputStream stream, @Nullable Object value)
static final StandardMessageCodec INSTANCE
StandardMethodCodec(@NonNull StandardMessageCodec messageCodec)
ByteBuffer encodeSuccessEnvelope(@NonNull Object result)
ByteBuffer encodeErrorEnvelopeWithStacktrace( @NonNull String errorCode, @NonNull String errorMessage, @NonNull Object errorDetails, @NonNull String errorStacktrace)
ByteBuffer encodeErrorEnvelope( @NonNull String errorCode, @NonNull String errorMessage, @NonNull Object errorDetails)
Object decodeEnvelope(@NonNull ByteBuffer envelope)
ByteBuffer encodeMethodCall(@NonNull MethodCall methodCall)
MethodCall decodeMethodCall(@NonNull ByteBuffer methodCall)
static final StandardMethodCodec INSTANCE
FlutterSemanticsFlag flag
static const uint8_t buffer[]