, поэтому я работаю с ARKit 2.0 и пытаюсь показать свою позицию игроков.
Итак, я подключаю свои устройства (проверка) и запускаю поток (ы) с собой в качестве делегата (проверка).Теперь вот моя функция делегата:
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
print("STREAM EVENT: \(eventCode) on: \(UIDevice.current.name)")
switch eventCode {
case .hasSpaceAvailable:
guard let oStr = aStream as? OutputStream,
let pos = delegate?.getPlayerPos() else { return }
let buffer = [UInt8](pos.encode())
oStr.write(buffer, maxLength: buffer.count)
case .hasBytesAvailable:
guard let iStr = aStream as? InputStream, iStr.hasBytesAvailable else { return }
var buffer = [UInt8](repeating: 0, count: 1024)
let numberBytes = iStr.read(&buffer, maxLength:1024)
let data = Data(bytes: buffer, count: numberBytes)
let newPos = SCNVector3(data: data)
print("readStream")
delegate?.updatePlayerPosition(pos: newPos)
default:
return
}
}
Мой хост вызывает этот метод и пишет в Steam.Но мой «клиент» получает ровно два StreamEvents типа 2 и 1 непосредственно друг за другом без чтения (bc .hasBytesAvailable - ложное AFAI протестировали).Нужно ли открывать поток каждый раз?Или я делаю что-то совсем не так?
(Для справки:)
(lldb) p Stream.Event(rawValue: 1)
(Stream.Event) $R2 = [.none, .openCompleted]
(lldb) p Stream.Event(rawValue: 2)
(Stream.Event) $R4 = [.none, .hasBytesAvailable]
Помощь приветствуется ^ - ^