Поток MultipeerConnectivity не получает [Swift] - PullRequest
0 голосов
/ 26 сентября 2018

, поэтому я работаю с 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]

Помощь приветствуется ^ - ^

...