Notice
Recent Posts
Recent Comments
Link
투케이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
}
}
}
// --------------------------------------------------------------------------------------
반응형
'IOS' 카테고리의 다른 글
Comments