-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathJSONRPCService.m
More file actions
124 lines (91 loc) · 2.86 KB
/
JSONRPCService.m
File metadata and controls
124 lines (91 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// JSONRPCService.m
// WorldCupResource
//
// Created by ivan on 24.4.10..
// Copyright 2010 Dizzey.com. All rights reserved.
//
#import "JSONRPCService.h"
#import "JSONKit.h"
@implementation JSONRPCService
@synthesize delegate;
-(id) initWithURL:(NSURL*)serviceURL {
return [self initWithURL:serviceURL user:nil pass:nil];
}
-(id) initWithURL:(NSURL*)serviceURL user:(NSString*)user pass:(NSString*)pass {
if (self = [super init]) {
url = [serviceURL retain];
username = [user retain];
password = [pass retain];
}
return self;
}
-(void) execMethod:(NSString*)methodName andParams:(NSArray*)parameters withID:(NSString*)identificator {
//RPC
NSMutableDictionary* reqDict = [NSMutableDictionary dictionary];
[reqDict setObject:methodName forKey:@"method"];
[reqDict setObject:parameters forKey:@"params"];
[reqDict setObject:identificator forKey:@"id"];
//RPC JSON
NSString* reqString = [NSString stringWithString:[reqDict JSONString]];
//Request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData* requestData = [NSData dataWithBytes:[reqString UTF8String] length:[reqString length]];
//prepare http body
[request setHTTPMethod: @"POST"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: requestData];
if (urlConnection != nil) {
[urlConnection release];
urlConnection = nil;
}
urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
[request release];
}
-(void) cancelRequest {
if (urlConnection) {
[urlConnection cancel];
[urlConnection release];
urlConnection = nil;
[webData release];
webData = nil;
}
}
#pragma mark -
#pragma mark NSURLConnection delegate
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"Did receive response: %@", response);
[webData release];
webData = [[NSMutableData alloc] init];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
assert(webData != nil);
[webData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[webData release];
webData = nil;
[urlConnection release];
urlConnection = nil;
//notify
[delegate loadingFailed:[error localizedDescription]];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
[urlConnection release];
urlConnection = nil;
//DO something with webData
[delegate dataLoaded:webData];
[webData release];
webData = nil;
}
-(void) dealloc {
[webData release];
[username release];
[password release];
[urlConnection release];
[url release];
[super dealloc];
}
@end