[英]SocketRocket calling an open connection
我的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];
其中socketDidOpen:
将采用单个NSNotification*
参数。
但是,作为一般建议,您不应该等待打开Websocket连接之后再使UIWindow密钥可见并可见,因为如果没有可用的连接,这将使您的用户无法使用您的应用程序。 通常,连接设置应在后台进行管理,并且与设置应用程序UI异步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.