From 95adc4336dc28f0ff896edc38506bc076b1df45b Mon Sep 17 00:00:00 2001 From: androidappteam Date: Mon, 4 Sep 2023 22:01:44 +0530 Subject: [PATCH] synced-code --- .../java/com/reactnativegrpc/GrpcModule.java | 28 ++--- src/client.ts | 117 +++++++----------- 2 files changed, 58 insertions(+), 87 deletions(-) diff --git a/android/src/main/java/com/reactnativegrpc/GrpcModule.java b/android/src/main/java/com/reactnativegrpc/GrpcModule.java index 9c87682..8b0c8d7 100644 --- a/android/src/main/java/com/reactnativegrpc/GrpcModule.java +++ b/android/src/main/java/com/reactnativegrpc/GrpcModule.java @@ -1,6 +1,5 @@ package com.reactnativegrpc; -import android.util.Log; -import android.widget.Toast; + import android.util.Base64; import android.util.Log; import android.widget.Toast; @@ -42,11 +41,10 @@ public class GrpcModule extends ReactContextBaseJavaModule { private boolean keepAliveEnabled = false; private Integer keepAliveTime; private Integer keepAliveTimeout; + private boolean isUiLogEnabled = false; private ManagedChannel managedChannel = null; - private boolean isUiLogEnabled = false; - public GrpcModule(ReactApplicationContext context) { this.context = context; } @@ -70,34 +68,29 @@ public void getIsInsecure(final Promise promise) { @ReactMethod public void setHost(String host) { this.host = host; - this.handleOptionsChanged(); } @ReactMethod public void setInsecure(boolean insecure) { this.isInsecure = insecure; - this.handleOptionsChanged(); } @ReactMethod - public void setCompression(Boolean enable, String compressorName, String limit) { + public void setCompression(Boolean enable, String compressorName) { this.withCompression = enable; this.compressorName = compressorName; - this.handleOptionsChanged(); } @ReactMethod public void setResponseSizeLimit(int limit) { this.responseSizeLimit = limit; - this.handleOptionsChanged(); } @ReactMethod - public void setKeepalive(boolean enabled, int time, int timeout) { + public void setKeepAlive(boolean enabled, int time, int timeout) { this.keepAliveEnabled = enabled; this.keepAliveTime = time; this.keepAliveTimeout = timeout; - this.handleOptionsChanged(); } @ReactMethod @@ -333,13 +326,12 @@ private static String normalizePath(String path) { if (path.startsWith("/")) { path = path.substring(1); } - return path; } - private void handleOptionsChanged() { + @ReactMethod + public void initGrpcChannel() { if (this.managedChannel != null) { - this.managedChannel.resetConnectBackoff(); this.managedChannel.shutdown(); } this.managedChannel = createManagedChannel(); @@ -360,7 +352,7 @@ private ManagedChannel createManagedChannel() { channelBuilder = channelBuilder .keepAliveWithoutCalls(true) .keepAliveTime(keepAliveTime, TimeUnit.SECONDS) - .keepAliveTimeout(keepAliveTime, TimeUnit.SECONDS); + .keepAliveTimeout(keepAliveTimeout, TimeUnit.SECONDS); } managedChannel = channelBuilder.build(); @@ -369,7 +361,11 @@ private ManagedChannel createManagedChannel() { @ReactMethod public void resetConnection(final String message){ - handleOptionsChanged(); + if(null == managedChannel) return; + + this.managedChannel.resetConnectBackoff(); + + this.initGrpcChannel(); showToast("resetConnection "+message); } diff --git a/src/client.ts b/src/client.ts index 75e3a7a..c4ed0be 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,6 +1,6 @@ import { AbortController, AbortSignal } from 'abort-controller'; import { fromByteArray, toByteArray } from 'base64-js'; -import { NativeEventEmitter, NativeModules, Platform } from 'react-native'; +import {NativeEventEmitter, NativeModules, Platform} from 'react-native'; import { GrpcError } from './errors'; import { GrpcServerStreamingCall, @@ -14,18 +14,14 @@ type GrpcRequestObject = { }; type GrpcType = { + getHost: () => Promise; getIsInsecure: () => Promise; setHost(host: string): void; setInsecure(insecure: boolean): void; - setCompression(enable: boolean, compressorName: string, limit?: string): void; - setKeepalive(enabled: boolean, time: number, timeout: number): void; + setCompression(enable: boolean, compressorName: string): void; setResponseSizeLimit(limitInBytes: number): void; - resetConnection(message: string): void; - setKeepAliveTime(keepAliveTime: number): void; - onConnectionStateChange(): void; - setUiLogEnabled(enable: boolean): void; - enterIdle(): void; + initGrpcChannel(): void; unaryCall( id: number, path: string, @@ -46,6 +42,11 @@ type GrpcType = { requestHeaders?: GrpcMetadata ): Promise; finishClientStreaming(id: number): Promise; + resetConnection(message: string):void; + setKeepAlive(enable : boolean,keepAliveTime: number,keepAliveTimeOut: number):void; + onConnectionStateChange():void; + setUiLogEnabled(enable:boolean):void; + enterIdle():void; }; type GrpcEventType = 'response' | 'error' | 'headers' | 'trailers'; @@ -56,20 +57,20 @@ type GrpcEventPayload = type: 'response'; payload: string; } | { - type: 'error'; - error: string; - code?: number; - trailers?: GrpcMetadata; - } | { - type: 'headers'; - payload: GrpcMetadata; - } | { - type: 'trailers'; - payload: GrpcMetadata; - } | { - type: 'status'; - payload: number; - }; + type: 'error'; + error: string; + code?: number; + trailers?: GrpcMetadata; +} | { + type: 'headers'; + payload: GrpcMetadata; +} | { + type: 'trailers'; + payload: GrpcMetadata; +} | { + type: 'status'; + payload: number; +}; type GrpcEvent = { id: number; @@ -145,13 +146,18 @@ function handleGrpcEvent(event: GrpcEvent) { case 'trailers': deferred.trailers?.resolve(event.payload); deferred.data?.notifyComplete(); + + delete deferredMap[event.id]; break; case 'error': const error = new GrpcError(event.error, event.code, event.trailers); + deferred.headers?.reject(error); + deferred.trailers?.reject(error); deferred.response?.reject(error); deferred.data?.noitfyError(error); + delete deferredMap[event.id]; break; } } @@ -180,72 +186,41 @@ export class GrpcClient { setInsecure(insecure: boolean): void { Grpc.setInsecure(insecure); } - - /** - * setCompression - only for Android. - * @param enable - * @param compressorName - * @param limit - */ - setCompression( - enable: boolean, - compressorName: string, - limit?: number - ): void { - if (!this.isAndroid()) { - return; - } - Grpc.setCompression(enable, compressorName, limit?.toString()); - } - setKeepalive(enabled: boolean, time: number, timeout: number): void { - Grpc.setKeepalive(enabled, time, timeout); + setCompression(enable: boolean, compressorName: string): void { + Grpc.setCompression(enable, compressorName); } setResponseSizeLimit(limitInBytes: number): void { Grpc.setResponseSizeLimit(limitInBytes); } - /** - * resetConnection - only for Android - * @param message - to debug where we are calling 'resetConnection' - * */ + initGrpcChannel(){ + Grpc.initGrpcChannel(); + }; + + setKeepAlive(enable : boolean,keepAliveTime: number,keepAliveTimeOut: number): void { + Grpc.setKeepAlive(enable,keepAliveTime,keepAliveTimeOut); + } + resetConnection(message: string): void { - if (!this.isAndroid()) { - return; - } + if(!this.isAndroid()) return; Grpc.resetConnection(message); } - /** - * setUiLogEnabled - only for Android - * @param enable - to debug where we are calling current grpc connection status - * in ui - * */ setUiLogEnabled(enable: boolean): void { - if (!this.isAndroid()) { - return; - } + if(!this.isAndroid()) return; Grpc.setUiLogEnabled(enable); } - /** - * onConnectionStateChange - only for Android - * grpc connection different state - * * */ + onConnectionStateChange(): void { - if (!this.isAndroid()) { - return; - } + if(!this.isAndroid()) return; Grpc.onConnectionStateChange(); } - /** - * enterIdle - only for Android - * set grpc connection state to idle - * * */ + enterIdle(): void { - if (!this.isAndroid()) { - return; - } + if(!this.isAndroid()) return; Grpc.enterIdle(); } + unaryCall( method: string, data: Uint8Array, @@ -340,7 +315,7 @@ export class GrpcClient { return call; } - private isAndroid(): Boolean { + private isAndroid() : Boolean { return Platform.OS === 'android'; } }