如果您的_webSocket
ivar 可用作 的(希望是只读的)属性,则可以AppDelegate
从代码中的其他位置检查套接字的状态:
if ([UIApplication sharedApplication].delegate.webSocket.readyState == SR_OPEN) {}
这里列举了不同的状态。更好的做法是将这种检查封装到方法中,- (BOOL)socketIsOpen
例如.- (BOOL)socketIsClosed
AppDelegate
此外,如果您希望套接字打开触发应用程序的其他操作,您可能需要使用类似的东西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];
wheresocketDidOpen:
需要一个NSNotification*
参数。
但是,作为一般建议,您不应等待 websocket 连接打开,然后再使 UIWindow 键可见,因为如果没有可用的连接,这会使您的用户无法使用您的应用程序。在一般情况下,连接设置应在后台管理,并与设置应用程序 UI 异步。