Хорошо, ребята, вот моя дилемма.
Я работаю с Brother SDK, чтобы создать оболочку React Native для нашего мобильного приложения, и мы работаем над функцией автоматического обнаружения, которая была в SDK.
BRPTouchNetworkDelegate
имеет только одну функцию для соответствия и выглядит так:
-(void)didFinishSearch:(id)sender
Наш заголовочный файл выглядит так:
@protocol BRWLANPrintOperationDelegate <NSObject>
- (void) showPrintResultForWLAN;
@end
@interface RNB2MatchRnPrinter : NSObject <RCTBridgeModule, BRPtouchNetworkDelegate>
{
BRPtouchNetworkManager *networkManager;
BRPtouchPrinter *ptp;
BRPtouchPrintInfo *printerInfo;
NSString *paperSize;
NSString *filePath;
NSString *ipAddress;
NSString *printerModel;
NSArray *allowedFileTypes;
NSMutableArray *printerList;
NSDictionary *printerDict;
BOOL shouldAutocut;
}
@property NSArray *imagePathArray;
@property NSString *customPaperFilePath;
@property(nonatomic, assign) BOOL communicationResultForWLAN;
@property (nonatomic, weak)id<BRWLANPrintOperationDelegate> delegate;
Наша didFinishSearch
функция выглядит следующим образом:
-(void)didFinishSearch:(id)sender
{
NSLog(@"didFinishSearch");
printerList = (NSMutableArray *)[networkManager getPrinterNetInfo];
NSLog(@"_brotherDeviceList [%@]", (NSMutableArray *)[networkManager getPrinterNetInfo]);
return;
}
, а наш метод React Native выглядит следующим образом:
RCT_EXPORT_METHOD(printerSearch:(RCTResponseSenderBlock)callback)
{
[networkManager startSearch: 5];
int64_t delayInSeconds = 10.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
RCTLogInfo(@"Dispatch has been called");
NSMutableArray* connectedPrinters = (NSMutableArray*)[self->networkManager getPrinterNetInfo];
for (BRPtouchDeviceInfo *printer in connectedPrinters) {
self->printerDict = [[NSDictionary alloc] initWithObjectsAndKeys:
printer.strModelName, @"modelName",
printer.strIPAddress, @"ipAddress",
printer.strMACAddress, @"macAddress", nil
];
[self->printerList addObject:self->printerDict];
}
callback(@[[NSNull null], self->printerList]);
});
}
Теперь, что происходит в потоке, мы иногдане получайте результат от Сетевого менеджера [networkManager getPrinterInfo]
, но мы получаем его в didFinishSearch
.
И поскольку это сетевая операция, мы не знаем, сколько времени нам нужно для тайм-аута.
Идея состоит в том, чтобы получить данные printerList
из didFinishSearch
.
Есть ли способ сделать это и какой самый простой способ вернуть результат из didFinishSearch
к методу React Native для обратного вызова?
Заранее спасибо.