ios :: http_request
app::http_request
for iOSios :: http_request $ Text
High-level abstraction for all text representationsios :: http_request $ Text
High-level abstraction for all text representationscocoa :: foundation
The Foundation Kit provides basic Objective-C classes and structuresSerializable::inspect
to show more useful information
serialization :: serialization_core
Abstract services to serialize Nit objects to different formatsdeserialize_json
and JsonDeserializer
serialize_to_json
and JsonSerializer
core :: union_find
union–find algorithm using an efficient disjoint-set data structure
# Implementation of `app::http_request` for iOS
module http_request
import ios
import cocoa::foundation
intrude import app::http_request
redef class App
redef fun run_on_ui_thread(task) import Task.main in "ObjC" `{
Task_incr_ref(task);
dispatch_async(dispatch_get_main_queue(), ^{
Task_main(task);
Task_decr_ref(task);
});
`}
end
redef class Text
redef fun http_get
do
var error_ref = new Ref[NSString]("Unknown Error".to_nsstring)
var data = to_nsstring.native_http_get(60.0, error_ref)
if data.address_is_null then
# There was an error
var error = new IOError(error_ref.item.to_s)
return new HttpRequestResult(null, error)
else
# TODO use the real return code instead of 200
return new HttpRequestResult(data.to_s, null, 200)
end
end
end
redef class NSString
private fun native_http_get(timeout: Float, error_ref: Ref[NSString]): NSData
import Ref[NSString].item= in "ObjC" `{
NSURL *url = [NSURL URLWithString:self];
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:timeout];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:&error];
if (data == nil) {
// Report error
Ref_of_NSString_item__assign(error_ref, [error localizedDescription]);
return nil;
}
return data;
`}
end
lib/ios/http_request.nit:15,1--70,3