डिवाइस को चालू करने के बाद, इन ट्रेट का इस्तेमाल किया जा सकता है:
OtaSoftwareUpdateRequestorTrait
इस ट्रेट की मदद से, कैमरे वाले डिवाइस पर ओटीए सॉफ़्टवेयर अपडेट की निगरानी की जा सकती है. डिवाइस को चालू करने के बाद, कैमरा अपडेट की प्रोसेस शुरू करता है और ऐप्लिकेशन को अपना स्टेटस रिपोर्ट करता है. जब ऐप्लिकेशन को यह स्टेटस मिलता है कि सॉफ़्टवेयर अपडेट पूरा हो गया है, तब कैमरा लाइव स्ट्रीम करना शुरू कर सकता है.
यहां दिए गए सैंपल कोड और जानकारी से पता चलता है कि इस ट्रेट का इस्तेमाल कैसे किया जा सकता है.
device.types.subscribe(OtaRequestorDeviceType.self)
.receive(on: DispatchQueue.main)
.compactMap { $0.traits[Matter.OtaSoftwareUpdateRequestorTrait.self] }
.removeDuplicates()
.timeout(.seconds(30), scheduler: DispatchQueue.main)
.sink { [weak self] completion in
guard let self else { return }
Logger.debug("OTA trait subscription completed unexpectedly: \(completion).")
if case .otaDownload = self.step {
Logger.debug("Advancing to settings step due to OTA trait subscription completion")
self.step = .settings
}
} receiveValue: { [weak self] otaTrait in
Logger.debug(
"OTA update is in progress, state: \(otaTrait.attributes.updateState), progress: \(otaTrait.attributes.updateStateProgress ?? 0)"
)
self.step = .otaDownload(
state: otaTrait.attributes.updateState ?? .querying,
progress: Double(otaTrait.attributes.updateStateProgress ?? 0) / 100.0)
}
}
.store(in: &cancellables)
डिवाइस के ट्रेट की सदस्यता लेना: यह डिवाइस के ट्रेट की सदस्यता लेता है. खास तौर पर, ओटीए अपडेट की जानकारी पाने के लिए,
OtaSoftwareUpdateRequestorTraitको ढूंढता है.टाइम आउट सेट करना: यह 30 सेकंड का टाइम आउट सेट करता है. अगर इस दौरान, ट्रेट से कोई अपडेट नहीं मिलता है, तो सदस्यता खत्म हो जाती है.
ओटीए स्टेटस अपडेट (
receiveValue) को मैनेज करना: जबOtaSoftwareUpdateRequestorTraitकोई नया स्टेटस देता है, तो यह ब्लॉक एक्ज़ीक्यूट होता है. यह मौजूदा स्टेटस और ओटीए अपडेट की प्रोग्रेस को लॉग करता है. इसके बाद, यह इस नई जानकारी को दिखाने के लिए, ऐप्लिकेशन के इंटरनल स्टेटस (step) को अपडेट करता है.अपडेट पूरा होने की प्रोसेस (
sink) को मैनेज करना: सदस्यता खत्म होने पर, यह ब्लॉक एक्ज़ीक्यूट होता है और अपडेट पूरा होने की प्रोसेस को लॉग करता है. अगर प्रोसेस डाउनलोडिंग की स्थिति में थी, तो ऐप्लिकेशन का स्टेटस अगले चरण (.settings) पर पहुंच जाता है.सदस्यता के लाइफ़साइकल को मैनेज करना:
.store(in: &cancellables)लाइन से यह पक्का होता है कि सदस्यता को सही तरीके से मैनेज किया जाए और उसे रद्द किया जाए. ऐसा तब किया जाता है, जब उसे मैनेज करने वाला ऑब्जेक्ट डीएलोकेट हो जाता है.
ज़्यादा जानकारी के लिए, OtaSoftwareUpdateRequestorTrait ट्रेट का रेफ़रंस देखें.
ConfigurationDoneTrait
कैमरा चालू करने के लिए, इस ट्रेट की ज़रूरत नहीं होती. हालांकि, इससे ऐप्लिकेशन को यह ट्रैक करने में मदद मिलती है कि डिवाइस पूरी तरह से सेट अप हो गया है और इस्तेमाल किया जा सकता है. इसके लिए, AppConfigurationComplete एट्रिब्यूट को true पर सेट किया जाता है.
इस ट्रेट का इस्तेमाल, OtaSoftwareUpdateRequestorTrait के बाद किया जाना चाहिए.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}