@@ -86,17 +86,14 @@ public struct InfuraWebsocketRequest: Encodable {
8686}
8787
8888public protocol Web3SocketDelegate {
89+ func socketConnected( _ headers: [ String : String ] )
8990 func received( message: Any )
9091 func gotError( error: Error )
9192}
9293
9394/// The default websocket provider.
9495public class WebsocketProvider : Web3Provider , IWebsocketProvider , WebSocketDelegate {
95-
96- public func didReceive( event: WebSocketEvent , client: WebSocket ) {
97-
98- }
99-
96+
10097 public func sendAsync( _ request: JSONRPCrequest , queue: DispatchQueue ) -> Promise < JSONRPCresponse > {
10198 return Promise ( error: Web3Error . inputError ( desc: " Sending is unsupported for Websocket provider. Please, use \' sendMessage \' " ) )
10299 }
@@ -116,8 +113,9 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
116113
117114 public var socket : WebSocket
118115 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
119118
120- private var websocketConnected : Bool = false
121119 private var writeTimer : Timer ? = nil
122120 private var messagesStringToWrite : [ String ] = [ ]
123121 private var messagesDataToWrite : [ Data ] = [ ]
@@ -219,6 +217,10 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
219217 socket. disconnect ( )
220218 }
221219
220+ public func isConnect( ) -> Bool {
221+ return websocketConnected
222+ }
223+
222224 public class func connectToSocket( _ endpoint: String ,
223225 delegate: Web3SocketDelegate ,
224226 projectId: String ? = nil ,
@@ -281,27 +283,34 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
281283 }
282284 }
283285
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+ }
306315 }
307316}
0 commit comments