forked from AcaMate/AcaMate_iOS
[✨] SignalR 연결 - 채팅 관련 기능 추가 및 설정 중
This commit is contained in:
parent
46be2a0299
commit
b226ad8050
Binary file not shown.
|
@ -105,6 +105,7 @@ public class APIManager {
|
||||||
self.accToken = (response as! Access).access
|
self.accToken = (response as! Access).access
|
||||||
var updateRequest = request
|
var updateRequest = request
|
||||||
updateRequest.parameters["token"] = self.accToken
|
updateRequest.parameters["token"] = self.accToken
|
||||||
|
printLog("Acc: \(self.accToken)")
|
||||||
return APIManager().loadAPIData(updateRequest)
|
return APIManager().loadAPIData(updateRequest)
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ class WebSocketManager: ObservableObject ,WebSocketDelegate {
|
||||||
var request = URLRequest(url: url)
|
var request = URLRequest(url: url)
|
||||||
request.timeoutInterval = 5
|
request.timeoutInterval = 5
|
||||||
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
|
||||||
|
|
||||||
request.setValue("Upgrade", forHTTPHeaderField: "Connection")
|
request.setValue("Upgrade", forHTTPHeaderField: "Connection")
|
||||||
|
|
||||||
socket = WebSocket(request: request)
|
socket = WebSocket(request: request)
|
||||||
|
@ -29,21 +28,52 @@ class WebSocketManager: ObservableObject ,WebSocketDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func connect() {
|
func connect() {
|
||||||
socket?.connect()
|
|
||||||
printLog("TRY CONNECT SOCKET")
|
printLog("TRY CONNECT SOCKET")
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
|
socket?.connect()
|
||||||
let handShakeMsg = """
|
}
|
||||||
{"protocol":"json","version":1}\u{1E}
|
|
||||||
|
func didReceive(event: Starscream.WebSocketEvent, client: WebSocketClient) {
|
||||||
|
switch event {
|
||||||
|
case .connected(let header):
|
||||||
|
printLog("CONNECTED : \(header)")
|
||||||
|
// 우리는 현재 JSON기반으로 메시지를 주고 받을거고 SignalR JSON 프로토콜의 버전은 1이다
|
||||||
|
let handShakeMsg =
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
"protocol":"json",
|
||||||
|
"version":1
|
||||||
|
}\u{1E}
|
||||||
"""
|
"""
|
||||||
self.socket?.write(string: handShakeMsg)
|
self.socket?.write(string: handShakeMsg)
|
||||||
|
|
||||||
|
case .disconnected(let reason, let code):
|
||||||
|
printLog("❌ DISCONNECTED: [\(code)] - \(reason)")
|
||||||
|
|
||||||
|
case .error(let error):
|
||||||
|
printLog("🆘 SOCKET ERROR: \(error?.localizedDescription ?? "unknown")")
|
||||||
|
|
||||||
|
case .text(let text):
|
||||||
|
printLog("📩 SERVER SENT: \(text)")
|
||||||
|
receivedMessage.append(text)
|
||||||
|
|
||||||
|
|
||||||
|
case .binary(let binary):
|
||||||
|
printLog("BINARY?: \(binary)")
|
||||||
|
|
||||||
|
case .cancelled:
|
||||||
|
printLog("SOCKET CONNECTED CANCELLED!!!")
|
||||||
|
|
||||||
|
default:
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func disconnect() {
|
func disconnect() {
|
||||||
socket?.disconnect()
|
socket?.disconnect()
|
||||||
socket?.delegate = nil // 추가: delegate 해제
|
socket?.delegate = nil // 추가: delegate 해제
|
||||||
socket = nil // 필요시, 소켓 객체 해제
|
socket = nil // 필요시, 소켓 객체 해제
|
||||||
printLog("CLOSE SOCKET")
|
printLog("CLOSE SOCKET")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendMessage(_ message: String) {
|
func sendMessage(_ message: String) {
|
||||||
|
@ -58,24 +88,15 @@ class WebSocketManager: ObservableObject ,WebSocketDelegate {
|
||||||
printLog("SEND THE MESSAGE: \(message)")
|
printLog("SEND THE MESSAGE: \(message)")
|
||||||
}
|
}
|
||||||
|
|
||||||
func didReceive(event: Starscream.WebSocketEvent, client: any Starscream.WebSocketClient) {
|
func joinRoom(_ cid: String){
|
||||||
switch event {
|
let json = """
|
||||||
|
{
|
||||||
case .connected(let header):
|
"type": 1,
|
||||||
printLog("CONNECTED : \(header)")
|
"target":"JoinRoom",
|
||||||
case .disconnected(let reason, let code):
|
"arguments":["\(cid)"]
|
||||||
printLog("DISCONNECTED: [\(code)] - \(reason)")
|
}\u{1E}
|
||||||
case .text(let text):
|
"""
|
||||||
receivedMessage.append(text)
|
socket?.write(string: json)
|
||||||
printLog("SERVER SAID: \(text)")
|
printLog("JOIN: \(cid)")
|
||||||
case .binary(let binary):
|
|
||||||
printLog("BINARY?: \(binary)")
|
|
||||||
case .error(let error):
|
|
||||||
printLog("ERROR!: \(error)")
|
|
||||||
case .cancelled:
|
|
||||||
printLog("SOCKET CONNECTED CANCELLED!!!")
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user