mirror of
https://github.com/status-im/react-native-http-bridge.git
synced 2026-08-31 06:41:21 +00:00
76 lines
2.2 KiB
Objective-C
76 lines
2.2 KiB
Objective-C
#import "RCTHttpServer.h"
|
|
#import "React/RCTBridge.h"
|
|
#import "React/RCTLog.h"
|
|
#import "React/RCTEventDispatcher.h"
|
|
|
|
#import "WGCDWebServer.h"
|
|
#import "WGCDWebServerDataResponse.h"
|
|
#import "WGCDWebServerDataRequest.h"
|
|
|
|
@interface RCTHttpServer : NSObject <RCTBridgeModule> {
|
|
WGCDWebServer* _webServer;
|
|
WGCDWebServerDataResponse* _requestResponse;
|
|
}
|
|
@end
|
|
|
|
static RCTBridge *bridge;
|
|
|
|
@implementation RCTHttpServer
|
|
|
|
@synthesize bridge = _bridge;
|
|
|
|
RCT_EXPORT_MODULE();
|
|
|
|
RCT_EXPORT_METHOD(start:(NSInteger) port
|
|
serviceName:(NSString *) serviceName)
|
|
{
|
|
RCTLogInfo(@"Running HTTP bridge server: %d", port);
|
|
|
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
|
_webServer = [[WGCDWebServer alloc] init];
|
|
|
|
[_webServer addDefaultHandlerForMethod:@"POST"
|
|
requestClass:[WGCDWebServerDataRequest class]
|
|
processBlock:^WGCDWebServerResponse *(WGCDWebServerRequest* request) {
|
|
|
|
WGCDWebServerDataRequest* dataRequest = (WGCDWebServerDataRequest*)request;
|
|
_requestResponse = NULL;
|
|
|
|
[self.bridge.eventDispatcher sendAppEventWithName:@"httpServerResponseReceived"
|
|
body:@{@"postData": dataRequest.jsonObject,
|
|
@"url": dataRequest.URL.relativeString}];
|
|
|
|
while (_requestResponse == NULL) {
|
|
[NSThread sleepForTimeInterval:0.1f];
|
|
}
|
|
|
|
return _requestResponse;
|
|
}];
|
|
|
|
[_webServer startWithPort:port bonjourName:serviceName];
|
|
});
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(stop)
|
|
{
|
|
RCTLogInfo(@"Stopping HTTP bridge server");
|
|
|
|
//dispatch_sync(dispatch_get_main_queue(), ^{
|
|
if (_webServer != nil) {
|
|
[_webServer stop];
|
|
[_webServer removeAllHandlers];
|
|
_webServer = nil;
|
|
}
|
|
//});
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(respond:(NSInteger) code
|
|
type: (NSString *) type
|
|
body: (NSString *) body)
|
|
{
|
|
NSData* data = [body dataUsingEncoding:NSUTF8StringEncoding];
|
|
_requestResponse = [[WGCDWebServerDataResponse alloc] initWithData:data contentType:type];
|
|
}
|
|
|
|
@end
|