UNPKG

bitmovin-player-react-native

Version:

Official React Native bindings for Bitmovin's mobile Player SDKs.

132 lines (122 loc) 4.36 kB
import { EventSubscription } from 'expo-modules-core'; import NativeInstance from '../nativeInstance'; import NetworkModule from './networkModule'; import { DebugConfig } from '../debug'; import { HttpRequestType, HttpRequest, HttpResponse, NetworkConfig, } from './networkConfig'; export { HttpRequestType, HttpRequest, HttpResponse, NetworkConfig }; /** * Represents a native Network configuration object. * @internal */ export class Network extends NativeInstance<NetworkConfig> { /** * Whether this object's native instance has been created. */ isInitialized = false; /** * Whether this object's native instance has been disposed. */ isDestroyed = false; private onPreprocessHttpRequestSubscription?: EventSubscription; private onPreprocessHttpResponseSubscription?: EventSubscription; /** * Allocates the Network config instance and its resources natively. */ initialize = async () => { if (!this.isInitialized) { DebugConfig.log('Initializing Network config:', this.nativeId); // Set up event listeners for HTTP request/response preprocessing this.onPreprocessHttpRequestSubscription = NetworkModule.addListener( 'onPreprocessHttpRequest', ({ nativeId, requestId, type, request }) => { DebugConfig.log(`Received HTTP Request [${type}]:`, request); if (nativeId !== this.nativeId) { return; } this.onPreprocessHttpRequest(requestId, type, request); } ); this.onPreprocessHttpResponseSubscription = NetworkModule.addListener( 'onPreprocessHttpResponse', ({ nativeId, responseId, type, response }) => { DebugConfig.log(`Received HTTP Response [${type}]:`, response); if (nativeId !== this.nativeId) { return; } this.onPreprocessHttpResponse(responseId, type, response); } ); // Create native configuration object using Expo module if (this.config) { await NetworkModule.initializeWithConfig(this.nativeId, this.config); } this.isInitialized = true; } }; /** * Destroys the native Network config and releases all of its allocated resources. */ destroy = async () => { if (!this.isDestroyed) { await NetworkModule.destroy(this.nativeId); this.onPreprocessHttpRequestSubscription?.remove(); this.onPreprocessHttpResponseSubscription?.remove(); this.onPreprocessHttpRequestSubscription = undefined; this.onPreprocessHttpResponseSubscription = undefined; this.isDestroyed = true; } }; /** * Applies the user-defined `preprocessHttpRequest` function to native's `type` and `request` data and store * the result back in `NetworkModule`. * * Called from native code when `NetworkConfig.preprocessHttpRequest` is dispatched. * * @param requestId Passed through to identify the completion handler of the request on native. * @param type Type of the request to be made. * @param request The HTTP request to process. */ private onPreprocessHttpRequest = ( requestId: string, type: HttpRequestType, request: HttpRequest ) => { this.config ?.preprocessHttpRequest?.(type, request) .then((resultRequest) => NetworkModule.setPreprocessedHttpRequest(requestId, resultRequest) ) .catch(() => NetworkModule.setPreprocessedHttpRequest(requestId, request) ); }; /** * Applies the user-defined `preprocessHttpResponse` function to native's `type` and `response` data and store * the result back in `NetworkModule`. * * Called from native code when `NetworkConfig.preprocessHttpResponse` is dispatched. * * @param responseId Passed through to identify the completion handler of the response on native. * @param type Type of the request to be made. * @param response The HTTP response to process. */ private onPreprocessHttpResponse = ( responseId: string, type: HttpRequestType, response: HttpResponse ) => { this.config ?.preprocessHttpResponse?.(type, response) .then((resultResponse) => NetworkModule.setPreprocessedHttpResponse(responseId, resultResponse) ) .catch(() => NetworkModule.setPreprocessedHttpResponse(responseId, response) ); }; }