Skip to content

Commit c7c361b

Browse files
committed
Backing out conflicts with latest master implementation
1 parent a6b211a commit c7c361b

File tree

6 files changed

+12
-75
lines changed

6 files changed

+12
-75
lines changed

Sources/HAP/Base/Characteristic.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public class GenericCharacteristic<T: CharacteristicValueType>: Characteristic,
8686
guard let device = service?.accessory?.device else {
8787
return
8888
}
89-
device.notifyChange(of: self)
89+
device.notify(characteristicListeners: self)
9090
}
9191
}
9292

Sources/HAP/Base/Info.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ extension Service {
3030
guard let accessory = self.accessory else {
3131
return
3232
}
33-
_ = accessory.device?.observers.map { $0.didRequestIdentificationOf(accessory) }
33+
_ = accessory.device?.onIdentify.map { $0(accessory) }
3434
})
3535
}
3636
}

Sources/HAP/Endpoints/characteristics().swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func characteristics(device: Device) -> Application {
157157
}
158158

159159
// notify listeners
160-
device.notifyChange(of: characteristic, exceptToListener: connection)
160+
device.notify(characteristicListeners: characteristic, exceptListener: connection)
161161
}
162162

163163
// toggle events for this characteristic on this connection

Sources/HAP/Endpoints/identify().swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Foundation
22

33
func identify(device: Device) -> Application {
44
return { connection, request in
5-
_ = device.observers.map { $0.didRequestIdentificationOf(device.accessories[0]) }
5+
_ = device.onIdentify.map { $0(nil) }
66
return Response(status: .noContent)
77
}
88
}

Sources/HAP/Server/Device.swift

+5-64
Original file line numberDiff line numberDiff line change
@@ -30,42 +30,6 @@ struct Box<T: Any>: Hashable, Equatable {
3030
}
3131
}
3232

33-
// MARK: Device Observer protocol
34-
35-
public protocol DeviceObserver {
36-
func characteristicDidChange(
37-
_ accessory: Accessory,
38-
serviceType: ServiceType,
39-
characteristic: CharacteristicType)
40-
func characteristicListenerDidSubscribe(
41-
_ accessory: Accessory,
42-
serviceType: ServiceType,
43-
characteristic: CharacteristicType)
44-
func characteristicListenerDidUnsubscribe(
45-
_ accessory: Accessory,
46-
serviceType: ServiceType,
47-
characteristic: CharacteristicType)
48-
func didRequestIdentificationOf(_ accessory: Accessory)
49-
}
50-
51-
public extension DeviceObserver {
52-
func characteristicDidChange(_ accessory: Accessory,
53-
serviceType: ServiceType,
54-
characteristic: CharacteristicType) {}
55-
func characteristicListenerDidSubscribe(
56-
_ accessory: Accessory,
57-
serviceType: ServiceType,
58-
characteristic: CharacteristicType) {}
59-
func characteristicListenerDidUnsubscribe(
60-
_ accessory: Accessory,
61-
serviceType: ServiceType,
62-
characteristic: CharacteristicType) {}
63-
func didRequestIdentificationOf(_ accessory: Accessory) {}
64-
}
65-
66-
// MARK: Device class
67-
68-
// swiftlint:disable:next type_body_length
6933
public class Device {
7034
public let name: String
7135
public let isBridge: Bool
@@ -74,10 +38,10 @@ public class Device {
7438
return configuration.setupCode
7539
}
7640

77-
public var observers: [DeviceObserver] = []
78-
7941
public private(set) var accessories: [Accessory]
8042

43+
public var onIdentify: [(Accessory?) -> Void] = []
44+
8145
let storage: Storage
8246

8347
weak var server: Server?
@@ -370,12 +334,6 @@ public class Device {
370334
} else {
371335
characteristicEventListeners[Box(characteristic)] = [listener]
372336
}
373-
if let accessory = characteristic.service?.accessory {
374-
_ = observers.map {$0.characteristicListenerDidSubscribe(accessory,
375-
serviceType: characteristic.service!.type,
376-
characteristic: characteristic.type)
377-
}
378-
}
379337
}
380338

381339
@discardableResult
@@ -384,28 +342,11 @@ public class Device {
384342
guard characteristicEventListeners[Box(characteristic)] != nil else {
385343
return nil
386344
}
387-
let subscriber = characteristicEventListeners[Box(characteristic)]!.remove(connection)
388-
if let accessory = characteristic.service?.accessory {
389-
_ = observers.map {$0.characteristicListenerDidUnsubscribe(accessory,
390-
serviceType: characteristic.service!.type,
391-
characteristic: characteristic.type)
392-
}
393-
}
394-
return subscriber
345+
return characteristicEventListeners[Box(characteristic)]!.remove(connection)
395346
}
396347

397-
func notifyChange(of characteristic: Characteristic,
398-
exceptToListener except: Server.Connection? = nil) {
399-
// Notify external listeners of a characteristic change
400-
// The characteristic itself is not passed to avoid Box'ing the object
401-
if let accessory = characteristic.service?.accessory {
402-
_ = observers.map {$0.characteristicDidChange(accessory,
403-
serviceType: characteristic.service!.type,
404-
characteristic: characteristic.type)
405-
406-
}
407-
}
408-
// Notify internal listeners (server connections) of changes to a characteristic
348+
func notify(characteristicListeners characteristic: Characteristic,
349+
exceptListener except: Server.Connection? = nil) {
409350
guard let listeners = characteristicEventListeners[Box(characteristic)]?.filter({ $0 != except }),
410351
!listeners.isEmpty
411352
else {

Sources/hap-server/main.swift

+3-7
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,9 @@ let device = Device(
5050
Accessory.LockMechanism(info: Service.Info(name: "Front Door Lock", serialNumber: "00014")),
5151
Accessory.SecuritySystem(info: Service.Info(name: "Alarm", serialNumber: "00015"))
5252
])
53-
54-
struct Obs: DeviceObserver {
55-
func didRequestIdentificationOf(_ accessory: Accessory) {
56-
logger.info("Got identified: \(String(describing: accessory))")
57-
}
58-
}
59-
device.observers.append(Obs())
53+
device.onIdentify.append({ acc in
54+
logger.info("Got identified: \(String(describing: acc))")
55+
})
6056

6157
let timer = DispatchSource.makeTimerSource()
6258
timer.schedule(deadline: .now() + .seconds(1), repeating: .seconds(5))

0 commit comments

Comments
 (0)