투케이2K

550. (ios/swift5) [URLSession] [3] Websocket 웹 소켓 send 실시간 메시지 송신 전송 처리 본문

IOS

550. (ios/swift5) [URLSession] [3] Websocket 웹 소켓 send 실시간 메시지 송신 전송 처리

투케이2K 2024. 9. 13. 15:59

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // [웹 소켓 통신 연결 및 ping 체크 참고 사이트]
    // -----------------------------------------------------------------------------------------
    https://blog.naver.com/kkh0977/223583023595





    // -----------------------------------------------------------------------------------------
    // [사용 방법 예시]
    // -----------------------------------------------------------------------------------------

                 DispatchQueue.main.asyncAfter(deadline: .now() + 5) { // [5초 시간 설정]
                     
                     C_WebSocket_Urlsession_Client_Module().onSend(tag: "HELLO_1 전송", data: "hello_1"){(result, response) in
                         
                         S_Log._F_(description: "웹 소켓 실시간 메시지 송신 결과_1", data: [response])
                         
                     }
                     
                 }





    // -----------------------------------------------------------------------------------------
    // MARK: - [SEARCH FAST] : WebSocket onSend
    // -----------------------------------------------------------------------------------------
    func onSend(tag: String, data: String, callback: @escaping (Bool, String)->()) {
        S_Log._F_(description: self.ACTIVITY_NAME + " :: [onSend] :: WebSocket onSend [메시지 전송] 수행", data: [
            "TAG :: \(tag)",
            "MESSAGE :: \(data)"
        ])
        
        // -----------------------------------------
        // [사전 방어 로직 작성]
        // -----------------------------------------
        if C_WebSocket_Urlsession_Client_Module.webSocketOpenFlag == false || C_WebSocket_Urlsession_Client_Module.webSocketTask == nil {
            
            // [콜백 반환]
            callback(false, self.ACTIVITY_NAME + " :: [onSend] :: [ERROR] :: oepn false || socketTask is nil")
            return
        }
        // -----------------------------------------
        
        
        if C_WebSocket_Urlsession_Client_Module.webSocketTask!.state == .running {
            print(self.ACTIVITY_NAME + " :: [onSend] :: WebSocket onSend [메시지 전송] :: WebSocket is connected == true")
            
            // -----------------------------------------
            // [웹소켓 메시지 전송 수행]
            // -----------------------------------------
            let message = URLSessionWebSocketTask.Message.string(data)
            C_WebSocket_Urlsession_Client_Module.webSocketTask!.send(message) { error in
                if let error = error {
                    
                    // [콜백 반환]
                    callback(false, self.ACTIVITY_NAME + " :: [onSend] :: [ERROR] :: Failed to send message :: \(error)")
                    return
                } else {
                    
                    // [콜백 반환]
                    callback(true, self.ACTIVITY_NAME + " :: [onSend] :: [SUCCESS] :: Send Message")
                    return
                }
            }
            
        } else {
            print(self.ACTIVITY_NAME + " :: [onSend] :: WebSocket onSend [메시지 전송] :: WebSocket is connected == false")
            
            // [콜백 반환]
            callback(false, self.ACTIVITY_NAME + " :: [onSend] :: [ERROR] :: WebSocket is connected == false")
            return
        }

        
    }
 

[결과 출력]

 

 

반응형
Comments