Если _webSocket
Ивар доступна как (надеюсь, только для чтения) свойство вашего AppDelegate
, из других в вашем коде, вы можете проверить состояние сокета как:
if ([UIApplication sharedApplication].delegate.webSocket.readyState == SR_OPEN) {}
Различные состояния перечисленное here. Еще лучше было бы инкапсулировать такие проверки в методы, такие как - (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];
где socketDidOpen:
бы один NSNotification*
аргумент.
Как правило, вам не следует ждать, пока соединение с websocket будет открыто, прежде чем сделать свой ключ UIWindow и видимым, так как это сделает ваш пользователь неспособным использовать ваше приложение, если соединение не доступно. В общем случае настройка подключения должна управляться в фоновом режиме и быть асинхронной с настройкой пользовательского интерфейса приложения.
Вы, сэр, сделали работу! Я всегда стараюсь избегать центра уведомлений. Кажется, это не похоже на твердое решение. Но сейчас это трюк. Спасибо друг. –
В некоторых случаях я также стараюсь избегать NSNotificationCenter, напрямую строя методы регистрации наблюдателей и уведомляя их, но тогда вам необходимо поддерживать список наблюдателей, следить за сохранением циклов и безопасностью потоков. В большинстве случаев это избыток :) – matehat