♻️ Refactor watchOS content view
This commit is contained in:
		| @@ -0,0 +1,72 @@ | ||||
| // | ||||
| //  WatchConnectivityService.swift | ||||
| //  WatchRunner Watch App | ||||
| // | ||||
| //  Created by LittleSheep on 2025/10/29. | ||||
| // | ||||
|  | ||||
| import Foundation | ||||
| import WatchConnectivity | ||||
| import Combine | ||||
|  | ||||
| // MARK: - Watch Connectivity | ||||
|  | ||||
| class WatchConnectivityService: NSObject, WCSessionDelegate, ObservableObject { | ||||
|     @Published var token: String? | ||||
|     @Published var serverUrl: String? | ||||
|  | ||||
|     private let session: WCSession | ||||
|  | ||||
|     override init() { | ||||
|         self.session = .default | ||||
|         super.init() | ||||
|         print("[watchOS] Activating WCSession") | ||||
|         self.session.delegate = self | ||||
|         self.session.activate() | ||||
|     } | ||||
|  | ||||
|     func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { | ||||
|         if let error = error { | ||||
|             print("[watchOS] WCSession activation failed with error: \(error.localizedDescription)") | ||||
|             return | ||||
|         } | ||||
|         print("[watchOS] WCSession activated with state: \(activationState.rawValue)") | ||||
|         if activationState == .activated { | ||||
|             requestDataFromPhone() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { | ||||
|         print("[watchOS] Received message: \(message)") | ||||
|         DispatchQueue.main.async { | ||||
|             if let token = message["token"] as? String { | ||||
|                 self.token = token | ||||
|             } | ||||
|             if let serverUrl = message["serverUrl"] as? String { | ||||
|                 self.serverUrl = serverUrl | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     func requestDataFromPhone() { | ||||
|         guard session.isReachable else { | ||||
|             print("[watchOS] Phone is not reachable") | ||||
|             return | ||||
|         } | ||||
|          | ||||
|         print("[watchOS] Requesting data from phone") | ||||
|         session.sendMessage(["request": "data"]) { [weak self] response in | ||||
|             print("[watchOS] Received reply: \(response)") | ||||
|             DispatchQueue.main.async { | ||||
|                 if let token = response["token"] as? String { | ||||
|                     self?.token = token | ||||
|                 } | ||||
|                 if let serverUrl = response["serverUrl"] as? String { | ||||
|                     self?.serverUrl = serverUrl | ||||
|                 } | ||||
|             } | ||||
|         } errorHandler: { error in | ||||
|             print("[watchOS] sendMessage failed with error: \(error.localizedDescription)") | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user