Skip to content

Commit 422da5b

Browse files
prefinal api
1 parent 13351e9 commit 422da5b

File tree

3 files changed

+114
-24
lines changed

3 files changed

+114
-24
lines changed

web3swift/Web3/Classes/Web3+InfuraProviders.swift

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,55 @@ public final class InfuraWebsocketProvider: WebsocketProvider {
3535
|| network == Networks.Mainnet else {return nil}
3636
let networkName = network.name
3737
let urlString = "wss://\(networkName).infura.io/ws"
38-
guard let socketURL = URL(string: urlString) else {return nil}
39-
super.init(endpoint: socketURL,
38+
guard URL(string: urlString) != nil else {return nil}
39+
super.init(urlString,
40+
delegate: delegate,
41+
keystoreManager: manager,
42+
network: network)
43+
}
44+
45+
public init?(_ endpoint: String,
46+
delegate: Web3SocketDelegate,
47+
keystoreManager manager: KeystoreManager? = nil) {
48+
guard URL(string: endpoint) != nil else {return nil}
49+
super.init(endpoint,
50+
delegate: delegate,
51+
keystoreManager: manager)
52+
}
53+
54+
public init?(_ endpoint: URL,
55+
delegate: Web3SocketDelegate,
56+
keystoreManager manager: KeystoreManager? = nil) {
57+
super.init(endpoint,
4058
delegate: delegate,
4159
keystoreManager: manager)
4260
}
4361

44-
public static func connectToSocket(_ network: Networks,
45-
delegate: Web3SocketDelegate,
46-
keystoreManager manager: KeystoreManager? = nil) -> InfuraWebsocketProvider? {
62+
override public class func connectToSocket(_ endpoint: String,
63+
delegate: Web3SocketDelegate,
64+
keystoreManager manager: KeystoreManager? = nil,
65+
network net: Networks? = nil) -> WebsocketProvider? {
66+
guard let socketProvider = InfuraWebsocketProvider(endpoint,
67+
delegate: delegate,
68+
keystoreManager: manager) else {return nil}
69+
socketProvider.connectSocket()
70+
return socketProvider
71+
}
72+
73+
override public class func connectToSocket(_ endpoint: URL,
74+
delegate: Web3SocketDelegate,
75+
keystoreManager manager: KeystoreManager? = nil,
76+
network net: Networks? = nil) -> WebsocketProvider? {
77+
guard let socketProvider = InfuraWebsocketProvider(endpoint,
78+
delegate: delegate,
79+
keystoreManager: manager) else {return nil}
80+
socketProvider.connectSocket()
81+
return socketProvider
82+
}
83+
84+
public static func connectToInfuraSocket(_ network: Networks,
85+
delegate: Web3SocketDelegate,
86+
keystoreManager manager: KeystoreManager? = nil) -> InfuraWebsocketProvider? {
4787
guard let socketProvider = InfuraWebsocketProvider(network,
4888
delegate: delegate,
4989
keystoreManager: manager) else {return nil}
@@ -55,7 +95,7 @@ public final class InfuraWebsocketProvider: WebsocketProvider {
5595
let request = JSONRPCRequestFabric.prepareRequest(method, parameters: params)
5696
let encoder = JSONEncoder()
5797
let requestData = try encoder.encode(request)
58-
writeMessage(data: requestData)
98+
writeMessage(requestData)
5999
}
60100

61101
public func filter(method: InfuraWebsocketMethod, params: [Encodable]? = nil) throws {

web3swift/Web3/Classes/Web3+WebsocketProvider.swift

Lines changed: 67 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public protocol IWebsocketProvider {
1515
var delegate: Web3SocketDelegate {get set}
1616
func connectSocket() throws
1717
func disconnectSocket() throws
18-
func writeMessage(string: String)
19-
func writeMessage(data: Data)
18+
func writeMessage(_ string: String)
19+
func writeMessage(_ data: Data)
2020
}
2121

2222
public enum InfuraWebsocketMethod: String, Encodable {
@@ -113,10 +113,10 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
113113
public var socket: WebSocket
114114
public var delegate: Web3SocketDelegate
115115

116-
public init?(endpoint: URL,
117-
delegate wsdelegate: Web3SocketDelegate,
118-
keystoreManager manager: KeystoreManager? = nil,
119-
network net: Networks? = nil) {
116+
public init?(_ endpoint: URL,
117+
delegate wsdelegate: Web3SocketDelegate,
118+
keystoreManager manager: KeystoreManager? = nil,
119+
network net: Networks? = nil) {
120120
delegate = wsdelegate
121121
attachedKeystoreManager = manager
122122
url = endpoint
@@ -148,6 +148,42 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
148148
}
149149
}
150150

151+
public init?(_ endpoint: String,
152+
delegate wsdelegate: Web3SocketDelegate,
153+
keystoreManager manager: KeystoreManager? = nil,
154+
network net: Networks? = nil) {
155+
guard let endpointUrl = URL(string: endpoint) else {return nil}
156+
delegate = wsdelegate
157+
attachedKeystoreManager = manager
158+
url = endpointUrl
159+
socket = WebSocket(url: endpointUrl)
160+
socket.delegate = self
161+
let endpointString = endpointUrl.absoluteString
162+
if !(endpointString.hasPrefix("wss://") || endpointString.hasPrefix("ws://")) {
163+
return nil
164+
}
165+
if net == nil {
166+
if endpointString.hasPrefix("wss://") && endpointString.hasSuffix(".infura.io/ws") {
167+
let networkString = endpointString.replacingOccurrences(of: "wss://", with: "")
168+
.replacingOccurrences(of: ".infura.io/ws", with: "")
169+
switch networkString {
170+
case "mainnet":
171+
network = Networks.Mainnet
172+
case "rinkeby":
173+
network = Networks.Rinkeby
174+
case "ropsten":
175+
network = Networks.Ropsten
176+
case "kovan":
177+
network = Networks.Kovan
178+
default:
179+
break
180+
}
181+
}
182+
} else {
183+
network = net
184+
}
185+
}
186+
151187
public func connectSocket() {
152188
socket.connect()
153189
}
@@ -156,25 +192,39 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
156192
socket.disconnect()
157193
}
158194

159-
public static func connectToSocket(endpoint: URL,
160-
delegate: Web3SocketDelegate,
161-
keystoreManager manager: KeystoreManager? = nil,
162-
network net: Networks? = nil) -> WebsocketProvider? {
163-
guard let socketProvider = WebsocketProvider(endpoint: endpoint,
164-
delegate: delegate,
165-
keystoreManager: manager,
166-
network: net) else {
195+
public class func connectToSocket(_ endpoint: String,
196+
delegate: Web3SocketDelegate,
197+
keystoreManager manager: KeystoreManager? = nil,
198+
network net: Networks? = nil) -> WebsocketProvider? {
199+
guard let socketProvider = WebsocketProvider(endpoint,
200+
delegate: delegate,
201+
keystoreManager: manager,
202+
network: net) else {
167203
return nil
168204
}
169205
socketProvider.connectSocket()
170206
return socketProvider
171207
}
172208

173-
public func writeMessage(string: String) {
209+
public class func connectToSocket(_ endpoint: URL,
210+
delegate: Web3SocketDelegate,
211+
keystoreManager manager: KeystoreManager? = nil,
212+
network net: Networks? = nil) -> WebsocketProvider? {
213+
guard let socketProvider = WebsocketProvider(endpoint,
214+
delegate: delegate,
215+
keystoreManager: manager,
216+
network: net) else {
217+
return nil
218+
}
219+
socketProvider.connectSocket()
220+
return socketProvider
221+
}
222+
223+
public func writeMessage(_ string: String) {
174224
socket.write(string: string)
175225
}
176226

177-
public func writeMessage(data: Data) {
227+
public func writeMessage(_ data: Data) {
178228
socket.write(data: data)
179229
}
180230

@@ -197,6 +247,6 @@ public class WebsocketProvider: Web3Provider, IWebsocketProvider, WebSocketDeleg
197247
}
198248

199249
public func websocketDidReceivePong(socket: WebSocketClient, data: Data?) {
200-
print("Got pong! Maybe some data: \(data?.count)")
250+
print("Got pong! Maybe some data: \(String(describing: data?.count))")
201251
}
202252
}

web3swiftTests/web3swift_Websockets_Tests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class web3swift_websocket_Tests: XCTestCase {
4141
var socketProvider: InfuraWebsocketProvider?
4242

4343
func testSubscribeOnPendingTXs() {
44-
guard let socketProvider = InfuraWebsocketProvider.connectToSocket(.Mainnet, delegate: spyDelegate) else {
44+
guard let socketProvider = InfuraWebsocketProvider.connectToInfuraSocket(.Mainnet, delegate: spyDelegate) else {
4545
return XCTFail()
4646
}
4747
spyDelegate.asyncExpectation = expectation(description: "Delegate called")

0 commit comments

Comments
 (0)