Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 25 additions & 18 deletions httpServer.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,35 @@
/**
* @flow
* @providesModule react-native-http-server
*/
'use strict';

import {DeviceEventEmitter} from 'react-native';
import {NativeModules} from 'react-native';
var Server = NativeModules.HttpServer;
import { NativeEventEmitter, NativeModules } from 'react-native';
const { HttpServer } = NativeModules;
const HttpServerEventEmitter = new NativeEventEmitter(HttpServer);

module.exports = {
start: function (port, serviceName, callback) {
if (port == 80) {
throw "Invalid server port specified. Port 80 is reserved.";
}
export function start(
port: number,
serviceName: string,
callback: (json: Object) => {}
) {
if (port == 80) {
throw 'Invalid server port specified. Port 80 is reserved.';
}

Server.start(port, serviceName);
DeviceEventEmitter.addListener('httpServerResponseReceived', callback);
},
HttpServerEventEmitter.addListener('httpServerResponseReceived', callback);
HttpServer.start(port, serviceName);
}

stop: function () {
Server.stop();
DeviceEventEmitter.removeListener('httpServerResponseReceived');
},
export function stop() {
HttpServer.stop();
HttpServerEventEmitter.removeListener('httpServerResponseReceived');
}

respond: function (code, type, body) {
Server.respond(code, type, body);
}
export function respond(
code: string = '200',
type: string = 'text/html',
body: string = ''
) {
HttpServer.respond(code, type, body);
}
7 changes: 6 additions & 1 deletion ios/RCTHttpServer.h
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
#import "RCTBridgeModule.h"
#import "React/RCTEventEmitter.h"
#import "WGCDWebServer.h"
#import "WGCDWebServerDataResponse.h"

@interface RCTHttpServer: RCTEventEmitter
@end
41 changes: 22 additions & 19 deletions ios/RCTHttpServer.m
Original file line number Diff line number Diff line change
@@ -1,47 +1,50 @@
#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> {
@implementation RCTHttpServer {
WGCDWebServer* _webServer;
WGCDWebServerDataResponse* _requestResponse;
}
@end

static RCTBridge *bridge;

@implementation RCTHttpServer
RCT_EXPORT_MODULE();

@synthesize bridge = _bridge;
- (NSArray<NSString *> *)supportedEvents
{
return @[@"httpServerResponseReceived"];
}

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(start:(NSInteger) port
serviceName:(NSString *) serviceName)
{
RCTLogInfo(@"Running HTTP bridge server: %d", port);
RCTLogInfo(@"Running HTTP bridge server: %ld", (long)port);

__weak __typeof(self) weakSelf = self;

dispatch_sync(dispatch_get_main_queue(), ^{
_webServer = [[WGCDWebServer alloc] init];


[_webServer addDefaultHandlerForMethod:@"POST"
requestClass:[WGCDWebServerDataRequest class]
processBlock:^WGCDWebServerResponse *(WGCDWebServerRequest* request) {

WGCDWebServerDataRequest* dataRequest = (WGCDWebServerDataRequest*)request;
id payload = nil;
_requestResponse = NULL;
if (request.hasBody) {
WGCDWebServerDataRequest* dataRequest = (WGCDWebServerDataRequest*)request;
payload = dataRequest.jsonObject;
}

[self.bridge.eventDispatcher sendAppEventWithName:@"httpServerResponseReceived"
body:@{@"postData": dataRequest.jsonObject,
@"url": dataRequest.URL.relativeString}];
[weakSelf sendEventWithName:@"httpServerResponseReceived"
body:@{
@"postData" : payload,
@"url" : request.URL.relativeString
}];

while (_requestResponse == NULL) {
[NSThread sleepForTimeInterval:0.1f];
[NSThread sleepForTimeInterval:0.1f];
}

return _requestResponse;
Expand Down
141 changes: 128 additions & 13 deletions ios/RCTHttpServer.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@
B232F40E1E49DE0C00C8AEE0 /* WGCDWebServerStreamedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F4011E49DE0C00C8AEE0 /* WGCDWebServerStreamedResponse.m */; };
B2340C241E48BA3E0024C045 /* RCTHttpServer.m in Sources */ = {isa = PBXBuildFile; fileRef = B2340C231E48BA3E0024C045 /* RCTHttpServer.m */; };
B29ECA281E48CE1C00704A36 /* libz.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = B29ECA271E48CE1C00704A36 /* libz.1.dylib */; };
D4DBFB851F0D09590062028A /* WGCDWebServerFileRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3F41E49DE0C00C8AEE0 /* WGCDWebServerFileRequest.m */; };
D4DBFB861F0D09590062028A /* WGCDWebServerDataRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3F21E49DE0C00C8AEE0 /* WGCDWebServerDataRequest.m */; };
D4DBFB871F0D09590062028A /* WGCDWebServerFileResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3FF1E49DE0C00C8AEE0 /* WGCDWebServerFileResponse.m */; };
D4DBFB881F0D09590062028A /* WGCDWebServerErrorResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3FD1E49DE0C00C8AEE0 /* WGCDWebServerErrorResponse.m */; };
D4DBFB891F0D09590062028A /* WGCDWebServerStreamedResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F4011E49DE0C00C8AEE0 /* WGCDWebServerStreamedResponse.m */; };
D4DBFB8A1F0D09590062028A /* WGCDWebServerDataResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3FB1E49DE0C00C8AEE0 /* WGCDWebServerDataResponse.m */; };
D4DBFB8B1F0D09590062028A /* WGCDWebServer.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3E51E49DE0C00C8AEE0 /* WGCDWebServer.m */; };
D4DBFB8C1F0D09590062028A /* WGCDWebServerRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3ED1E49DE0C00C8AEE0 /* WGCDWebServerRequest.m */; };
D4DBFB8D1F0D09590062028A /* WGCDWebServerConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3E71E49DE0C00C8AEE0 /* WGCDWebServerConnection.m */; };
D4DBFB8E1F0D09590062028A /* WGCDWebServerURLEncodedFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3F81E49DE0C00C8AEE0 /* WGCDWebServerURLEncodedFormRequest.m */; };
D4DBFB8F1F0D09590062028A /* WGCDWebServerResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3EF1E49DE0C00C8AEE0 /* WGCDWebServerResponse.m */; };
D4DBFB901F0D09590062028A /* WGCDWebServerFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3E91E49DE0C00C8AEE0 /* WGCDWebServerFunctions.m */; };
D4DBFB911F0D09590062028A /* WGCDWebServerMultiPartFormRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = B232F3F61E49DE0C00C8AEE0 /* WGCDWebServerMultiPartFormRequest.m */; };
D4DBFB921F0D09590062028A /* RCTHttpServer.m in Sources */ = {isa = PBXBuildFile; fileRef = B2340C231E48BA3E0024C045 /* RCTHttpServer.m */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
Expand All @@ -34,6 +48,15 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
D4DBFB951F0D09590062028A /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "include/$(PRODUCT_NAME)";
dstSubfolderSpec = 16;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
Expand Down Expand Up @@ -72,6 +95,8 @@
B29ECA231E48CDCB00704A36 /* libz.1.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.tbd; path = usr/lib/libz.1.tbd; sourceTree = SDKROOT; };
B29ECA251E48CDE300704A36 /* libz.1.2.8.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.2.8.tbd; path = usr/lib/libz.1.2.8.tbd; sourceTree = SDKROOT; };
B29ECA271E48CE1C00704A36 /* libz.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.1.dylib; path = ../../../../../../../../../usr/lib/libz.1.dylib; sourceTree = "<group>"; };
D4DBFB991F0D09590062028A /* libRCTHttpServer-macOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libRCTHttpServer-macOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
D4DBFBA01F14BFFA0062028A /* libz.1.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.tbd; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib/libz.1.tbd; sourceTree = DEVELOPER_DIR; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -83,6 +108,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
D4DBFB931F0D09590062028A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
Expand All @@ -93,6 +125,7 @@
B2340C221E48BA3E0024C045 /* RCTHttpServer.h */,
B2340C231E48BA3E0024C045 /* RCTHttpServer.m */,
B29EC9CC1E48BED600704A36 /* libRCTHttpServer.a */,
D4DBFB991F0D09590062028A /* libRCTHttpServer-macOS.a */,
B29EC9CD1E48BF1800704A36 /* Frameworks */,
);
sourceTree = "<group>";
Expand Down Expand Up @@ -159,6 +192,7 @@
B29EC9CD1E48BF1800704A36 /* Frameworks */ = {
isa = PBXGroup;
children = (
D4DBFBA01F14BFFA0062028A /* libz.1.tbd */,
B29ECA271E48CE1C00704A36 /* libz.1.dylib */,
B29ECA251E48CDE300704A36 /* libz.1.2.8.tbd */,
B29ECA231E48CDCB00704A36 /* libz.1.tbd */,
Expand Down Expand Up @@ -187,6 +221,23 @@
productReference = B29EC9CC1E48BED600704A36 /* libRCTHttpServer.a */;
productType = "com.apple.product-type.library.static";
};
D4DBFB831F0D09590062028A /* RCTHttpServer-macOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = D4DBFB961F0D09590062028A /* Build configuration list for PBXNativeTarget "RCTHttpServer-macOS" */;
buildPhases = (
D4DBFB841F0D09590062028A /* Sources */,
D4DBFB931F0D09590062028A /* Frameworks */,
D4DBFB951F0D09590062028A /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = "RCTHttpServer-macOS";
productName = RCTHttpServer;
productReference = D4DBFB991F0D09590062028A /* libRCTHttpServer-macOS.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
Expand Down Expand Up @@ -214,6 +265,7 @@
projectRoot = "";
targets = (
1441618D1BD0A79300FA4F59 /* RCTHttpServer */,
D4DBFB831F0D09590062028A /* RCTHttpServer-macOS */,
);
};
/* End PBXProject section */
Expand All @@ -240,6 +292,27 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
D4DBFB841F0D09590062028A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D4DBFB851F0D09590062028A /* WGCDWebServerFileRequest.m in Sources */,
D4DBFB861F0D09590062028A /* WGCDWebServerDataRequest.m in Sources */,
D4DBFB871F0D09590062028A /* WGCDWebServerFileResponse.m in Sources */,
D4DBFB881F0D09590062028A /* WGCDWebServerErrorResponse.m in Sources */,
D4DBFB891F0D09590062028A /* WGCDWebServerStreamedResponse.m in Sources */,
D4DBFB8A1F0D09590062028A /* WGCDWebServerDataResponse.m in Sources */,
D4DBFB8B1F0D09590062028A /* WGCDWebServer.m in Sources */,
D4DBFB8C1F0D09590062028A /* WGCDWebServerRequest.m in Sources */,
D4DBFB8D1F0D09590062028A /* WGCDWebServerConnection.m in Sources */,
D4DBFB8E1F0D09590062028A /* WGCDWebServerURLEncodedFormRequest.m in Sources */,
D4DBFB8F1F0D09590062028A /* WGCDWebServerResponse.m in Sources */,
D4DBFB901F0D09590062028A /* WGCDWebServerFunctions.m in Sources */,
D4DBFB911F0D09590062028A /* WGCDWebServerMultiPartFormRequest.m in Sources */,
D4DBFB921F0D09590062028A /* RCTHttpServer.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
Expand All @@ -250,8 +323,7 @@
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../../../React/**",
"$(SRCROOT)/../../react-native/React/**",
"$(BUILT_PRODUCTS_DIR)/usr/local/include",
"$(SDKROOT)/usr/include/libxml2/**",
);
OTHER_LDFLAGS = "-ObjC";
Expand All @@ -269,7 +341,7 @@
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(SRCROOT)/../../../React/**",
"$(SRCROOT)/../../react-native/React/**",
"$(BUILT_PRODUCTS_DIR)/usr/local/include",
"$(SDKROOT)/usr/include/libxml2/**",
);
OTHER_LDFLAGS = "-ObjC";
Expand Down Expand Up @@ -314,11 +386,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../React/**",
"$(SRCROOT)/../../react-native/React/**",
);
HEADER_SEARCH_PATHS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
Expand Down Expand Up @@ -356,11 +424,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../React/**",
"$(SRCROOT)/../../react-native/React/**",
);
HEADER_SEARCH_PATHS = "$(inherited)";
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
Expand All @@ -369,6 +433,48 @@
};
name = Release;
};
D4DBFB971F0D09590062028A /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_NO_COMMON_BLOCKS = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(BUILT_PRODUCTS_DIR)/usr/local/include",
"$(SDKROOT)/usr/include/libxml2/**",
"$(SRCROOT)/../../react-native-macos/React/**",
"$(BUILT_PRODUCTS_DIR)/include/**",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
STRIP_INSTALLED_PRODUCT = NO;
};
name = Debug;
};
D4DBFB981F0D09590062028A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_NO_COMMON_BLOCKS = NO;
HEADER_SEARCH_PATHS = (
"$(inherited)",
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
"$(BUILT_PRODUCTS_DIR)/usr/local/include",
"$(SDKROOT)/usr/include/libxml2/**",
"$(SRCROOT)/../../react-native-macos/React/**",
"$(BUILT_PRODUCTS_DIR)/include/**",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SKIP_INSTALL = YES;
STRIP_INSTALLED_PRODUCT = NO;
};
name = Release;
};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
Expand All @@ -390,6 +496,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D4DBFB961F0D09590062028A /* Build configuration list for PBXNativeTarget "RCTHttpServer-macOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D4DBFB971F0D09590062028A /* Debug */,
D4DBFB981F0D09590062028A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 145CC5681AED80100006342E /* Project object */;
Expand Down
Loading