WatchStateModel.swift 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import Foundation
  2. import SwiftUI
  3. import WatchConnectivity
  4. class WatchStateModel: NSObject, ObservableObject {
  5. var session: WCSession
  6. @Published var result = ""
  7. @Published var glucose = "0"
  8. @Published var trend = "??"
  9. @Published var delta = "??"
  10. @Published var lastLoopDate: Date?
  11. @Published var bolusIncrement: Decimal?
  12. @Published var maxCOB: Int?
  13. @Published var maxBolus: Decimal?
  14. @Published var bolusRecommended: Decimal?
  15. @Published var iob: Decimal?
  16. @Published var cob: Decimal?
  17. init(session: WCSession = .default) {
  18. self.session = session
  19. super.init()
  20. session.delegate = self
  21. session.activate()
  22. }
  23. func addCarbs(_ carbs: Int) {
  24. session.sendMessage(["addCarbs": carbs], replyHandler: nil) { error in
  25. print("ASDF: " + error.localizedDescription)
  26. }
  27. }
  28. private func processState(_ state: WatchState) {
  29. glucose = state.glucose ?? "?"
  30. trend = state.trend ?? "?"
  31. delta = state.delta ?? "?"
  32. }
  33. }
  34. extension WatchStateModel: WCSessionDelegate {
  35. func session(_: WCSession, activationDidCompleteWith state: WCSessionActivationState, error _: Error?) {
  36. print("WCSession activated: \(state == .activated)")
  37. session.sendMessage(["active": true], replyHandler: nil) { error in
  38. print("ASDF: " + error.localizedDescription)
  39. }
  40. }
  41. func session(_: WCSession, didReceiveMessage message: [String: Any]) {
  42. if let text = message["message"] as? String {
  43. DispatchQueue.main.async {
  44. self.result = text
  45. }
  46. }
  47. }
  48. func session(_: WCSession, didReceiveMessageData messageData: Data) {
  49. if let state = try? JSONDecoder().decode(WatchState.self, from: messageData) {
  50. DispatchQueue.main.async {
  51. self.processState(state)
  52. }
  53. }
  54. }
  55. }