我的应用程序中当前有一个socketrocket连接。m
_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");
}我如何从另一个视图请求该部分。我似乎找不到一个代理函数来打开socket rocket上的当前连接。我似乎找不到委托函数的逻辑。
发布于 2013-06-26 20:47:14
如果您的_webSocket ivar作为AppDelegate的一个(希望是只读的)属性可用,则可以在代码的其他地方检查套接字的状态,如下所示:
if ([UIApplication sharedApplication].delegate.webSocket.readyState == SR_OPEN) {}不同的状态被枚举为here。更好的做法是将这种检查封装到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是异步的。
https://stackoverflow.com/questions/17319506
复制相似问题