-
Notifications
You must be signed in to change notification settings - Fork 749
Expand file tree
/
Copy pathSplitNetworkTransport.swift
More file actions
32 lines (27 loc) · 1.48 KB
/
SplitNetworkTransport.swift
File metadata and controls
32 lines (27 loc) · 1.48 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
#if !COCOAPODS
import Apollo
#endif
/// A network transport that sends subscriptions using one `NetworkTransport` and other requests using another `NetworkTransport`. Ideal for sending subscriptions via a web socket but everything else via HTTP.
public class SplitNetworkTransport {
private let httpNetworkTransport: NetworkTransport
private let webSocketNetworkTransport: NetworkTransport
/// Designated initializer
///
/// - Parameters:
/// - httpNetworkTransport: A `NetworkTransport` to use for non-subscription requests. Should generally be a `HTTPNetworkTransport` or something similar.
/// - webSocketNetworkTransport: A `NetworkTransport` to use for subscription requests. Should generally be a `WebSocketTransport` or something similar.
public init(httpNetworkTransport: NetworkTransport, webSocketNetworkTransport: NetworkTransport) {
self.httpNetworkTransport = httpNetworkTransport
self.webSocketNetworkTransport = webSocketNetworkTransport
}
}
// MARK: - NetworkTransport conformance
extension SplitNetworkTransport: NetworkTransport {
public func send<Operation>(operation: Operation, completionHandler: @escaping (Result<GraphQLResponse<Operation>, Error>) -> Void) -> Cancellable {
if operation.operationType == .subscription {
return webSocketNetworkTransport.send(operation: operation, completionHandler: completionHandler)
} else {
return httpNetworkTransport.send(operation: operation, completionHandler: completionHandler)
}
}
}