@@ -86,17 +86,14 @@ public struct InfuraWebsocketRequest: Encodable {
86
86
}
87
87
88
88
public protocol Web3SocketDelegate {
89
+ func socketConnected( _ headers: [ String : String ] )
89
90
func received( message: Any )
90
91
func gotError( error: Error )
91
92
}
92
93
93
94
/// The default websocket provider.
94
95
public class WebsocketProvider : Web3Provider , IWebsocketProvider , WebSocketDelegate {
95
-
96
- public func didReceive( event: WebSocketEvent , client: WebSocket ) {
97
-
98
- }
99
-
96
+
100
97
public func sendAsync( _ request: JSONRPCrequest , queue: DispatchQueue ) -> Promise < JSONRPCresponse > {
101
98
return Promise ( error: Web3Error . inputError ( desc: " Sending is unsupported for Websocket provider. Please, use \' sendMessage \' " ) )
102
99
}
@@ -116,8 +113,9 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
116
113
117
114
public var socket : WebSocket
118
115
public var delegate : Web3SocketDelegate
116
+ /// A flag that is true if socket connected or false if socket doesn't connected.
117
+ public var websocketConnected : Bool = false
119
118
120
- private var websocketConnected : Bool = false
121
119
private var writeTimer : Timer ? = nil
122
120
private var messagesStringToWrite : [ String ] = [ ]
123
121
private var messagesDataToWrite : [ Data ] = [ ]
@@ -219,6 +217,10 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
219
217
socket. disconnect ( )
220
218
}
221
219
220
+ public func isConnect( ) -> Bool {
221
+ return websocketConnected
222
+ }
223
+
222
224
public class func connectToSocket( _ endpoint: String ,
223
225
delegate: Web3SocketDelegate ,
224
226
projectId: String ? = nil ,
@@ -281,27 +283,34 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
281
283
}
282
284
}
283
285
284
- public func websocketDidReceiveMessage( socket: WebSocketClient , text: String ) {
285
- print ( " got some text: \( text) " )
286
- delegate. received ( message: text)
287
- }
288
-
289
- public func websocketDidReceiveData( socket: WebSocketClient , data: Data ) {
290
- print ( " got some data: \( data. count) " )
291
- delegate. received ( message: data)
292
- }
293
-
294
- public func websocketDidConnect( socket: WebSocketClient ) {
295
- print ( " websocket is connected " )
296
- websocketConnected = true
297
- }
298
-
299
- public func websocketDidDisconnect( socket: WebSocketClient , error: Error ? ) {
300
- print ( " websocket is disconnected with \( error? . localizedDescription ?? " no error " ) " )
301
- websocketConnected = false
302
- }
303
-
304
- public func websocketDidReceivePong( socket: WebSocketClient , data: Data ? ) {
305
- print ( " Got pong! Maybe some data: \( String ( describing: data? . count) ) " )
286
+ public func didReceive( event: WebSocketEvent , client: WebSocket ) {
287
+ switch event {
288
+ case . connected( let headers) :
289
+ websocketConnected = true
290
+ delegate. socketConnected ( headers)
291
+ case . disconnected( let reason, let code) :
292
+ print ( " socket disconnected: \( reason) , code: \( code) " )
293
+ websocketConnected = false
294
+ delegate. gotError ( error: Web3Error . connectionError)
295
+ case . text( let string) :
296
+ delegate. received ( message: string)
297
+ break
298
+ case . binary( let data) :
299
+ delegate. received ( message: data)
300
+ case . ping( _) :
301
+ break
302
+ case . pong( _) :
303
+ break
304
+ case . viabilityChanged( _) :
305
+ break
306
+ case . reconnectSuggested( _) :
307
+ break
308
+ case . cancelled:
309
+ websocketConnected = false
310
+ delegate. gotError ( error: Web3Error . nodeError ( desc: " socket cancelled " ) )
311
+ case . error( let error) :
312
+ websocketConnected = false
313
+ delegate. gotError ( error: error!)
314
+ }
306
315
}
307
316
}
0 commit comments