Example #1
0
        public void Run()
        {
            try
            {
                while (client.ClientSocket.Connected)
                {
                    Thread.Sleep(100);
                    Array.Resize(ref buffer, 1024);
                    Length = Stream.Read(buffer, 0, 1024);

                    Array.Resize(ref buffer, Length);
                    if (Messages.decode(buffer, out Message))
                    {
                        onMessage(client, Message);
                    }
                    else // client sended a bad data
                    {
                        Globals.addLog("Client (" + client.Username + ") with ip " + Client.getIpByTcpClient(client.ClientSocket) + " send a bad data ", Color.Red);
                        client.Kill();
                        break;
                    }
                }
            }
            catch (ObjectDisposedException)
            {
                Globals.addLog("Client (" + client.Username + ") Disconnect... ", Color.Black);
            }
        }
Example #2
0
        /// <returns>if client is ok it returns the client else returns null</returns>
        public Client addClient(TcpClient ClientSocket)
        {
            try
            {
                byte[] buffer   = new byte[128];
                int    rcvBytes = 0;

                NetworkStream stream = ClientSocket.GetStream();

                rcvBytes = stream.Read(buffer, 0, 128); //reading the first data from client
                //64 byte for session
                //20 byte for username
                //one byte for seprator
                if (rcvBytes > 85)
                {
                    Client.Kill(ClientSocket); return(null);
                }
                Array.Resize(ref buffer, rcvBytes);

                string firstConnectionData;
                if (Messages.decode(buffer, out firstConnectionData))
                {
                    string[] temp = firstConnectionData.Split(";".ToCharArray(), 2);
                    if (temp.Length != 2 || temp[0].Length != 32 || temp[1].Length > 20)
                    {
                        Client.Kill(ClientSocket); return(null);
                    }
                    //temp[0] is session
                    //temp[1] is username

                    //now we should check session of user
                    string session = DB.getUserSession(temp[1]);
                    if (session == temp[0])
                    {
                        Client newClient    = null;
                        Client FindedClient = clients.Find(delegate(Client c) { return(c.Username == temp[1]); });
                        if (FindedClient == null)
                        {
                            //client with this username (temp[1]) not exist
                            newClient = new Client(ClientSocket, temp[1], temp[0]);
                            //now add new client to storage
                            clients.Add(newClient);
                            newClient.Start();
                            return(newClient);
                        }
                        else //client exist
                        {
                            //client exist with this username temp[1]
                            //now we should kill the last client
                            //but after it we should store his last tables that he sitted on
                            object rsvTables    = FindedClient.reservedTables;
                            object sittedTables = FindedClient.sittedTables;

                            FindedClient.Kill();
                            clients.Remove(FindedClient);
                            //renew the Finded Client
                            newClient = new Client(ClientSocket, temp[1], temp[0]);
                            newClient.reservedTables = (List <string>)rsvTables;    // set last rsv tables data here
                            newClient.sittedTables   = (List <string>)sittedTables; //set last tables data here

                            clients.Add(newClient);
                            newClient.Start();
                            return(newClient);
                        }
                    }
                }
                //else
                Client.Kill(ClientSocket);
            }

            catch (System.IO.IOException e)
            {
                ClientSocket.Close();
            }
            catch (System.ObjectDisposedException e)
            {
                Client.Kill(ClientSocket);
            }
            return(null);
        }