Wait() public méthode

public Wait ( ) : void
Résultat void
        public int Send(byte[] buffer, int offset, int size, SocketFlags socketFlags, out SocketError error)
        {
            int sent = 0;

            while (true)
            {
                sent += m_socket.Send(buffer, offset + sent, size - sent, socketFlags, out error);

                if (error == SocketError.WouldBlock)
                {
                    error = SocketError.Success;
                }

                if (error != SocketError.Success)
                {
                    return(sent);
                }

                if (sent < size)
                {
                    m_writeCS.Enter();
                    m_writingThread = MicroThread.CurrentThread;
                    m_writingThread.Wait();
                    m_writingThread = null;
                    m_writeCS.Exit();
                }
                else
                {
                    return(sent);
                }
            }
        }
Exemple #2
0
        public void Decrease()
        {
            Console.WriteLine("Semaphore:Decrease {0} -> {1}", m_value, m_value - 1);

            m_value--;

            if (m_value < 0)
            {
                MicroThread t = MicroThread.CurrentThread;
                m_suspendedThreads.Enqueue(t);
                t.Wait();
            }
        }
        public T Receive()
        {
            MicroThread t = MicroThread.CurrentThread;

            if (m_senders.Count == 0)
            {
                m_receivers.Enqueue(t);
                t.Wait();
            }
            else
            {
                MicroThread sender = m_senders.Dequeue();
                sender.WakeUp();
            }

            return(m_dataQueue.Dequeue());
        }
        public MicroSocket Accept()
        {
            Print("Begin accepting");

            m_readCS.Enter();
            m_readingThread = MicroThread.CurrentThread;
            m_readingThread.Wait();
            m_readingThread = null;
            m_readCS.Exit();

            Print("Accept returned");

            Socket      newSocket = m_socket.Accept();
            MicroSocket s         = new MicroSocket(newSocket);

            return(s);
        }
        public void Send(T data)
        {
            MicroThread t = MicroThread.CurrentThread;

            m_dataQueue.Enqueue(data);

            if (m_receivers.Count == 0)
            {
                m_senders.Enqueue(t);
                t.Wait();
            }
            else
            {
                MicroThread receiver = m_receivers.Dequeue();
                receiver.WakeUp();
                t.Yield();
            }
        }
        public int Receive(byte[] buffer, int offset, int size, SocketFlags socketFlags, out SocketError error)
        {
            while (true)
            {
                int received = m_socket.Receive(buffer, offset, size, socketFlags, out error);

                if (error == SocketError.Success)
                {
                    return(received);
                }

                if (error != SocketError.WouldBlock)
                {
                    return(received);
                }

                m_readCS.Enter();
                m_readingThread = MicroThread.CurrentThread;
                m_readingThread.Wait();
                m_readingThread = null;
                m_readCS.Exit();
            }
        }
        public bool Connect(IPAddress address, int port)
        {
            Print("Begin connecting to {0}:{1}", address, port);

            try
            {
                m_socket.Connect(new IPEndPoint(address, port));
            }
            catch (SocketException)
            {
                // ignore blocking connect exception. shouldn't there be some other way to do this...
                //Console.WriteLine("exc cont");
            }

            m_writeCS.Enter();
            m_writingThread = MicroThread.CurrentThread;
            m_writingThread.Wait();
            m_writingThread = null;
            m_writeCS.Exit();

            //Console.WriteLine("STATE {0}", m_waitState);

            if ((m_selectStatus & MicroSocketSelectStatus.Error) != 0)
            {
                Console.WriteLine("Connect failed");
                return(false);
            }
            else if ((m_selectStatus & MicroSocketSelectStatus.Write) != 0)
            {
                //Console.WriteLine("Connected!");
                return(true);
            }
            else
            {
                throw new Exception("illegal state");
            }
        }
Exemple #8
0
        public MicroSocket Accept()
        {
            Print("Begin accepting");

            m_readCS.Enter();
            m_readingThread = MicroThread.CurrentThread;
            m_readingThread.Wait();
            m_readingThread = null;
            m_readCS.Exit();

            Print("Accept returned");

            Socket newSocket = m_socket.Accept();
            MicroSocket s = new MicroSocket(newSocket);
            return s;
        }
Exemple #9
0
        public int Send(byte[] buffer, int offset, int size, SocketFlags socketFlags, out SocketError error)
        {
            int sent = 0;

            while (true)
            {
                sent += m_socket.Send(buffer, offset + sent, size - sent, socketFlags, out error);

                if (error == SocketError.WouldBlock)
                {
                    error = SocketError.Success;
                }

                if (error != SocketError.Success)
                {
                    return sent;
                }

                if (sent < size)
                {
                    m_writeCS.Enter();
                    m_writingThread = MicroThread.CurrentThread;
                    m_writingThread.Wait();
                    m_writingThread = null;
                    m_writeCS.Exit();
                }
                else
                {
                    return sent;
                }
            }
        }
Exemple #10
0
        public int Receive(byte[] buffer, int offset, int size, SocketFlags socketFlags, out SocketError error)
        {
            while (true)
            {
                int received = m_socket.Receive(buffer, offset, size, socketFlags, out error);

                if (error == SocketError.Success)
                {
                    return received;
                }

                if (error != SocketError.WouldBlock)
                {
                    return received;
                }

                m_readCS.Enter();
                m_readingThread = MicroThread.CurrentThread;
                m_readingThread.Wait();
                m_readingThread = null;
                m_readCS.Exit();
            }
        }
Exemple #11
0
        public bool Connect(IPAddress address, int port)
        {
            Print("Begin connecting to {0}:{1}", address, port);

            try
            {
                m_socket.Connect(new IPEndPoint(address, port));
            }
            catch (SocketException)
            {
                // ignore blocking connect exception. shouldn't there be some other way to do this...
                //Console.WriteLine("exc cont");
            }

            m_writeCS.Enter();
            m_writingThread = MicroThread.CurrentThread;
            m_writingThread.Wait();
            m_writingThread = null;
            m_writeCS.Exit();

            //Console.WriteLine("STATE {0}", m_waitState);

            if ((m_selectStatus & MicroSocketSelectStatus.Error) != 0)
            {
                Console.WriteLine("Connect failed");
                return false;
            }
            else if ((m_selectStatus & MicroSocketSelectStatus.Write) != 0)
            {
                //Console.WriteLine("Connected!");
                return true;
            }
            else
            {
                throw new Exception("illegal state");
            }
        }