webSocket简单使用

#import "WebSocketManager.h"
#import "SocketRocket/SRWebSocket.h"


NSString *webSocketTestUrl    = @"ws://**********:8085/websocket";
NSString *webSocketReleaseUrl = @"ws://**********/websocket";


#define WSHeartTimeOut  120.f

@interface WebSocketManager ()<SRWebSocketDelegate>

//heart
@property (strong, nonatomic) NSTimer *WSHeartTimer;
@property (nonatomic) int webSocketTimeOut;

@end

static WebSocketManager *_instance;

@implementation WebSocketManager{
    SRWebSocket *_webSocket;



    RMQConnection *connRBMQManager;
    RMQQueue *myRMQWmessageQueue;
    id<RMQChannel> rmqChannel;
    RMQExchange *exChange;
}

+ (WebSocketManager *)Instance{
    if (!_instance) {
        _instance = [[WebSocketManager alloc]init];
        _instance.isConnected = NO;
    }
    return _instance;
}



//type -2:heart     0:regist     1:正常消息
- (id)eventDataWithString:(int)type regist:(BOOL)isRegist
{
    NSError *parseError;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"msg":@"push_customer", @"type ":@(type), @"customerId":isRegist?@"":@([UserManager sharedInstance].userId), @"content":@"", @"deviceId":@""} options:NSJSONWritingPrettyPrinted error:&parseError];

    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
- (void)connectWebSocket {
    [self onRecevieMessage];
    return;

    _webSocket.delegate = nil;
    [_webSocket close];
    _webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:IsTestEnvirenment == 0?webSocketTestUrl:webSocketReleaseUrl]]];
    _webSocket.delegate = self;
    [_webSocket open];
    NSLog(@"open success!-----------------\n");
}
#pragma mark - websocket delegate
- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
{
    NSLog(@"Websocket Connected---------------------\n");
    //注册
    [_webSocket send:[self eventDataWithString:0 regist:YES]];
    self.isConnected = YES;
    [self wsStartHeartBeat];
}

- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;
{
    NSLog(@":( Websocket Failed With Error %@\n", error);
    _webSocket = nil;
    self.isConnected = NO;
    self.webSocketTimeOut = 120;
}

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;
{
//    NSLog(@"Received \"%@\"", message);

    if ([message rangeOfString:@"users"].location != NSNotFound && [message rangeOfString:@"customerId"].location == NSNotFound) {
        //注册时返回的数据格式不同于以下正常格式   直接忽略   不予处理
        return;
    }
    NSLog(@"Received \"%@\"", message);
    if ([message isKindOfClass:[NSString class]]) {
        NSError *err = nil;
        WSPMessageModel *msgModel = [[WSPMessageModel alloc]initWithString:message error:&err];
        if (!err) {
            if (msgModel.type == -2 && [msgModel.msg isEqualToString:@"ping"]) {
                //心跳  heart
                [_webSocket send:[self eventDataWithString:-2 regist:NO]];
                NSLog(@"heart -------------------------------------\n\n");
                self.webSocketTimeOut = 0;
            }else if (dic.type == 1){
                [RootRoute pushLocalNotificationWithMessage:msgModel];
                if ([self.delegate respondsToSelector:@selector(onRecivedWebSocketMessage:)]) {
                    [self.delegate onRecivedWebSocketMessage:msgModel];
                }
            }
        }
    }
    self.isConnected = YES;
}

- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;
{
    NSLog(@"WebSocket closed---------------\n");
    _webSocket = nil;
    self.isConnected = NO;
    self.webSocketTimeOut = 120;
}

- (void)close{
    [_webSocket close];
}

#pragma mark - heart beat
- (void)wsStartHeartBeat{
    self.webSocketTimeOut = 0;
    if (self.WSHeartTimer) {
        [self.WSHeartTimer invalidate];
        self.WSHeartTimer = nil;
    }

    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(wsHeartingBeat) userInfo:nil repeats:NO];
    self.WSHeartTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(wsHeartingBeat) userInfo:nil repeats:YES];
}
- (void)wsHeartingBeat{
    self.webSocketTimeOut += 30;
    if (self.webSocketTimeOut >= WSHeartTimeOut) {
        [self connectWebSocket];//重连
        return;
    }
}

就当是自己做个笔记好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值