コード例 #1
0
        public void HandleStreamEvent(NSStream stream, NSStreamEvent streamEvent)
        {
            switch (streamEvent)
            {
            case NSStreamEvent.ErrorOccurred:
                _streamSubject.OnError(new StreamException("Failed to read stream"));
                break;

            case NSStreamEvent.EndEncountered:
                _streamSubject.OnNext(new StreamData(null, -1));
                _streamSubject.OnCompleted();
                break;

            case NSStreamEvent.OpenCompleted:
                IsOpen = true;
                break;

            case NSStreamEvent.HasBytesAvailable:
                var buffer = new byte[MAX_READ_BYTES_SIZE];
                var len    = (stream as NSInputStream).Read(buffer, (nuint)MAX_READ_BYTES_SIZE);
                if (len > 0)
                {
                    _streamSubject.OnNext(new StreamData(buffer, (int)len));
                }
                break;
            }
        }
コード例 #2
0
        public void ConnectToPeer()
        {
            NSInputStream  read;
            NSOutputStream write;

            int port;
            var listener = FindPort(out port);

            if (listener == null)
            {
                Assert.Inconclusive("Not possible to bind a port");
                return;
            }

            var listenThread = new Thread(new ParameterizedThreadStart(DebugListener));

            listenThread.Start(listener);
            NSStream.CreatePairWithPeerSocketSignature(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp, new IPEndPoint(IPAddress.Loopback, port), out read, out write);
            read.Open();
            write.Open();
            var send = new byte[] { 1, 2, 3, 4, 5 };

            Assert.AreEqual(5, write.Write(send));
            var result = new byte [5];

            Assert.AreEqual(5, read.Read(result, 5));
            for (int i = 0; i < 5; i++)
            {
                Assert.AreEqual(send [i] * 10, result [i]);
            }
            listenThread.Join();
            listener.Stop();
            read.Close();
            write.Close();
        }
コード例 #3
0
        public override void HandleEvent(NSStream theStream, NSStreamEvent streamEvent)
        {
            switch (streamEvent)
            {
            case NSStreamEvent.None:
                Console.WriteLine("StreamEventNone");
                break;

            case NSStreamEvent.HasBytesAvailable:
                Console.WriteLine("StreamEventHasBytesAvailable");
                ReadData();
                break;

            case NSStreamEvent.HasSpaceAvailable:
                Console.WriteLine("StreamEventHasSpaceAvailable");
                // Do write operations to the device here
                break;

            case NSStreamEvent.OpenCompleted:
                Console.WriteLine("StreamEventOpenCompleted");
                break;

            case NSStreamEvent.ErrorOccurred:
                Console.WriteLine("StreamEventErroOccurred");
                break;

            case NSStreamEvent.EndEncountered:
                Console.WriteLine("StreamEventEndEncountered");
                break;

            default:
                Console.WriteLine("Stream present but no event");
                break;
            }
        }
コード例 #4
0
        public override void HandleEvent(NSStream theStream, NSStreamEvent streamEvent)
        {
            Console.WriteLine("Handle Event");
            var time = DateTime.Now;

            switch (streamEvent)
            {
            case NSStreamEvent.OpenCompleted:
                Console.WriteLine("Open completed {0:T}", time);
                break;

            case NSStreamEvent.HasBytesAvailable:
                Console.WriteLine("Has Bytes Available {0:T}", time);
                this.readReceivedDataStream();

                break;

            case NSStreamEvent.HasSpaceAvailable:
                Console.WriteLine("Has Space Available {0:T}", time);
                break;

            case NSStreamEvent.ErrorOccurred:
                Console.WriteLine("Error Occured {0:T}", time);
                break;

            case NSStreamEvent.EndEncountered:
                Console.WriteLine("End Encountered");
                break;
            }
        }
コード例 #5
0
 public override void HandleEvent(NSStream theStream, NSStreamEvent streamEvent)
 {
     if (theStream == _stream._outputStream && streamEvent == NSStreamEvent.HasSpaceAvailable)
     {
         _stream._streamReady = true;
         _stream.Flush();
     }
 }
コード例 #6
0
        public void HandleStreamEvent(NSStream stream, NSStreamEvent streamEvent)
        {
            switch (streamEvent)
            {
            case NSStreamEvent.ErrorOccurred:
                break;

            case NSStreamEvent.EndEncountered:
                break;

            case NSStreamEvent.OpenCompleted:
                IsOpen = true;
                break;

            case NSStreamEvent.HasSpaceAvailable:
                break;
            }
        }
コード例 #7
0
        public void BoundPairTest()
        {
            NSInputStream  read;
            NSOutputStream write;

            NSStream.CreateBoundPair(out read, out write, 1024);
            read.Open();
            write.Open();

            var send = Encoding.ASCII.GetBytes("hello, world");
            var n    = send.Length;

            Assert.AreEqual(n, write.Write(send));
            var result = new byte [n + 10];

            Assert.AreEqual(n, read.Read(result, (uint)n));
            for (int i = 0; i < n; i++)
            {
                Assert.AreEqual(send [i], result [i], "Item " + i);
            }
        }