Пример #1
0
        private void DoCheckRead(Socket s, MessageDecoder decoder)
        {
            if (s != null)
            {
                while (run && socket.Available > 0)
                {
                    int bytesRead = 0;
                    bytesRead = socket.Receive(read_buffer);
                    decoder.Decode(read_buffer, bytesRead);

                    if (run && (bytesRead < read_buffer.Length || decoder.Received.Count >= MAX_RECEIVED_BEFORE_CALLBACK))
                    {
                        ArrayList  received = decoder.Received;
                        Message [] array    = (Message [])received.ToArray(typeof(Message));
                        received.Clear();

                        if (run && messagesCallback != null)
                        {
                            messagesCallback(array, this, messagesState);
                        }
                        break;
                    }
                }
            }
        }
Пример #2
0
        private void ProcessSocket()
        {
            MessageEncoder encoder = new MessageEncoder();
            MessageDecoder decoder = new MessageDecoder();
            ArrayList      list    = new ArrayList();

            list.Add(socket);

            while (run)
            {
                ArrayList checkRead  = null;
                ArrayList checkWrite = null;
                ArrayList checkError = null;

                checkRead  = (ArrayList)list.Clone();
                checkError = (ArrayList)list.Clone();

                lock (sendQueue)
                {
                    if (sendQueue.Count > 0 || write_buffer != null)
                    {
                        checkWrite = (ArrayList)list.Clone();
                    }
                }

                Socket.Select(checkRead, checkWrite, checkError, 500000);

                if (checkRead != null && checkRead.Count > 0)
                {
                    Socket s = (Socket)checkRead[0];
                    if (s.Available == 0)
                    {
                        throw new Exception("Remote side disconnected");
                    }

                    DoCheckRead(s, decoder);
                }

                if (checkWrite != null && checkWrite.Count > 0)
                {
                    Socket s = (Socket)checkWrite[0];
                    DoCheckWrite(s, encoder);
                }
            }
        }