@nitra/zebra 7.1.2 → 7.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -87,6 +87,10 @@ import ExternalAccessory
|
|
|
87
87
|
private weak var owner: Zebra?
|
|
88
88
|
private var startTime = Date()
|
|
89
89
|
private let session: EASession
|
|
90
|
+
/// Чи отримано openCompleted; перший запис робимо тільки після нього + невеликої затримки (інакше при першому визові дані можуть не дійти до пристрою)
|
|
91
|
+
private var openCompleted = false
|
|
92
|
+
/// Затримка після відкриття потоку перед першим записом (External Accessory потребує часу на встановлення з'єднання)
|
|
93
|
+
private static let delayAfterOpen: TimeInterval = 0.35
|
|
90
94
|
|
|
91
95
|
init(owner: Zebra, session: EASession, output: OutputStream, data: [UInt8], address: String, timeout: TimeInterval = 5.0, completion: @escaping (Result<PrintResult, ZebraError>) -> Void) {
|
|
92
96
|
self.owner = owner
|
|
@@ -166,9 +170,20 @@ import ExternalAccessory
|
|
|
166
170
|
}
|
|
167
171
|
switch eventCode {
|
|
168
172
|
case .openCompleted:
|
|
169
|
-
// Потік
|
|
173
|
+
// Потік відкрито; даємо час EA встановити з'єднання з пристроєм перед першим записом
|
|
170
174
|
owner?.log("Stream open completed")
|
|
175
|
+
openCompleted = true
|
|
171
176
|
case .hasSpaceAvailable:
|
|
177
|
+
// Не пишемо до отримання openCompleted (порядок подій не гарантований)
|
|
178
|
+
guard openCompleted else { return }
|
|
179
|
+
// Після першого openCompleted чекаємо невелику затримку перед першим записом (при першому визові printZpl з'єднання може ще не бути готове)
|
|
180
|
+
if totalWritten == 0 {
|
|
181
|
+
let deadline = Date().addingTimeInterval(StreamWriter.delayAfterOpen)
|
|
182
|
+
while Date() < deadline {
|
|
183
|
+
RunLoop.current.run(mode: .default, before: Date().addingTimeInterval(0.05))
|
|
184
|
+
}
|
|
185
|
+
owner?.log("Delay after open done, starting write")
|
|
186
|
+
}
|
|
172
187
|
// Є простір для запису, пишемо дані порціями
|
|
173
188
|
if totalWritten >= data.count {
|
|
174
189
|
// Усі байти записані — даємо час на флаш буфера перед закриттям (iOS часто не встигає відправити на пристрій)
|