Skip to content
This repository was archived by the owner on Jan 28, 2019. It is now read-only.

Commit 0343045

Browse files
committed
VaporEngineRTM improvements
1 parent 07f51c0 commit 0343045

File tree

3 files changed

+69
-104
lines changed

3 files changed

+69
-104
lines changed

SKRTMAPI.xcodeproj/project.pbxproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
26D1C4D81EE4655100C95954 /* Starscream.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Starscream.framework; path = Carthage/Build/tvOS/Starscream.framework; sourceTree = "<group>"; };
4545
26DC0EB11E95BED900991BDF /* VaporEngineRTM.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VaporEngineRTM.swift; sourceTree = "<group>"; };
4646
26DC0EB21E95BED900991BDF /* SKRTMAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SKRTMAPI.swift; sourceTree = "<group>"; };
47-
D2C085F12024BF9600FEC5AB /* WebSocketFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocketFactory.swift; sourceTree = "<group>"; };
4847
/* End PBXFileReference section */
4948

5049
/* Begin PBXFrameworksBuildPhase section */
@@ -156,7 +155,6 @@
156155
children = (
157156
2604C59B202BFD83009CDBAF /* StarscreamRTM.swift */,
158157
26DC0EB11E95BED900991BDF /* VaporEngineRTM.swift */,
159-
D2C085F12024BF9600FEC5AB /* WebSocketFactory.swift */,
160158
);
161159
path = Conformers;
162160
sourceTree = "<group>";

Sources/SKRTMAPI/Conformers/VaporEngineRTM.swift

Lines changed: 69 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,92 @@
2222
// THE SOFTWARE.
2323

2424
#if os(Linux)
25-
import Dispatch
2625
import Foundation
27-
import SKCore
26+
import Sockets
27+
import HTTP
28+
import TLS
2829
import URI
30+
import WebSockets
2931

3032
public class VaporEngineRTM: RTMWebSocket {
31-
public weak var delegate: RTMDelegate?
32-
var webSocket: WebSocket?
33-
let queue = DispatchQueue(label: "com.launchsoft.slackkit")
33+
public var delegate: RTMDelegate?
3434

35-
public required init() {}
35+
public required init(){}
36+
37+
private var websocket: WebSocket?
3638

37-
// MARK: - RTM
3839
public func connect(url: URL) {
39-
queue.async {
40-
do {
41-
try WebSocketFactory.shared.connect(to: url.absoluteString) { (webSocket) in
42-
self.delegate?.didConnect()
43-
self.setupSocket(webSocket)
44-
}
45-
} catch let error {
46-
print("WebSocket client could not connect: \(error)")
40+
41+
let headers: [HeaderKey: String] = [:]
42+
let protocols: [String]? = nil
43+
do {
44+
let uri = try! URI(url.absoluteString)
45+
if uri.scheme.isSecure {
46+
let tcp = try TCPInternetSocket(
47+
scheme: "https",
48+
hostname: uri.hostname,
49+
port: uri.port ?? 443
50+
)
51+
let stream = try TLS.InternetSocket(tcp, TLS.Context(.client))
52+
try WebSocket.background(
53+
to: uri,
54+
using: stream,
55+
protocols: protocols,
56+
headers: headers,
57+
onConnect: didConnect
58+
)
59+
} else {
60+
let stream = try TCPInternetSocket(
61+
scheme: "http",
62+
hostname: uri.hostname,
63+
port: uri.port ?? 80
64+
)
65+
try WebSocket.background(
66+
to: uri,
67+
using: stream,
68+
protocols: protocols,
69+
headers: headers,
70+
onConnect: didConnect
71+
)
4772
}
73+
} catch {
74+
print("Error connecting to \(url.absoluteString): \(error)")
4875
}
4976
}
5077

51-
public func disconnect() {
52-
try? webSocket?.close()
53-
}
78+
func didConnect(websocket: WebSocket) throws -> Void {
79+
self.websocket = websocket
5480

55-
public func sendMessage(_ message: String) throws {
56-
guard webSocket != nil else {
57-
throw SlackError.rtmConnectionError
81+
self.delegate?.didConnect()
82+
83+
websocket.onText = { ws, text in
84+
self.delegate?.receivedMessage(text)
5885
}
59-
do {
60-
try webSocket?.send(message)
61-
} catch let error {
62-
throw error
86+
87+
websocket.onClose = { ws in
88+
self.delegate?.disconnected()
6389
}
64-
}
6590

66-
// MARK: - WebSocket
67-
private func setupSocket(_ webSocket: WebSocket) {
68-
webSocket.onText = { _, message in
69-
self.delegate?.receivedMessage(message)
91+
websocket.onPing = { ws, data in
92+
try ws.pong(data)
7093
}
71-
webSocket.onClose = { _, _, _, _ in
72-
self.delegate?.disconnected()
94+
95+
websocket.onPong = { ws, data in
96+
try ws.ping(data)
97+
}
98+
}
99+
100+
public func disconnect() {
101+
do {
102+
try self.websocket?.close()
103+
} catch {
104+
print("Error disconnecting from \(self.websocket.debugDescription): \(error)")
73105
}
74-
webSocket.onPing = { _, _ in try webSocket.pong() }
75-
webSocket.onPong = { _, _ in try webSocket.ping() }
76-
self.webSocket = webSocket
106+
}
107+
108+
public func sendMessage(_ message: String) throws {
109+
guard let websocket = websocket else { throw SlackError.rtmConnectionError }
110+
try websocket.send(message)
77111
}
78112
}
79113
#endif

Sources/SKRTMAPI/Conformers/WebSocketFactory.swift

Lines changed: 0 additions & 67 deletions
This file was deleted.

0 commit comments

Comments
 (0)