Advertisement
drsgon13

TCP_Communicator

Jun 5th, 2024
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.96 KB | None | 0 0
  1. class TCP_Communicator: NSObject, StreamDelegate {
  2.     var readStream: Unmanaged<CFReadStream>?
  3.     var writeStream: Unmanaged<CFWriteStream>?
  4.     var inputStream: InputStream?
  5.     var outputStream: OutputStream?
  6.  
  7.     func connect(url: URL, port: UInt32) {
  8.         CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (url.absoluteString as CFString), port, &readStream, &writeStream);
  9. //        print("Opening streams.")
  10.         outputStream = writeStream?.takeRetainedValue()
  11.         inputStream = readStream?.takeRetainedValue()
  12.         outputStream?.delegate = self;
  13.         inputStream?.delegate = self;
  14.         outputStream?.schedule(in: RunLoop.current, forMode: RunLoop.Mode.default);
  15.         inputStream?.schedule(in: RunLoop.current, forMode: RunLoop.Mode.default);
  16.         outputStream?.open();
  17.         inputStream?.open();
  18.     }
  19.  
  20.     func disconnect(){
  21.  //       print("Closing streams.");
  22.         inputStream?.close();
  23.         outputStream?.close();
  24.         inputStream?.remove(from: RunLoop.current, forMode: RunLoop.Mode.default);
  25.         outputStream?.remove(from: RunLoop.current, forMode: RunLoop.Mode.default);
  26.         inputStream?.delegate = nil;
  27.         outputStream?.delegate = nil;
  28.         inputStream = nil;
  29.         outputStream = nil;
  30.     }
  31.  
  32.     func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
  33.  //       print("stream event \(eventCode)")
  34.         switch eventCode {
  35.         case .openCompleted:
  36.             print("Stream opened")
  37.         case .hasBytesAvailable:
  38.             if aStream == inputStream {
  39.                 var dataBuffer = Array<UInt8>(repeating: 0, count: 1024)
  40.                 var len: Int
  41.                 while (inputStream?.hasBytesAvailable)! {
  42.                     len = (inputStream?.read(&dataBuffer, maxLength: 1024))!
  43.                     if len > 0 {
  44.                         let output = String(bytes: dataBuffer, encoding: .utf8)
  45.                         if nil != output {
  46.                             print("server said: \(output ?? "")")
  47.                             Вот тут обращаюсь к функции в View чтобы перейти на другую View
  48.                             TestView().load()
  49.                         }
  50.                     }
  51.                 }
  52.             }
  53.         case .hasSpaceAvailable:
  54.             print("Stream has space available now")
  55.         case .errorOccurred:
  56.             print("\(aStream.streamError?.localizedDescription ?? "")")
  57.         case .endEncountered:
  58.             aStream.close()
  59.             aStream.remove(from: RunLoop.current, forMode: RunLoop.Mode.default)
  60.             print("close stream")
  61.         default:
  62.             print("Unknown event")
  63.         }
  64.     }
  65.  
  66.     func send(message: String){
  67.         print("message = " + message)
  68.         let response = "msg:\(message)"
  69.         let buff = [UInt8](message.utf8)
  70.         if let _ = response.data(using: .utf8) {
  71.             outputStream?.write(buff, maxLength: buff.count)
  72.         }
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement