Skip to content

Instantly share code, notes, and snippets.

@RollingGoron
Created April 8, 2017 23:07
Show Gist options
  • Save RollingGoron/edec48a3238457168b26b4bc11aee721 to your computer and use it in GitHub Desktop.
Save RollingGoron/edec48a3238457168b26b4bc11aee721 to your computer and use it in GitHub Desktop.
class Connection : NSObject, StreamDelegate {
var host:String?
var port:Int?
var inputStream: InputStream?
var outputStream: OutputStream?
func connect(host: String, port: Int) {
self.host = host
self.port = port
var inputStream : InputStream?
var outputStream: OutputStream?
Stream.getStreamsToHost(withName: host, port: port, inputStream: &inputStream, outputStream: &outputStream)
if inputStream != nil && outputStream != nil {
self.inputStream = inputStream
self.outputStream = outputStream
inputStream!.delegate = self
outputStream!.delegate = self
inputStream!.schedule(in: .main, forMode: RunLoopMode.defaultRunLoopMode)
outputStream!.schedule(in: .main, forMode: RunLoopMode.defaultRunLoopMode)
// Open!
inputStream!.open()
outputStream!.open()
}
}
func stream(aStream: Stream, handleEvent eventCode: Stream.Event) {
if aStream === inputStream {
switch eventCode {
case Stream.Event.errorOccurred:
print("input: ErrorOccurred: \(String(describing: aStream.streamError?.localizedDescription))")
case Stream.Event.openCompleted:
print("input: OpenCompleted")
case Stream.Event.hasBytesAvailable:
print("input: HasBytesAvailable")
// Here you can `read()` from `inputStream`
default:
break
}
}
else if aStream === outputStream {
switch eventCode {
case Stream.Event.errorOccurred:
print("output: ErrorOccurred: \(String(describing: aStream.streamError?.localizedDescription))")
case Stream.Event.openCompleted:
print("output: OpenCompleted")
case Stream.Event.hasSpaceAvailable:
print("output: HasSpaceAvailable")
// Here you can write() to `outputStream`
default:
break
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment