Notice
Recent Posts
Recent Comments
Link
투케이2K
126. (TWOK/LOGIC) [Ios] NWConnection 사용해 Broker MQTT 연결 수행 시 MQTT Version 버전 지정 로직 본문
투케이2K 로직정리
126. (TWOK/LOGIC) [Ios] NWConnection 사용해 Broker MQTT 연결 수행 시 MQTT Version 버전 지정 로직
투케이2K 2024. 12. 2. 19:08[로직 정리]
정리 로직 : Ios / 아이폰
상태 : [Ios] NWConnection 사용해 Broker MQTT 연결 수행 시 MQTT Version 버전 지정 로직
[설 명]
// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------
- Broker MQTT 통신을 수행하기 위한 IP , PORT 정보 확인 필요
- 사전) 위치 권한 설정 필요
- NWConnection 설명 :
>> NWConnection 는 로컬 엔드포인트와 원격 엔드포인트 간의 양방향 데이터 연결 (TCP , UDP) 을 수행할 수 있습니다
>> NWConnection 를 사용하기 위해서는 import Network 패키지 호출 정의가 필요합니다
>> NWParameters 설정 가능 옵션 :
- tls
- tcp
- dtls
- udp
- quic
- quicDatagram
>> 참고 사이트 : https://developer.apple.com/documentation/network/nwconnection
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------
1. 애플리케이션 실행 및 MQTT 통신을 수행할 수 있는 화면 진입
2. MQTT 클래스 화면에서 lazy 선언으로 NWProtocolTCP.Options , NWParameters 옵션 설정 수행
>> TimeOut 설정으로 연결 대기 제한 시간 설정
3. IP , PORT 정보 사용해 NWConnection 객체 초기화 URL 지정 및 설정한 옵션 값 지정 수행 >> 연결 요청 실시
>> nwConnection?.start(queue: .global())
4. 연결 완료 상태를 감지하기 위한 stateUpdateHandler 이벤트 감지 핸들러 등록 및 ready 준비 완료 상태 확인
5. stateUpdateHandler 핸들러에서 준비 완료 상태가 된 경우 MQTT 연결 옵션을 설정하기 위한 send 정보 전달 수행
/*
// ---------------------------------------------
// MARK: [최종 연결 요청 패킷 보내기]
// ---------------------------------------------
1. MQTT 버전 설명 :
- 0x03 : MQTT 3.1 : MQIsdp
- 0x04 : MQTT 3.1.1 : MQTT
- 0x05 : MQTT 5.0 : MQTT
// ---------------------------------------------
2. Connect Flags 타입 종류 :
- Bit : Name
- 7 : User Name Flag
- 6 : Password Flag
- 5 : Will Retain
- 4 : Will QoS
- 3 : Will Flag
- 2 : Clean Session
- 1 : Reserved
// ---------------------------------------------
3. Keep Alive : 클라이언트와 브로커간 연결 상태 유지 값 : 해당 값 동안 들어온 패킷이 없으면 서버는 연결 중단 상태로 인지
- Keep Alive 설정의 최대값은 65535초, 즉 18시간 12분 15초
- 60 초 : 0x3C
- 180 초 : 0xB4
// ---------------------------------------------
4. QoS : Application Message의 신뢰성을 보장하는 레벨입니다 (0, 1, 2)
- 숫자가 커질수록 높은 신뢰성을 보장하지만 그만큼의 리소스를 소모합니다
// ---------------------------------------------
*/
// ---------------------------------------------
var packet = [UInt8]()
packet.append(0x10) // [CONNECT Control Packet type]
let variableHeader: [UInt8] = [
0x00, 0x04, // [Length of "MQTT 3.1.1"]
0x4D, 0x51, 0x54, 0x54, // ["MQTT"] : "MQTT".utf8
0x04, // [Protocol Level (4 for MQTT 3.1.1)]
0x02, // [Connect Flags (Clean session)]
0x00, 0xB4 // [Keep Alive (180 seconds)] : 클라이언트와 브로커간 연결 상태 유지 값 : Hex To Dec
]
let clientIdBytes = Array(clientId.utf8) // [클라이언트 아이디]
let payload = UInt16(clientIdBytes.count).bigEndianBytes + clientIdBytes
let remainingLength = UInt8(variableHeader.count + payload.count)
packet.append(remainingLength)
packet.append(contentsOf: variableHeader)
packet.append(contentsOf: payload)
// ---------------------------------------------
nwConnection?.send(content: Data(packet), completion: .contentProcessed { error in
if let error = error {
C_Broker_Mqtt_NWConnection_Client_Module.SETTING_ERROR_LOG = "[Error] : Mqtt Setting Send Connection Packet Error"
S_Log._E_(description: "MQTT 연결 요청 패킷 전송 에러", data: [
"M_LOG :: \(C_Broker_Mqtt_NWConnection_Client_Module.SEND_ERROR_LOG)",
"Description :: \(error)"
])
// [콜백 반환]
completion(false)
return
} else {
S_Log._W_(description: "MQTT 연결 요청 패킷 전송 성공", data: nil)
// [콜백 반환]
completion(true)
return
}
})
6. 연결 요청 패킷 전달 후 error 없이 최종 성공 완료 된 경우 연결 완료 상태 Flag 플래그 값 True 변경 수행
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
[Ios - NWConnection 설명 및 TCP IP 소켓 통신 연결 및 데이터 전송 방법]
https://blog.naver.com/kkh0977/223670153413
[Ios - NWConnection 사용해 TCP IP 소켓 통신 NWProtocolTCP.Options 옵션 설정 방법]
https://blog.naver.com/kkh0977/223672535940
[Ios - NWConnection 사용해 TCP IP 소켓 통신 연결 후 stateUpdateHandler 연결 상태 확인 방법]
https://blog.naver.com/kkh0977/223672601987
[Ios - NWConnection 사용해 Broker 브로커 MQTT 연결 방법]
https://blog.naver.com/kkh0977/223678381489
[Ios - NWConnection 사용해 Broker 브로커 MQTT 메시지 publish send 전송 방법]
https://blog.naver.com/kkh0977/223678384631
[Ios - NWConnection 사용해 Broker 브로커 MQTT 메시지 subscribe 구독 방법]
https://blog.naver.com/kkh0977/223678387123
// --------------------------------------------------------------------------------------
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments