Esempio n. 1
0
        public void RemoveClient(GNIClientInformation client)
        {
            OnClientDisconnected(client);

            try
            {
                client.tcpClient.Close();
            }
            catch (Exception) { }

            clients.Remove(client);
        }
Esempio n. 2
0
        //--------------Listening------------
        //Listens for incoming connections
        private void Listen(object o)
        {
            if (!stopListening)
            {
                TcpListener listener = new TcpListener(System.Net.IPAddress.Any, port);
                listener.Start();

                while (!stopListening)
                {
                    //Add any incoming cients to the list
                    if (listener.Pending())
                    {
                        bool succesful = false;
                        try
                        {
                            while (clientLock)
                            {
                                Thread.Sleep(50);
                            }
                            clientLock = true;
                            TcpClient            tcpClient = listener.AcceptTcpClient();
                            GNIClientInformation client    = new GNIClientInformation(currentID, tcpClient);
                            clients.Add(client);
                            succesful = true;
                            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { OnClientConnected(client); }));
                            clientLock = false;
                        }
                        catch (Exception) { clientLock = false; }
                        if (succesful)
                        {
                            currentID++;
                        }
                    }

                    Thread.Sleep(listenInterval);
                }

                listener.Stop();
            }
        }
Esempio n. 3
0
File: Server.cs Progetto: VDZx/GNI
 public override void OnClientDisconnected(GNIClientInformation client)
 {
     SMessage(client.name + " has left.");
 }
Esempio n. 4
0
File: Server.cs Progetto: VDZx/GNI
 public override void OnClientConnected(GNIClientInformation client)
 {
     SMessage(client.name + " has joined. " + clients.Count + " people online.");
 }
Esempio n. 5
0
 public virtual void OnClientDisconnected(GNIClientInformation client)
 {
 }
Esempio n. 6
0
        //--------------Listening------------
        //Listens for incoming connections
        private void Listen(object o)
        {
            if (!stopListening)
            {
                TcpListener listener = new TcpListener(System.Net.IPAddress.Any, port);
                listener.Start();

                while (!stopListening)
                {
                    //Add any incoming cients to the list
                    if (listener.Pending())
                    {
                        bool succesful = false;
                        try
                        {
                            while (clientLock) { Thread.Sleep(50); }
                            clientLock = true;
                            TcpClient tcpClient = listener.AcceptTcpClient();
                            GNIClientInformation client = new GNIClientInformation(currentID, tcpClient);
                            clients.Add(client);
                            succesful = true;
                            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate { OnClientConnected(client); }));
                            clientLock = false;
                        }
                        catch (Exception) { clientLock = false; }
                        if (succesful)
                        {
                            currentID++;
                        }
                    }

                    Thread.Sleep(listenInterval);
                }

                listener.Stop();
            }
        }
Esempio n. 7
0
 public void SendSignal(GNIClientInformation recipient, GNIData data)
 {
     SendSignal(recipient.tcpClient, data);
 }
Esempio n. 8
0
        public void RemoveClient(GNIClientInformation client)
        {
            OnClientDisconnected(client);

            try
            {
                client.tcpClient.Close();
            }
            catch (Exception) { }

            clients.Remove(client);
        }
Esempio n. 9
0
 public virtual void OnClientDisconnected(GNIClientInformation client)
 {
 }
Esempio n. 10
0
 public void SendSignal(GNIClientInformation recipient, GNIData data)
 {
     SendSignal(recipient.tcpClient, data);
 }
Esempio n. 11
0
        //------------Update-----------
        public override void Update()
        {
            while (clientLock)
            {
                Thread.Sleep(50);
            }
            //clientLock = true;

            try
            {
                //For every client
                for (int i = 0; i < clients.Count; i++)
                {
                    GNIClientInformation client = clients[i];

                    //Check if connection still exists
                    if (client.tcpClient == null)
                    {
                        RemoveClient(client);
                    }
                    //And is still connected
                    if (!client.tcpClient.Connected)
                    {
                        RemoveClient(client);
                    }

                    //If it's not currently loading any data...
                    if (client.dataBeingTransferred.started == false)
                    {
                        //Start loading if data length is available
                        if (client.tcpClient.Available > 3)
                        {
                            byte[] buffer = new byte[4];
                            client.tcpClient.GetStream().Read(buffer, 0, 4);
                            int dataLength = BitConverter.ToInt32(buffer, 0);
                            client.dataBeingTransferred = new GNIPendingData(dataLength);
                        }
                    }

                    //Now, if it's already started loading data...
                    if (client.dataBeingTransferred.started)
                    {
                        int bytesToRead = client.tcpClient.Available;
                        if (bytesToRead > 0)
                        {
                            if (bytesToRead > client.dataBeingTransferred.datalength - client.dataBeingTransferred.dataread)
                            {
                                bytesToRead = client.dataBeingTransferred.datalength - client.dataBeingTransferred.dataread;
                            }
                            byte[] buffer = new byte[bytesToRead];
                            client.tcpClient.GetStream().Read(buffer, 0, bytesToRead);
                            client.dataBeingTransferred.AddData(buffer);

                            if (client.dataBeingTransferred.datalength == client.dataBeingTransferred.dataread)
                            {
                                HandleSignal(client.dataBeingTransferred.data, clients[i].clientID);
                                client.dataBeingTransferred = new GNIPendingData(false);
                            }
                        }
                    }

                    clients[i] = client;
                }
            }
            catch (Exception ex) { }

            //clientLock = false;
        }
Esempio n. 12
0
File: Program.cs Progetto: VDZx/GNI
 public override void OnClientConnected(GNIClientInformation client)
 {
     Console.WriteLine("Client connected: " + client.clientID);
 }