@@ -9,7 +9,8 @@ open class WebSocket: NSObject, WebSocketConnection, URLSessionWebSocketDelegate
9
9
10
10
// MARK: - Private properties
11
11
12
- private var webSocketTask : URLSessionWebSocketTask !
12
+ private var webSocketTask : URLSessionWebSocketTask ?
13
+ private var webSocketRequest : URLRequest !
13
14
private var urlSession : URLSession !
14
15
private let delegateQueue = OperationQueue ( )
15
16
private var pingTimer : Timer ?
@@ -60,7 +61,11 @@ open class WebSocket: NSObject, WebSocketConnection, URLSessionWebSocketDelegate
60
61
// MARK: - WebSocketConnection conformance
61
62
62
63
func connect( ) {
63
- webSocketTask. resume ( )
64
+ if webSocketTask == nil {
65
+ webSocketTask = urlSession. webSocketTask ( with: webSocketRequest)
66
+ }
67
+
68
+ webSocketTask? . resume ( )
64
69
listen ( )
65
70
}
66
71
@@ -73,7 +78,7 @@ open class WebSocket: NSObject, WebSocketConnection, URLSessionWebSocketDelegate
73
78
}
74
79
75
80
func listen( ) {
76
- webSocketTask. receive { [ weak self] result in
81
+ webSocketTask? . receive { [ weak self] result in
77
82
guard let self = self else {
78
83
return
79
84
}
@@ -108,7 +113,7 @@ open class WebSocket: NSObject, WebSocketConnection, URLSessionWebSocketDelegate
108
113
}
109
114
110
115
func ping( ) {
111
- self . webSocketTask. sendPing { error in
116
+ self . webSocketTask? . sendPing { error in
112
117
if let error = error {
113
118
self . delegate? . webSocketDidReceiveError ( connection: self , error: error)
114
119
} else {
@@ -119,14 +124,15 @@ open class WebSocket: NSObject, WebSocketConnection, URLSessionWebSocketDelegate
119
124
120
125
func disconnect( closeCode: Int = URLSessionWebSocketTask . CloseCode. normalClosure. rawValue) {
121
126
let closeCode = URLSessionWebSocketTask . CloseCode ( rawValue: closeCode) ?? . normalClosure
122
- webSocketTask. cancel ( with: closeCode, reason: nil )
127
+ webSocketTask? . cancel ( with: closeCode, reason: nil )
128
+ webSocketTask = nil
123
129
pingTimer? . invalidate ( )
124
130
}
125
131
126
132
// MARK: - Private methods
127
133
128
134
private func send( message: URLSessionWebSocketTask . Message ) {
129
- webSocketTask. send ( message) { [ weak self] error in
135
+ webSocketTask? . send ( message) { [ weak self] error in
130
136
guard let self = self else {
131
137
return
132
138
}
0 commit comments