Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit 05e84da

Browse files
committed
Add IOS readStream event frequency limitation
1 parent cf93077 commit 05e84da

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

src/ios/RNFetchBlob/RNFetchBlob.m

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616

1717
RCTBridge * bridgeRef;
18+
dispatch_queue_t commonTaskQueue;
19+
dispatch_queue_t fsQueue;
1820

1921
////////////////////////////////////////
2022
//
@@ -30,7 +32,9 @@ @implementation RNFetchBlob
3032
@synthesize bridge = _bridge;
3133

3234
- (dispatch_queue_t) methodQueue {
33-
return dispatch_queue_create("RNFetchBlob.queue", DISPATCH_QUEUE_SERIAL);
35+
if(commonTaskQueue == nil)
36+
commonTaskQueue = dispatch_queue_create("RNFetchBlob.queue", DISPATCH_QUEUE_SERIAL);
37+
return commonTaskQueue;
3438
}
3539

3640
+ (RCTBridge *)getRCTBridge
@@ -43,6 +47,10 @@ + (RCTBridge *)getRCTBridge
4347
- (id) init {
4448
self = [super init];
4549
self.filePathPrefix = FILE_PREFIX;
50+
if(commonTaskQueue == nil)
51+
commonTaskQueue = dispatch_queue_create("RNFetchBlob.queue", DISPATCH_QUEUE_SERIAL);
52+
if(fsQueue == nil)
53+
fsQueue = dispatch_queue_create("RNFetchBlob.fs.queue", DISPATCH_QUEUE_SERIAL);
4654
BOOL isDir;
4755
// if temp folder not exists, create one
4856
if(![[NSFileManager defaultManager] fileExistsAtPath: [RNFetchBlobFS getTempPath] isDirectory:&isDir]) {
@@ -376,17 +384,16 @@ - (NSDictionary *)constantsToExport
376384
#pragma mark - fs.readStream
377385
RCT_EXPORT_METHOD(readStream:(NSString *)path withEncoding:(NSString *)encoding bufferSize:(int)bufferSize tick:(int)tick streamId:(NSString *)streamId
378386
{
379-
380-
// RNFetchBlobFS *fileStream = [[RNFetchBlobFS alloc] initWithBridgeRef:self.bridge];
381387
if(bufferSize == nil) {
382388
if([[encoding lowercaseString] isEqualToString:@"base64"])
383389
bufferSize = 4095;
384390
else
385391
bufferSize = 4096;
386392
}
387393

388-
// [fileStream readWithPath:path useEncoding:encoding bufferSize:bufferSize];
389-
[RNFetchBlobFS readStream:path encoding:encoding bufferSize:bufferSize tick:tick streamId:streamId bridgeRef:_bridge];
394+
dispatch_async(fsQueue, ^{
395+
[RNFetchBlobFS readStream:path encoding:encoding bufferSize:bufferSize tick:tick streamId:streamId bridgeRef:_bridge];
396+
});
390397
})
391398

392399
#pragma mark - fs.getEnvionmentDirs

src/ios/RNFetchBlobFS.m

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,10 @@ + (void) readStream:(NSString *)uri
128128
{
129129
[[self class] getPathFromUri:uri completionHandler:^(NSString *path, ALAssetRepresentation *asset) {
130130

131-
RCTEventDispatcher * event = bridgeRef.eventDispatcher;
132-
int read = 0;
133-
int chunkSize = bufferSize;
131+
__block RCTEventDispatcher * event = bridgeRef.eventDispatcher;
132+
__block int read = 0;
133+
__block int backoff = tick *1000;
134+
__block int chunkSize = bufferSize;
134135
// allocate buffer in heap instead of stack
135136
uint8_t * buffer;
136137
@try
@@ -151,6 +152,10 @@ + (void) readStream:(NSString *)uri
151152
while((read = [stream read:buffer maxLength:bufferSize]) > 0)
152153
{
153154
[[self class] emitDataChunks:[NSData dataWithBytes:buffer length:read] encoding:encoding streamId:streamId event:event];
155+
if(tick > 0)
156+
{
157+
usleep(backoff);
158+
}
154159
}
155160
[stream close];
156161
}
@@ -162,6 +167,10 @@ + (void) readStream:(NSString *)uri
162167
{
163168
cursor += read;
164169
[[self class] emitDataChunks:[NSData dataWithBytes:buffer length:read] encoding:encoding streamId:streamId event:event];
170+
if(tick > 0)
171+
{
172+
usleep(backoff);
173+
}
165174
}
166175
}
167176
else

0 commit comments

Comments
 (0)