Skip to content

Commit f59d9d4

Browse files
committed
feat(websockets): enable fast array buffer conversion in android
1 parent b03151d commit f59d9d4

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

packages/nativescript-websockets/bridge.android.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
import { HeaderType } from './common';
22
import { NativeBridgeDefinition } from './websocket.definition';
33

4+
interface ExtendedArrayBuffer extends ArrayBuffer {
5+
from?(nativeBuffer: java.nio.ByteBuffer): ArrayBuffer;
6+
}
7+
8+
const fastConversionAvailable = !!(ArrayBuffer as unknown as ExtendedArrayBuffer).from;
9+
410
@NativeClass()
511
class WebSocketListenerImpl extends okhttp3.WebSocketListener {
612
private owner: WeakRef<NativeBridge>;
@@ -125,12 +131,18 @@ export class NativeBridge extends NativeBridgeDefinition {
125131
return;
126132
}
127133
if (data instanceof okio.ByteString) {
128-
// const arrayBuffer = new ArrayBuffer(data.size());
129-
const bufferView = new Uint8Array(data.size());
130-
for (let i = 0; i < data.size(); i++) {
131-
bufferView[i] = data.getByte(i);
134+
let arrayBuffer: ArrayBuffer;
135+
if (fastConversionAvailable) {
136+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
137+
arrayBuffer = (ArrayBuffer as unknown as ExtendedArrayBuffer).from!(data.asByteBuffer());
138+
} else {
139+
const bufferView = new Uint8Array(data.size());
140+
for (let i = 0; i < data.size(); i++) {
141+
bufferView[i] = data.getByte(i);
142+
}
143+
arrayBuffer = bufferView.buffer;
132144
}
133-
const arrayBuffer = bufferView.buffer;
145+
134146
this.ws._websocketMessage(arrayBuffer);
135147
return;
136148
}

0 commit comments

Comments
 (0)