//
//  SRTWebSocketOperation.m
//  SocketRocket
//
//  Created by Mike Lewis on 1/28/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "SRTWebSocketOperation.h"

@interface SRTWebSocketOperation ()

@end

@implementation SRTWebSocketOperation {
    NSInteger _testNumber;
    SRWebSocket *_webSocket;
    NSURL *_url;
}

@synthesize isFinished = _isFinished;
@synthesize isExecuting = _isExecuting;
@synthesize error = _error;

- (id)initWithURL:(NSURL *)URL;
{
    self = [super init];
    if (self) {
        _url = URL;
        _isExecuting = NO;
        _isFinished = NO;
    }
    return self;
}

- (BOOL)isConcurrent;
{
    return YES;
}

- (void)start;
{
    dispatch_async(dispatch_get_main_queue(), ^{
        _webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:_url]];
        _webSocket.delegate = self;
        [_webSocket open];
    });
    self.isExecuting = YES;
}

- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
{
    [self willChangeValueForKey:@"isExecuting"];
    [self willChangeValueForKey:@"isFinished"];
    _isFinished = YES;
    _isExecuting = NO;
    [self didChangeValueForKey:@"isExecuting"];
    [self didChangeValueForKey:@"isFinished"];
    _webSocket.delegate = nil;
    _webSocket = nil;
}

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
{
    NSAssert(NO, @"Not implemented");
}

- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
{
    _error = error;
    [self willChangeValueForKey:@"isExecuting"];
    [self willChangeValueForKey:@"isFinished"];
    _isFinished = YES;
    _isExecuting = NO;
    [self didChangeValueForKey:@"isExecuting"];
    [self didChangeValueForKey:@"isFinished"];
    _webSocket.delegate = nil;
    _webSocket = nil;
}

@end
