示例#1
0
 void OnEvent(PollEvent events)
 {
     if (Event != null)
     {
         Event(events);
     }
 }
示例#2
0
        /// <summary>
        /// Polls a File Descriptor for the passed in flags.
        /// </summary>
        /// <param name="fd">The descriptor to poll</param>
        /// <param name="events">The events to poll for</param>
        /// <param name="timeout">The amount of time to wait; -1 for infinite, 0 for immediate return, and a positive number is the number of milliseconds</param>
        /// <param name="triggered">The events that were returned by the poll call. May be PollEvents.POLLNONE in the case of a timeout.</param>
        /// <returns>An error or Error.SUCCESS.</returns>
        internal static unsafe Error Poll(SafeHandle fd, PollEvents events, int timeout, out PollEvents triggered)
        {
            bool gotRef = false;

            try
            {
                fd.DangerousAddRef(ref gotRef);

                var pollEvent = new PollEvent
                {
                    FileDescriptor = fd.DangerousGetHandle().ToInt32(),
                    Events         = events,
                };

                uint  unused;
                Error err = Poll(&pollEvent, 1, timeout, &unused);
                triggered = pollEvent.TriggeredEvents;
                return(err);
            }
            finally
            {
                if (gotRef)
                {
                    fd.DangerousRelease();
                }
            }
        }
示例#3
0
 private static void OnPoll(Poll poll, Message msg = null, bool isUpdate = false, bool isAnswer = false)
 {
     PollEvent?.Invoke(new PollEventArgs()
     {
         poll = poll, msg = msg, isUpdate = isUpdate, isAnswer = isAnswer
     });
 }
示例#4
0
        /// <summary>
        /// Polls a File Descriptor for the passed in flags.
        /// </summary>
        /// <param name="fd">The descriptor to poll</param>
        /// <param name="events">The events to poll for</param>
        /// <param name="timeout">The amount of time to wait; -1 for infinite, 0 for immediate return, and a positive number is the number of milliseconds</param>
        /// <param name="triggered">The events that were returned by the poll call. May be PollEvents.POLLNONE in the case of a timeout.</param>
        /// <returns>An error or Error.SUCCESS.</returns>
        internal static unsafe Error Poll(SafeFileHandle fd, PollEvents events, int timeout, out PollEvents triggered)
        {
            bool gotRef = false;
            try
            {
                fd.DangerousAddRef(ref gotRef);

                var pollEvent = new PollEvent
                {
                    FileDescriptor = fd.DangerousGetHandle().ToInt32(),
                    Events = events,
                };

                uint unused;
                Error err = Poll(&pollEvent, 1, timeout, &unused);
                triggered = pollEvent.TriggeredEvents;
                return err;
            }
            finally
            {
                if (gotRef)
                {
                    fd.DangerousRelease();
                }
            }
        }
示例#5
0
        public void Start(PollEvent events, Action<PollEvent> callback)
        {
            Event += callback;

            int r = uv_poll_start(handle, (int)events, poll_cb);
            Ensure.Success(r, Loop);
        }
示例#6
0
 protected void OnChanged(PollEvent @event)
 {
     if (Changed != null)
     {
         Changed(@event);
     }
 }
示例#7
0
        public void Start(PollEvent events, Action <PollEvent> callback)
        {
            Event += callback;

            int r = uv_poll_start(handle, (int)events, poll_cb);

            Ensure.Success(r, Loop);
        }
示例#8
0
        //=============================

        public void Run(PollEvent poll_event)
        {
            if (poll_event != null)
            {
                poller = new ProgressPoller(this);
                poller.Start(poll_event);
            }
            //
            cancelPending = false;
            is_active     = true;
            thread        = new Thread(thread_process);
            thread.Start();
        }
示例#9
0
 internal static unsafe extern Error Poll(PollEvent* pollEvents, uint eventCount, int timeout, uint* triggered);
示例#10
0
		void OnEvent(PollEvent events)
		{
			if (Event != null) {
				Event(events);
			}
		}
示例#11
0
		public void Start(PollEvent events)
		{
			Invoke(uv_poll_start, (int)events, poll_cb);
		}
示例#12
0
 protected void OnChanged(PollEvent @event)
 {
     if (Changed != null) {
         Changed(@event);
     }
 }
示例#13
0
文件: Poll.cs 项目: txdv/LibuvSharp
 public void Start(PollEvent events)
 {
     Invoke(uv_poll_start, (int)events, poll_cb);
 }
示例#14
0
 public static short ToShort(this PollEvent value) => (short)value;
示例#15
0
        public void Start(PollEvent events)
        {
            int r = uv_poll_start(NativeHandle, (int)events, poll_cb);

            Ensure.Success(r);
        }
示例#16
0
 public void Start(PollEvent events)
 {
     int r = uv_poll_start(NativeHandle, (int)events, poll_cb);
     Ensure.Success(r, Loop);
 }
        public static unsafe void Poll(IntPtr[] reads, IntPtr[] writes, int timeout)
        {
            if (timeout == 0)
            {
                return;
            }

            PollEvent[] p;
            int         num, n, num_read_total, num_write_total;

            num_read_total = num_write_total = 0;
            foreach (IntPtr fd in reads)
            {
                if ((int)fd != -1)
                {
                    num_read_total++;
                }
            }
            foreach (IntPtr fd in writes)
            {
                if ((int)fd != -1)
                {
                    num_write_total++;
                }
            }

            num = num_read_total + num_write_total;

            p = new PollEvent[num];

            n = 0;

            foreach (IntPtr fd in reads)
            {
                if ((int)fd != -1)
                {
                    p[n].FileDescriptor = (int)fd;
                    p[n].Events         = PollEvents.POLLIN | PollEvents.POLLPRI | PollEvents.POLLERR | PollEvents.POLLHUP;
                    n++;
                }
            }

            foreach (IntPtr fd in writes)
            {
                if ((int)fd != -1)
                {
                    p[n].FileDescriptor = (int)fd;
                    p[n].Events         = PollEvents.POLLIN | PollEvents.POLLPRI | PollEvents.POLLERR | PollEvents.POLLHUP | PollEvents.POLLOUT;
                    n++;
                }
            }

            if (num == 0)
            {
                ThreadObj.Sleep(timeout);
            }
            else
            {
                //Dbg.WriteLine("Poll Begin.");

                int ret = Poll(p, timeout);

                //Dbg.WriteLine($"Poll end: ret = {ret}, reads = {reads.Length}, writes = {writes.Length}, pfds = {p.Length}");

                //for (int i = 0; i < reads.Length; i++) Dbg.WriteLine($"reads[{i}] = {reads[i]}");
                //for (int i = 0; i < writes.Length; i++) Dbg.WriteLine($"writes[{i}] = {writes[i]}");
            }
        }
示例#18
0
 extern public static int uv_pipe_chmod(IntPtr handle, PollEvent flags);
示例#19
0
 private void OnEvent(PollEvent events)
 {
     Event?.Invoke(events);
 }