SRTWebSocketOperation.m 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // SRTWebSocketOperation.m
  3. // SocketRocket
  4. //
  5. // Created by Mike Lewis on 1/28/12.
  6. // Copyright (c) 2012 __MyCompanyName__. All rights reserved.
  7. //
  8. #import "SRTWebSocketOperation.h"
  9. #import "SRWebSocket.h"
  10. @interface SRTWebSocketOperation ()
  11. @end
  12. @implementation SRTWebSocketOperation {
  13. NSInteger _testNumber;
  14. SRWebSocket *_webSocket;
  15. NSURL *_url;
  16. }
  17. @synthesize isFinished = _isFinished;
  18. @synthesize isExecuting = _isExecuting;
  19. @synthesize error = _error;
  20. - (id)initWithURL:(NSURL *)URL;
  21. {
  22. self = [super init];
  23. if (self) {
  24. _url = URL;
  25. _isExecuting = NO;
  26. _isFinished = NO;
  27. }
  28. return self;
  29. }
  30. - (BOOL)isConcurrent;
  31. {
  32. return YES;
  33. }
  34. - (void)start;
  35. {
  36. dispatch_async(dispatch_get_main_queue(), ^{
  37. _webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:_url]];
  38. _webSocket.delegate = self;
  39. [_webSocket open];
  40. });
  41. self.isExecuting = YES;
  42. }
  43. - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
  44. {
  45. [self willChangeValueForKey:@"isExecuting"];
  46. [self willChangeValueForKey:@"isFinished"];
  47. _isFinished = YES;
  48. _isExecuting = NO;
  49. [self didChangeValueForKey:@"isExecuting"];
  50. [self didChangeValueForKey:@"isFinished"];
  51. _webSocket.delegate = nil;
  52. _webSocket = nil;
  53. }
  54. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
  55. {
  56. NSAssert(NO, @"Not implemented");
  57. }
  58. - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
  59. {
  60. _error = error;
  61. [self willChangeValueForKey:@"isExecuting"];
  62. [self willChangeValueForKey:@"isFinished"];
  63. _isFinished = YES;
  64. _isExecuting = NO;
  65. [self didChangeValueForKey:@"isExecuting"];
  66. [self didChangeValueForKey:@"isFinished"];
  67. _webSocket.delegate = nil;
  68. _webSocket = nil;
  69. }
  70. @end