first end to end rpc call

This commit is contained in:
Ari Lazier 2015-10-06 14:52:49 -06:00
parent 476b3623bb
commit 131123ff9a
3 changed files with 13 additions and 11 deletions

View File

@ -41,14 +41,14 @@ static RPCObjectID s_id_counter = 0;
GCDWebServer* webServer = [[GCDWebServer alloc] init]; GCDWebServer* webServer = [[GCDWebServer alloc] init];
s_context = JSGlobalContextCreate(NULL); s_context = JSGlobalContextCreate(NULL);
s_requests["create_realm"] = [=](NSDictionary *dict) { s_requests["/create_realm"] = [=](NSDictionary *dict) {
RPCObjectID realmId = s_id_counter++; RPCObjectID realmId = s_id_counter++;
JSValueRef value = [[JSValue valueWithObject:dict JSValueRef value = [[JSValue valueWithObject:dict
inContext:[JSContext contextWithJSGlobalContextRef:s_context]] JSValueRef]; inContext:[JSContext contextWithJSGlobalContextRef:s_context]] JSValueRef];
s_objects[realmId] = RealmConstructor(s_context, NULL, 1, &value, NULL); s_objects[realmId] = RealmConstructor(s_context, NULL, 1, &value, NULL);
return std::to_string(realmId); return "{\"realmId\":" + std::to_string(realmId) + "}";
}; };
s_requests["create_object"] = [=](NSDictionary *dict) { s_requests["/create_object"] = [=](NSDictionary *dict) {
RPCObjectID newOid = s_id_counter++; RPCObjectID newOid = s_id_counter++;
RPCObjectID realmId = [dict[@"realmId"] longValue]; RPCObjectID realmId = [dict[@"realmId"] longValue];
JSValueRef value = [[JSValue valueWithObject:dict[@"value"] JSValueRef value = [[JSValue valueWithObject:dict[@"value"]
@ -59,13 +59,13 @@ static RPCObjectID s_id_counter = 0;
s_objects[newOid] = (JSObjectRef)object; s_objects[newOid] = (JSObjectRef)object;
return std::to_string(newOid); return std::to_string(newOid);
}; };
s_requests["dispose_realm"] = [=](NSDictionary *dict) { s_requests["/dispose_realm"] = [=](NSDictionary *dict) {
RPCObjectID realmId = [dict[@"realmId"] longValue]; RPCObjectID realmId = [dict[@"realmId"] longValue];
JSValueUnprotect(s_context, s_objects[realmId]); JSValueUnprotect(s_context, s_objects[realmId]);
s_objects.erase(realmId); s_objects.erase(realmId);
return ""; return "";
}; };
s_requests["get_property"] = [=](NSDictionary *dict) { s_requests["/get_property"] = [=](NSDictionary *dict) {
JSStringRef propString = RJSStringForString([dict[@"name"] UTF8String]); JSStringRef propString = RJSStringForString([dict[@"name"] UTF8String]);
RPCObjectID realmId = [dict[@"realmId"] longValue]; RPCObjectID realmId = [dict[@"realmId"] longValue];
JSValueRef propertyValue = ObjectGetProperty(s_context, s_objects[realmId], propString, NULL); JSValueRef propertyValue = ObjectGetProperty(s_context, s_objects[realmId], propString, NULL);
@ -73,7 +73,7 @@ static RPCObjectID s_id_counter = 0;
return RJSValidatedStringForValue(s_context, propertyValue); return RJSValidatedStringForValue(s_context, propertyValue);
}; };
s_requests["set_property"] = [=](NSDictionary *dict) { s_requests["/set_property"] = [=](NSDictionary *dict) {
JSValueRef exception = NULL; JSValueRef exception = NULL;
JSStringRef propString = RJSStringForString([dict[@"name"] UTF8String]); JSStringRef propString = RJSStringForString([dict[@"name"] UTF8String]);
RPCObjectID realmId = [dict[@"realmId"] longValue]; RPCObjectID realmId = [dict[@"realmId"] longValue];
@ -84,7 +84,7 @@ static RPCObjectID s_id_counter = 0;
return exception ? "exception" : ""; return exception ? "exception" : "";
}; };
s_requests["dispose_object"] = [=](NSDictionary *dict) { s_requests["/dispose_object"] = [=](NSDictionary *dict) {
RPCObjectID oid = [dict[@"realmId"] longValue]; RPCObjectID oid = [dict[@"realmId"] longValue];
JSValueUnprotect(s_context, s_objects[oid]); JSValueUnprotect(s_context, s_objects[oid]);
s_objects.erase(oid); s_objects.erase(oid);
@ -96,8 +96,10 @@ static RPCObjectID s_id_counter = 0;
requestClass:[GCDWebServerDataRequest class] requestClass:[GCDWebServerDataRequest class]
processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
RPCRequest action = s_requests[request.path.UTF8String]; RPCRequest action = s_requests[request.path.UTF8String];
NSDictionary *json = [(GCDWebServerDataRequest *)request jsonObject]; NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[(GCDWebServerDataRequest *)request data] options:0 error:nil];
return [GCDWebServerDataResponse responseWithHTML:@(action(json).c_str())]; GCDWebServerDataResponse *response = [GCDWebServerDataResponse responseWithHTML:@(action(json).c_str())];
[response setValue:@"http://localhost:8081" forAdditionalHeader:@"Access-Control-Allow-Origin"];
return response;
}]; }];
[webServer startWithPort:8082 bonjourName:nil]; [webServer startWithPort:8082 bonjourName:nil];
} }

View File

@ -4,8 +4,8 @@
*/ */
'use strict'; 'use strict';
var React = require('react-native');
var Realm = require('realm'); var Realm = require('realm');
var React = require('react-native');
var { var {
AppRegistry, AppRegistry,

View File

@ -79,7 +79,7 @@ function convert(realmId, info) {
function sendRequest(command, data) { function sendRequest(command, data) {
let body = JSON.stringify(data); let body = JSON.stringify(data);
let request = new XMLHttpRequest(); let request = new XMLHttpRequestOriginal();
let url = 'http://' + DEVICE_HOST + '/' + command; let url = 'http://' + DEVICE_HOST + '/' + command;
request.open('POST', url, false); request.open('POST', url, false);