BBAWebSocketTask.h
2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//
// BBAWebSocketTask.h
// BBAAPIRequest
//
// Created by chenjia09 on 2018/5/24.
//
#import <Foundation/Foundation.h>
// socket task 状态
typedef NS_ENUM(NSInteger, BBASocketTaskStatus) {
BBASocketTaskStatusConnecting = 0,
BBASocketTaskStatusOpen = 1,
BBASocketTaskStatusClosing = 2,
BBASocketTaskStatusClosed = 3,
};
// 消息类型
typedef NS_ENUM(NSInteger, BBASocketReceiveType) {
BBASocketReceiveTypeString,
BBASocketReceiveTypeData
};
// 连接成功回调
typedef void(^BBASocketDidConnectBlock)(NSDictionary<NSString *, NSString *> * _Nullable responseHeaders);
// 消息接收回调
typedef void(^BBASocketDidReceiveBlock)(id _Nullable message, BBASocketReceiveType type);
// 关闭回调
typedef void(^BBASocketDidCloseBlock)(NSInteger code, NSString * _Nullable reason);
// 失败回调
typedef void(^BBASocketDidErrorBlock)(NSError * _Nullable error);
/**
* WebSocketTask 的基类,所有的 WebSocketTask 必须直接使用本类或本类的子类创建 task 对象
*/
@interface BBAWebSocketTask : NSObject
/// 当前状态
@property (nonatomic, assign, readonly) BBASocketTaskStatus status;
/// 连接成功回调
@property (nonatomic, copy, nullable) BBASocketDidConnectBlock connectedCallBack;
/// 消息接受回调
@property (nonatomic, copy, nullable) BBASocketDidReceiveBlock receivedCallBack;
/// 关闭回调
@property (nonatomic, copy, nullable) BBASocketDidCloseBlock closedCallBack;
/// 失败回调
@property (nonatomic, copy, nullable) BBASocketDidErrorBlock failedCallBack;
/// 错误回调,例如连接失败,因为网络问题等被close等,触发didFailWithError代理时调用
@property (nonatomic, copy, nullable) BBASocketDidErrorBlock errorCallBack;
- (_Nonnull instancetype)init NS_UNAVAILABLE;
/**
* @brief 初始化方法
*
* @param request URLRequest 对象
* @param protocols 子协议数组
* @return 返回创建的 task 对象
*/
- (_Nonnull instancetype)initWithURLRequest:(nonnull NSURLRequest *)request protocols:(nullable NSArray<NSString *> *)protocols NS_DESIGNATED_INITIALIZER;
/**
* @brief 开启socket
*/
- (void)open;
/**
* @brief 客户端关闭socket
* @param code 状态码:正常关闭为0
* @param reason 原因描述:正常为 nil
*/
- (void)closeWithCode:(NSInteger)code reason:(nullable NSString *)reason;
/**
* @brief 发送消息,NSString
*
* @param string UTF8 字符串
*/
- (void)sendString:(nullable NSString *)string;
/**
* @brief 发送消息,NSData
*
* @param data 二进制数据
*/
- (void)sendData:(nullable NSData *)data;
@end