@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 часто не встигає відправити на пристрій)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/zebra",
3
- "version": "7.1.2",
3
+ "version": "7.1.3",
4
4
  "description": "Zebra printer",
5
5
  "keywords": [
6
6
  "capacitor",