Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como escrever uma string em outputstream

Gostaria de escrever uma string em um outPutStream de uma conexão bluetooth que estabeleci usando EAAccessory, porem esse outputstream sempre "hasSpaceAvailable" false. Creio que o erro esteja na forma com que estou tentando escrever a mensagem no outpustream.

Codigo atual:

var session =  EASession(accessory: device, forProtocol: device.protocolStrings[0])
            var outputStream = session.outputStream
            print(write("teste", out: outputStream!))
func write(_ string: String, encoding: String.Encoding = String.Encoding.utf8, allowLossyConversion: Bool = true, out:OutputStream) -> Int {
        print(out.hasSpaceAvailable)
        if let data = string.data(using: encoding, allowLossyConversion: allowLossyConversion) {
            var bytesRemaining = data.count
            var totalBytesWritten = 0

            while bytesRemaining > 0 {
                let bytesWritten = data.withUnsafeBytes {
                    out.write(
                        $0.advanced(by: totalBytesWritten),
                        maxLength: bytesRemaining
                    )
                }
                if bytesWritten < 0 {
                    // "Can not OutputStream.write(): \(self.streamError?.localizedDescription)"
                    return -1
                } else if bytesWritten == 0 {
                    // "OutputStream.write() returned 0"
                    return totalBytesWritten
                }

                bytesRemaining -= bytesWritten
                totalBytesWritten += bytesWritten
            }

            return totalBytesWritten
        }

        return -1
    }

Desde ja, obrigado pela ajuda.

1 resposta
solução!

Consegui solucionar usando essa função que criei


    fileprivate func __writeData(stream:OutputStream) {
        lol =  false
        while (stream.hasSpaceAvailable) && ((_writeData?.length)! > 0) {

            let bytes = (_writeData?.bytes)!


            let bytesWritten = stream.write(bytes.assumingMemoryBound(to: UInt8.self), maxLength: (_writeData?.length)!)
            if bytesWritten == -1 {
                print("write error")
                break;
            } else if bytesWritten > 0 {
                _writeData?.replaceBytes(in: NSMakeRange(0, bytesWritten), withBytes: nil, length: 0)
            }
        }
    }