투케이2K

576. (ios/swift5) [간단 소스] NWConnection 사용해 Websocket 웹소켓 메시지 send 전송 방법 - Metadata 본문

IOS

576. (ios/swift5) [간단 소스] NWConnection 사용해 Websocket 웹소켓 메시지 send 전송 방법 - Metadata

투케이2K 2024. 12. 1. 00:16

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Swift


- 개발 툴 : Xcode


- NWConnection 설명 :

  >> NWConnection 는 로컬 엔드포인트와 원격 엔드포인트 간의 양방향 데이터 연결 (TCP , UDP) 을 수행할 수 있습니다

  >> NWConnection 를 사용하기 위해서는 import Network 패키지 호출 정의가 필요합니다

  >> NWParameters 설정 가능 옵션 : 

   - tls
   - tcp
   - dtls
   - udp
   - quic
   - quicDatagram

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

// ---------------------------------------
// MARK: - [SEARCH FAST] : observableSendData : 실시간 소켓 메시지 전송 수행
// ---------------------------------------
// C_WebSocket_NMConnection_Client_Module.connection : NWConnection(to: .url(URL(string: url)!), using: parameters)
// ---------------------------------------

static var SEND_ERROR_LOG = ""
func observableSendData(msg:String, completion: @escaping (Bool)->()) {
    
    /*
    // -----------------------------------------
    [observableSendData 메소드 설명]
    // -----------------------------------------
    1. 실시간 소켓 메시지 전송 수행
    // -----------------------------------------
    2. 호출 방법 :
        
        C_WebSocket_NMConnection_Client_Module().observableSendData(msg: "hello"){(sendResult) in
            
            S_Log._F_(description: "웹 소켓 실시간 메시지 전송 확인", data: ["\(sendResult)"])

            if sendResult == true {
            
            }
            else {
            S_Log._F_(description: "웹 소켓 실시간 메시지 전송 에러 메시지", data: ["\(C_WebSocket_NMConnection_Client_Module.SEND_ERROR_LOG)"])
            }
            
        }
        
    // -----------------------------------------
    3. 필요 import :
        
        import Network
    // -----------------------------------------
    */
    
    
    // [변수 선언]
    C_WebSocket_NMConnection_Client_Module.SEND_ERROR_LOG = ""
    
    
    // [로직 처리 수행]
    DispatchQueue.global().sync {

        if C_WebSocket_NMConnection_Client_Module.connection != nil && C_Util().stringNotNull(str: msg) == true {
            
            S_Log._F_(description: "웹 소켓 클라이언트 >> 서버 메시지 전송 수행", data: nil)
            
            // ---------------------------------------------
            // MARK: [String To Byte 데이터 전송 수행]
            // ---------------------------------------------
            let data = msg.data(using: .utf8) ?? Data() // [string to byte]
            let metadata = NWProtocolWebSocket.Metadata(opcode: .text)
            let context = NWConnection.ContentContext(identifier: "WebSocketMessage", metadata: [metadata])
            
            C_WebSocket_NMConnection_Client_Module.connection?.send(content: data, contentContext: context, isComplete: true, completion: .contentProcessed { error in
                if let error = error {
                    C_WebSocket_NMConnection_Client_Module.SEND_ERROR_LOG = "[Error] : Socket Send Message Error"
                    
                    S_Log._D_(description: "웹 소켓 실시간 메시지 전송 에러", data: [
                        "M_LOG :: \(C_WebSocket_NMConnection_Client_Module.SEND_ERROR_LOG)",
                        "Description :: \(error)"
                    ])
                    completion(false) // [콜백 반환]
                    return
                    
                } else {
                    S_Log._D_(description: "웹 소켓 실시간 메시지 전송 성공", data: [
                        "msg :: \(msg)"
                    ])
                    completion(true) // [콜백 반환]
                    return
                    
                }
            })
            
        }
        else {
            C_WebSocket_NMConnection_Client_Module.SEND_ERROR_LOG = "[Error] : Input Send Message Is Null"
            
            S_Log._D_(description: "웹 소켓 실시간 메시지 전송 에러", data: [
                "M_LOG :: \(C_WebSocket_NMConnection_Client_Module.SEND_ERROR_LOG)"
            ])
            completion(false) // [콜백 반환]
            return
        }
        
    }

}

// --------------------------------------------------------------------------------------

 

반응형
Comments