![]() | ![]() |
---|
웹소켓(WebSocket)이란
StartScream 라이브러리 이용
IOS 에서 제공하는 URLSessionWebSocketTask을 이용하여 웹소켓을 사용할 수 있지만, Starscream 사용하여 좀 더 손쉽게 웹소켓 통신을 구현할 수 있음.
import Starscream
private var socket: WebSocket?
private let socketUrl = 소켓URL
func connect() {
let request = URLRequest(url: socketUrl)
self.socket = WebSocket(request: request)
self.socket?.delegate = self
self.socket?.connect()
}
func disconnect() {
self.socket?.disconnect()
}
extension 소켓클래스: WebSocketDelegate {
func didReceive(event: Starscream.WebSocketEvent, client: Starscream.WebSocket) {
switch event {
case .connected(_):
<#code#>
case .disconnected(_, _):
<#code#>
case .text(_):
<#code#>
case .binary(_):
<#code#>
case .pong(_):
<#code#>
case .ping(_):
<#code#>
case .error(_):
<#code#>
case .viabilityChanged(_):
<#code#>
case .reconnectSuggested(_):
<#code#>
case .cancelled:
<#code#>
}
}
}
event에 따라 분기처리를 할 수 있음.
소켓에 들어오는 데이터는 .text에 들어오는데 들어오는 데이터에 맞춰 구현 해주면 됨.
예를 들어
case .text(let string):
do {
let decoder = JSONDecoder()
let result = try decoder.decode(ReceiveMessage.self, from: Data(string.utf8))
if result.event == "message.new" {
guard let data = result.messageData else { return }
message.append(data)
scrollToEnd = true
}
}
catch {
print(error.localizedDescription)
}
이런 식으로 원하는 코드를 구현 하면 됨.