繁体   English   中英

SocketRocket调用打开的连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM