Exemple #1
0
        private void waitClient(object o)
        {
            ClientBuf clientPack = (ClientBuf)o;

            NetworkStream stream = clientPack.client.GetStream();

            byte[] buff = new byte[MAX_SOCKET_BUF];
            while (true)
            {
                int nBytes = stream.Read(buff, 0, buff.Length);
                if (nBytes == 0)
                {
                    break;
                }

                clientPack.mem.Write(buff, 0, nBytes);
                if (pushPacket(ref clientPack))
                {
                    mMRE.Set();
                }
            }


            stream.Close();
            CloseClient(clientPack.id);
        }
Exemple #2
0
        private void waitClient(object o)
        {
            ClientBuf clientPack = (ClientBuf)o;

            NetworkStream stream = clientPack.client.GetStream();

            byte[] buff = new byte[MAX_SOCKET_BUF];
            while (true)
            {
                int nBytes = 0;
                try {
                    nBytes = stream.Read(buff, 0, buff.Length);
                    if (nBytes == 0)
                    {
                        break;
                    }
                }
                catch (Exception e) { LOG.echo(e.ToString()); break; }

                clientPack.buf.Push(buff, nBytes);

                QueuePack info = new QueuePack();
                info.ClientID = clientPack.id;
                info.buf      = clientPack.buf;
                info.type     = NetType.DATA;
                info.ipAddr   = clientPack.address;
                mQueue.Enqueue(info);

                mMRE.Set();
            }

            stream.Close();
            CloseClient(clientPack.id);
        }
Exemple #3
0
        private int createNewClient(TcpClient newClient)
        {
            int newID = findEmptyID();

            if (newID == -1)
            {
                return(-1);
            }

            int idx = newID;

            mClients[idx]         = new ClientBuf();
            mClients[idx].id      = newID;
            mClients[idx].client  = newClient;
            mClients[idx].address = ((IPEndPoint)newClient.Client.RemoteEndPoint).Address.ToString();
            mClients[idx].buf     = new FifoBuffer(MAX_CLIENT_BUF);

            QueuePack info = new QueuePack();

            info.ClientID = newID;
            info.buf      = null;
            info.ipAddr   = mClients[idx].address;
            info.type     = NetType.CONNECT;
            mQueue.Enqueue(info);
            mMRE.Set();

            Task.Factory.StartNew(waitClient, mClients[idx]);
            return(newID);
        }
Exemple #4
0
        private void CloseClient(int id)
        {
            int       idx        = id;
            ClientBuf clientPack = mClients[idx];

            clientPack.mem.Close();
            clientPack.client.Close();

            clientPack.id     = -1;
            clientPack.client = null;
            clientPack.mem    = null;
            mClients[idx]     = null;
        }
Exemple #5
0
        private void CloseClient(int id)
        {
            int       idx        = id;
            ClientBuf clientPack = mClients[idx];

            clientPack.mem.Close();
            clientPack.client.Close();

            if (clientPack.userName != null)
            {
                mUserNameMap.Remove(clientPack.userName);
            }

            clientPack.id       = -1;
            clientPack.client   = null;
            clientPack.mem      = null;
            clientPack.userName = null;
            mClients[idx]       = null;
        }
Exemple #6
0
        private int createNewClient(TcpClient newClient)
        {
            int newID = findEmptyID();

            if (newID == -1)
            {
                return(-1);
            }

            int idx = newID;

            mClients[idx]        = new ClientBuf();
            mClients[idx].id     = newID;
            mClients[idx].client = newClient;
            mClients[idx].mem    = new MemoryStream(MAX_CLIENT_BUF);

            Task.Factory.StartNew(waitClient, mClients[idx]);
            return(newID);
        }
Exemple #7
0
        private void CloseClient(int id)
        {
            int       idx        = id;
            ClientBuf clientPack = mClients[idx];

            QueuePack info = new QueuePack();

            info.ClientID = id;
            info.buf      = null;
            info.ipAddr   = clientPack.address;
            info.type     = NetType.DISCON;
            mQueue.Enqueue(info);
            mMRE.Set();

            clientPack.client.Close();
            clientPack.id      = -1;
            clientPack.client  = null;
            clientPack.buf     = null;
            clientPack.address = "";
            mClients[idx]      = null;
        }
Exemple #8
0
        private bool pushPacket(ref ClientBuf client)
        {
            long nRecvLen = client.mem.Length;

            byte[] buf      = client.mem.GetBuffer();
            int    headSize = ICD.HEADER.HeaderSize();

            if (nRecvLen < headSize)
            {
                return(false);
            }

            ICD.HEADER head = ICD.HEADER.GetHeaderInfo(buf);
            if (head.sof != (uint)ICD.MAGIC.SOF)
            {
                client.mem = new MemoryStream(MAX_CLIENT_BUF);
                return(false);
            }

            uint msgSize = head.size;

            if (nRecvLen < msgSize)
            {
                return(false);
            }

            QueuePack pack = new QueuePack();

            pack.ClientID = client.id;
            pack.size     = msgSize;
            pack.buf      = new byte[msgSize];
            Array.Copy(buf, pack.buf, msgSize);
            mQueue.Enqueue(pack);
            client.mem = new MemoryStream(MAX_CLIENT_BUF);

            return(true);
        }