Notice
Recent Posts
Recent Comments
Link
투케이2K
549. (ios/swift5) [URLSession] [2] Websocket 웹 소켓 receive 실시간 메시지 수신 받기 처리 본문
IOS
549. (ios/swift5) [URLSession] [2] Websocket 웹 소켓 receive 실시간 메시지 수신 받기 처리
투케이2K 2024. 9. 13. 15:55[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT5
[소스 코드]
// -----------------------------------------------------------------------------------------
// [웹 소켓 통신 연결 및 ping 체크 참고 사이트]
// -----------------------------------------------------------------------------------------
https://blog.naver.com/kkh0977/223583023595
// -----------------------------------------------------------------------------------------
// [사용 방법 예시]
// -----------------------------------------------------------------------------------------
C_WebSocket_Urlsession_Client_Module().onReceive(){(result, response) in
S_Log._F_(description: "웹 소켓 실시간 메시지 수신 대기 결과", data: [response])
if result == false {
C_WebSocket_Urlsession_Client_Module().closeWebSocket(){(result, response) in
S_Log._F_(description: "웹 소켓 종료 결과", data: [response])
}
}
else {
// MARK: [실시간 메시지 수신 처리]
}
}
// -----------------------------------------------------------------------------------------
// MARK: - [SEARCH FAST] : WebSocket onReceive
// -----------------------------------------------------------------------------------------
func onReceive(callback: @escaping (Bool, String)->()) {
S_Log._D_(description: self.ACTIVITY_NAME + " :: [onReceive] :: WebSocket onReceive [메시지 수신] 구독 수행", data: nil)
// -----------------------------------------
// [사전 방어 로직 작성]
// -----------------------------------------
if C_WebSocket_Urlsession_Client_Module.webSocketOpenFlag == false || C_WebSocket_Urlsession_Client_Module.webSocketTask == nil {
// [콜백 반환]
callback(false, self.ACTIVITY_NAME + " :: [onReceive] :: [ERROR] :: oepn false || socketTask is nil")
return
}
// -----------------------------------------
// -----------------------------------------
// [웹소켓 메시지 수신 상태 확인]
// -----------------------------------------
C_WebSocket_Urlsession_Client_Module.webSocketTask!.receive { result in
switch result {
case .failure(let error):
S_Log._E_(description: self.ACTIVITY_NAME + " :: [onReceive] :: webSocketTask.failure :: [메시지 수신] 구독 실패", data: ["Failed to receive message :: \(error)"])
callback(false, self.ACTIVITY_NAME + " :: [onReceive] :: [ERROR] :: " + "Failed to receive message :: \(error)")
return
case .success(let message):
switch message {
case .string(let text):
S_Log._D_(description: self.ACTIVITY_NAME + " :: [onReceive] :: webSocketTask.receive :: [메시지 수신] :: string", data: [text])
// [콜백 반환]
callback(true, text) // MARK: [콜백 반환]
// MARK: [중요] : [실시간 메시지 감지 위해 이벤트 재등록]
self.onReceive(){(result, response) in
callback(result, response) // [콜백 반환]
}
case .data(let data):
S_Log._D_(description: self.ACTIVITY_NAME + " :: [onReceive] :: webSocketTask.receive :: [메시지 수신] :: data", data: nil)
@unknown default:
S_Log._D_(description: self.ACTIVITY_NAME + " :: [onReceive] :: webSocketTask.receive :: [메시지 수신] :: @unknown", data: nil)
}
}
}
}
[결과 출력]
반응형
'IOS' 카테고리의 다른 글
Comments