SocketRocket调用开放连接



我目前在appdelegate.m 中有一个socketrocket连接

_webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://pinkfalcon.nl:12345/connectr"]]];
_webSocket.delegate = self;
[_webSocket open];

以及对的反应

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
{
    [self.window makeKeyAndVisible];
    NSLog(@"Websocket Connected");
}

我怎么能从另一个角度要求那个部分呢。我似乎找不到一个代理函数来打开套接字火箭上的当前连接。我似乎找不到委托函数的逻辑。

如果您的_webSocket ivar作为AppDelegate的属性(希望是只读的)可用,那么您可以从代码的其他地方检查套接字的状态为:

if ([UIApplication sharedApplication].delegate.webSocket.readyState == SR_OPEN) {}

这里列举了不同的状态。更好的做法是将这类检查封装到AppDelegate中的- (BOOL)socketIsOpen- (BOOL)socketIsClosed等方法中。

此外,如果你想让套接字打开来触发应用程序的其他操作,你可能想使用NSNotificationCenter之类的东西,这样你的应用程序的任何部分都可以在套接字打开和关闭时得到通知:

- (void)webSocketDidOpen:(SRWebSocket *)webSocket {
    // your existing code
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center postNotificationName:@"myapp.websocket.open" object:webSocket];
}
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code
           reason:(NSString *)reason
         wasClean:(BOOL)wasClean; {
    // your code
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center postNotificationName:@"myapp.websocket.close" 
                          object:webSocket
                        userInfo:@{
        @"code": @(code), 
        @"reason": reason, 
        @"clean": @(wasClean)
    }];
}

这将允许您的应用程序的其他部分执行以下操作:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(socketDidOpen:)
                                             name:@"myapp.websocket.open"
                                           object:nil];

其中CCD_ 7将采用单个CCD_。

不过,一般建议是,你不应该等到打开websocket连接后才让你的UIWindow密钥可见,因为如果没有连接,你的用户将无法使用你的应用程序。在一般情况下,连接设置应该在后台管理,并且与设置应用程序UI异步。

相关内容

  • 没有找到相关文章

最新更新