투케이2K

47. (ios/swift) 세마포어 사용해 현재 연결된 네트워크 상태 체크 실시 - NWPathMonitor , 동기 처리 본문

IOS

47. (ios/swift) 세마포어 사용해 현재 연결된 네트워크 상태 체크 실시 - NWPathMonitor , 동기 처리

투케이2K 2021. 11. 10. 21:39
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT


[소스 코드]

    // MARK: - [필요 import 부분]    
    // import Network


    // MARK: - [현재 연결된 네트워크 상태 확인 메소드]
    let monitor = NWPathMonitor()
    static var checkNetworkValue = false

    func getWhatOfNetwork() -> Bool {
        self.monitor.start(queue: DispatchQueue.global())
        
        // [세마포어 선언 : 프로그램 로직을 동기화 구현]
        let semaphore = DispatchSemaphore(value: 0) // [value 0 값은 대기 상태 선언]
        
        self.monitor.pathUpdateHandler = { path in
            if path.status == .satisfied { // 네트워크가 연결된 경우
                if path.usesInterfaceType(.wifi) {
                    print("")
                    print("===============================")
                    print("[C_StateCheck >> getWhatOfNetwork() :: 현재 사용중인 네트워크 상태 확인 실시]")
                    print("[연결 상태 :: \("와이파이")]")
                    print("===============================")
                    print("")
                    
                    // [세마포어 신호 알림]
                    C_StateCheck.checkNetworkValue = true // 변수에 저장
                    semaphore.signal()
                }
                else if path.usesInterfaceType(.cellular) {
                    print("")
                    print("===============================")
                    print("[C_StateCheck >> getWhatOfNetwork() :: 현재 사용중인 네트워크 상태 확인 실시]")
                    print("[연결 상태 :: \("모바일")]")
                    print("===============================")
                    print("")
                    
                    // [세마포어 신호 알림]
                    C_StateCheck.checkNetworkValue = true // 변수에 저장
                    semaphore.signal()
                }
            }
            else { // 네트워크가 연결되지 않은 경우
                print("")
                print("===============================")
                print("[C_StateCheck >> getWhatOfNetwork() :: 현재 사용중인 네트워크 상태 확인 실시]")
                print("[연결 상태 :: \("없음")]")
                print("===============================")
                print("")
                
                // [세마포어 신호 알림]
                C_StateCheck.checkNetworkValue = false // 변수에 저장
                semaphore.signal()
            }
        }
        // [세마포어 확인 대기]
        semaphore.wait()

        print("")
        print("===============================")
        print("[C_StateCheck >> getWhatOfNetwork() :: 네트워크 연결 확인 상태 리턴 반환 값 확인]")
        print("[return :: \(C_StateCheck.checkNetworkValue)]")
        print("===============================")
        print("")
        return C_StateCheck.checkNetworkValue
    }

 


[결과 출력]


 

반응형
Comments