123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- import Foundation
- #if !os(watchOS)
- @available(iOS 9.0, OSX 10.11, tvOS 9.0, *)
- extension Manager {
- private enum Streamable {
- case Stream(String, Int)
- case NetService(NSNetService)
- }
- private func stream(streamable: Streamable) -> Request {
- var streamTask: NSURLSessionStreamTask!
- switch streamable {
- case .Stream(let hostName, let port):
- dispatch_sync(queue) {
- streamTask = self.session.streamTaskWithHostName(hostName, port: port)
- }
- case .NetService(let netService):
- dispatch_sync(queue) {
- streamTask = self.session.streamTaskWithNetService(netService)
- }
- }
- let request = Request(session: session, task: streamTask)
- delegate[request.delegate.task] = request.delegate
- if startRequestsImmediately {
- request.resume()
- }
- return request
- }
-
- public func stream(hostName hostName: String, port: Int) -> Request {
- return stream(.Stream(hostName, port))
- }
-
- public func stream(netService netService: NSNetService) -> Request {
- return stream(.NetService(netService))
- }
- }
- @available(iOS 9.0, OSX 10.11, tvOS 9.0, *)
- extension Manager.SessionDelegate: NSURLSessionStreamDelegate {
-
-
- public var streamTaskReadClosed: ((NSURLSession, NSURLSessionStreamTask) -> Void)? {
- get {
- return _streamTaskReadClosed as? (NSURLSession, NSURLSessionStreamTask) -> Void
- }
- set {
- _streamTaskReadClosed = newValue
- }
- }
-
- public var streamTaskWriteClosed: ((NSURLSession, NSURLSessionStreamTask) -> Void)? {
- get {
- return _streamTaskWriteClosed as? (NSURLSession, NSURLSessionStreamTask) -> Void
- }
- set {
- _streamTaskWriteClosed = newValue
- }
- }
-
- public var streamTaskBetterRouteDiscovered: ((NSURLSession, NSURLSessionStreamTask) -> Void)? {
- get {
- return _streamTaskBetterRouteDiscovered as? (NSURLSession, NSURLSessionStreamTask) -> Void
- }
- set {
- _streamTaskBetterRouteDiscovered = newValue
- }
- }
-
- public var streamTaskDidBecomeInputStream: ((NSURLSession, NSURLSessionStreamTask, NSInputStream, NSOutputStream) -> Void)? {
- get {
- return _streamTaskDidBecomeInputStream as? (NSURLSession, NSURLSessionStreamTask, NSInputStream, NSOutputStream) -> Void
- }
- set {
- _streamTaskDidBecomeInputStream = newValue
- }
- }
-
-
- public func URLSession(session: NSURLSession, readClosedForStreamTask streamTask: NSURLSessionStreamTask) {
- streamTaskReadClosed?(session, streamTask)
- }
-
- public func URLSession(session: NSURLSession, writeClosedForStreamTask streamTask: NSURLSessionStreamTask) {
- streamTaskWriteClosed?(session, streamTask)
- }
-
- public func URLSession(session: NSURLSession, betterRouteDiscoveredForStreamTask streamTask: NSURLSessionStreamTask) {
- streamTaskBetterRouteDiscovered?(session, streamTask)
- }
-
- public func URLSession(
- session: NSURLSession,
- streamTask: NSURLSessionStreamTask,
- didBecomeInputStream inputStream: NSInputStream,
- outputStream: NSOutputStream)
- {
- streamTaskDidBecomeInputStream?(session, streamTask, inputStream, outputStream)
- }
- }
- #endif
|