|
|
@@ -18,9 +18,13 @@
|
|
|
{
|
|
|
SRWebSocket *_socket;
|
|
|
NSMutableArray<NSDictionary *> *_messages;
|
|
|
+ NSMutableArray *_delegates;
|
|
|
|
|
|
int _retryCount;
|
|
|
}
|
|
|
+//@property NSMutableDictionary* controllers;
|
|
|
+//@property int controllerId;
|
|
|
+
|
|
|
@end
|
|
|
|
|
|
@implementation SocketServiceHandler
|
|
|
@@ -45,6 +49,8 @@
|
|
|
|
|
|
|
|
|
_messages = [[NSMutableArray alloc] init];
|
|
|
+ _delegates = [[NSMutableArray alloc] init];
|
|
|
+// self.controllerId = 0;
|
|
|
|
|
|
[self socketOpen];
|
|
|
}
|
|
|
@@ -52,10 +58,10 @@
|
|
|
return self;
|
|
|
}
|
|
|
|
|
|
-- (void) initDelegate:(id<SocketServiceDelegate>) delegate
|
|
|
-{
|
|
|
- [self setDelegate:delegate];
|
|
|
-}
|
|
|
+//- (void) initDelegate:(id<SocketServiceDelegate>) delegate
|
|
|
+//{
|
|
|
+// [self setDelegate:delegate];
|
|
|
+//}
|
|
|
|
|
|
|
|
|
- (SRReadyState) getSocketStatus
|
|
|
@@ -76,11 +82,10 @@
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
-// [JDFacade facade].loginUser = [[LoginModel alloc] init];
|
|
|
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:_strSocketURL]];
|
|
|
if([[JDFacade facade].loginUser authorization]!=nil)
|
|
|
{
|
|
|
- [request setValue:[[JDFacade facade].loginUser authorization] forHTTPHeaderField:@"Authorization"];
|
|
|
+ [request setValue:[[JDFacade facade].loginUser authorization] forHTTPHeaderField:API_AUTHORIZATION_KEY];
|
|
|
}
|
|
|
NSLog(@"All Header Info : %@", request.allHTTPHeaderFields);
|
|
|
_socket = [[SRWebSocket alloc] initWithURLRequest:request];
|
|
|
@@ -125,9 +130,10 @@
|
|
|
|
|
|
- (void) sendData:(NSDictionary *)data
|
|
|
{
|
|
|
-
|
|
|
+ NSLog(@"Send Data : %@", data);
|
|
|
if(_socket.readyState == SR_OPEN)
|
|
|
{
|
|
|
+ NSLog(@"1");
|
|
|
NSError *error;
|
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data
|
|
|
options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
|
|
|
@@ -146,17 +152,40 @@
|
|
|
}
|
|
|
else if ( _socket.readyState == SR_CLOSED || _socket.readyState == SR_CLOSING )
|
|
|
{
|
|
|
- // TODO : 미전송 메세지 저장하고 있기
|
|
|
+ NSLog(@"2");
|
|
|
[_messages addObject:data];
|
|
|
[self reConnect];
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ NSLog(@"3");
|
|
|
[_messages addObject:data];
|
|
|
+ if(!_isConnected)
|
|
|
+ {
|
|
|
+ [self socketOpen];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
+- (void) sendDataWithDelegate:(NSDictionary *)data delegate:(id)delegate
|
|
|
+{
|
|
|
+ [self addDelegate:delegate];
|
|
|
+ [self sendData:data];
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+- (void)addDelegate:(id)delegate {
|
|
|
+// short controllerId = self.controllerId++;
|
|
|
+// if (self.controllerId >= INT16_MAX) {
|
|
|
+// self.controllerId = 0;
|
|
|
+// }
|
|
|
+ [_delegates addObject:delegate];
|
|
|
+}
|
|
|
+
|
|
|
+- (void)removeDelegate:(id)delegate {
|
|
|
+ [_delegates removeObject:delegate];
|
|
|
+}
|
|
|
|
|
|
-(void) reConnect
|
|
|
{
|
|
|
@@ -185,9 +214,13 @@
|
|
|
[_messages removeObject:data];
|
|
|
}
|
|
|
|
|
|
- if (self.delegate && [self.delegate respondsToSelector:@selector(socketConnectComplete)]) {
|
|
|
- [self.delegate socketConnectComplete];
|
|
|
+ for (id controller in _delegates) {
|
|
|
+ if (controller && [controller respondsToSelector:@selector(socketConnectComplete)]) {
|
|
|
+ [controller socketConnectComplete];
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message
|
|
|
@@ -217,10 +250,15 @@
|
|
|
|
|
|
id JSONModel = nil;
|
|
|
JSONModel = [[SocketModel alloc] initWithDictionary:jsonObj error:&error];
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- if (self.delegate && [self.delegate respondsToSelector:@selector(socketDidReceiveMessage:info:)]) {
|
|
|
-
|
|
|
- [self.delegate socketDidReceiveMessage:JSONModel info:jsonObj];
|
|
|
+ for (id controller in _delegates) {
|
|
|
+ if (controller!=nil && [controller respondsToSelector:@selector(socketDidReceiveMessage:info:)]) {
|
|
|
+
|
|
|
+ [controller socketDidReceiveMessage:JSONModel info:jsonObj];
|
|
|
+ [self removeDelegate:controller];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// TODO : 전달받은 데이터로 자동으로 처리할 내용이 있으면 이곳에서 처리할것
|