-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathAppDelegate.swift
112 lines (82 loc) · 2.56 KB
/
AppDelegate.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
//
// Created by Pavel Dolezal on 03/07/15.
// Copyright (c) 2015 eMan s.r.o. All rights reserved.
//
import UIKit
import CoreMotion
import CocoaMQTT
import WatchConnectivity
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate, ClientDelegate {
var window: UIWindow?
var flow: AppFlow!
var client: Client!
// MARK: - App life-cycle
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
setupLogging()
setupWatchKitSession()
setupWindow()
return true
}
// MARK: - Setup
private func setupWatchKitSession() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
client = Client(configuration: configurationForWatch)
client.delegate = self
client.connect()
}
}
private func setupWindow() {
flow = AppFlow()
window = UIWindow()
window?.frame = UIScreen.mainScreen().bounds
window?.rootViewController = flow.vc
window?.makeKeyAndVisible()
}
private func setupLogging() {
#if DEBUG
Log.enabled = true
Log.level = .Debug
#endif
}
// MARK: - WCSessionDelegate
func sessionDidDeactivate(session: WCSession) {
Log.info("Session did deactivate")
}
func sessionDidBecomeInactive(session: WCSession) {
Log.info("Session did become inactive")
}
/// Possbile messages:
/// 1. Diod change: ["red: "on"]
/// 2. Reconnect: ["reconnectBroker": "..."]
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
Log.info("Session did recieve message: \(message)")
let key = message.keys.first!
let value = message.values.first as! String
if let diod = Diod(rawValue: key) {
client.publish(diod, on: value == "on")
}
if key == "reconnectBroker" {
client.disconnect()
client.connect()
}
}
func sessionWatchStateDidChange(session: WCSession) {
Log.info("Session watch state did change")
if session.watchAppInstalled && session.paired {
Log.info("Watch app installed and paired")
}
}
// MARK: - ClientDelegate
func client(client: Client, deviceDidChangeOnlineStatus: Bool) {
}
func client(client: Client, didChangeDiod diod: Diod, on: Bool) {
let message = [diod.rawValue: on ? "on" : "off"]
WCSession.defaultSession().sendMessage(message, replyHandler: nil, errorHandler: nil)
}
func client(client: Client, didChangeConnectionToMessageBroker: Bool) {
}
}