Пример #1
0
 // Constructor
 public RemoteCommand(RemoteClient client)
 {
     // Initialize
     this.client = client;
     headercomplete = false;
     source = "";
     target = "";
     command = "";
     datalength = 0;
     data = new byte[0];
 }
Пример #2
0
        // Callback to accept a new connection
        private void ProcessingThread()
        {
            while (true)
            {
                // Accept incoming connections
                if (listener.Pending())
                {
                    Socket       s  = listener.AcceptSocket();
                    RemoteClient rc = new RemoteClient(s);
                    clients.Add(rc);
                    General.WriteLogLine("Remote client " + rc + " connected.");
                }

                // Process clients
                for (int i = clients.Count - 1; i >= 0; i--)
                {
                    RemoteClient rc = clients[i];

                    try
                    {
                        // Process the client. This will call ProcessCommand for any incoming commands.
                        if (!rc.Process(this))
                        {
                            // Connection lost.
                            DisconnectClient(rc, null);
                        }
                    }
                    catch (InvalidDataException e)
                    {
                        // Invalid data received
                        DisconnectClient(rc, "Client sent invalid protocol data; " + e.Message);
                    }
                    catch (SocketException e)
                    {
                        switch (e.SocketErrorCode)
                        {
                        // This exception simply means there is no data to read.
                        // Check if the client is timing out (then disconnect).
                        case SocketError.WouldBlock:
                            if (rc.CheckTimeout())
                            {
                                DisconnectClient(rc, "Connection timed out.");
                            }
                            break;

                        // Some unknown exception
                        default:
                            DisconnectClient(rc, SocketErrorDesc.GetDesc(e.SocketErrorCode) + " (" + e.SocketErrorCode + ")");
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        // This is horrible
                        DisconnectClient(rc, "Client caused " + e.GetType().Name + ": " + e.Message);
                    }
                }

                // Process services
                foreach (KeyValuePair <string, RemoteService> svc in services)
                {
                    svc.Value.UpdateNetworkThread();
                }

                // Sleep
                try { Thread.Sleep(2); }
                catch (ThreadInterruptedException e) { return; }
            }
        }
Пример #3
0
        // Callback to accept a new connection
        private void ProcessingThread()
        {
            while(true)
            {
                // Accept incoming connections
                if(listener.Pending())
                {
                    Socket s = listener.AcceptSocket();
                    RemoteClient rc = new RemoteClient(s);
                    clients.Add(rc);
                    General.WriteLogLine("Remote client " + rc + " connected.");
                }

                // Process clients
                for(int i = clients.Count - 1; i >= 0; i--)
                {
                    RemoteClient rc = clients[i];

                    try
                    {
                        // Process the client. This will call ProcessCommand for any incoming commands.
                        if(!rc.Process(this))
                        {
                            // Connection lost.
                            DisconnectClient(rc, null);
                        }
                    }
                    catch(InvalidDataException e)
                    {
                        // Invalid data received
                        DisconnectClient(rc, "Client sent invalid protocol data; " + e.Message);
                    }
                    catch(SocketException e)
                    {
                        switch(e.SocketErrorCode)
                        {
                            // This exception simply means there is no data to read.
                            // Check if the client is timing out (then disconnect).
                            case SocketError.WouldBlock:
                                if(rc.CheckTimeout())
                                    DisconnectClient(rc, "Connection timed out.");
                                break;

                            // Some unknown exception
                            default:
                                DisconnectClient(rc, SocketErrorDesc.GetDesc(e.SocketErrorCode) + " (" + e.SocketErrorCode + ")");
                                break;
                        }
                    }
                    catch(Exception e)
                    {
                        // This is horrible
                        DisconnectClient(rc, "Client caused " + e.GetType().Name + ": " + e.Message);
                    }
                }

                // Process services
                foreach(KeyValuePair<string, RemoteService> svc in services)
                    svc.Value.UpdateNetworkThread();

                // Sleep
                try { Thread.Sleep(2); }
                catch(ThreadInterruptedException e) { return; }
            }
        }
Пример #4
0
        // This disposes (disconnects) a client
        private void DisconnectClient(RemoteClient rc, string message)
        {
            if(message != null)
                General.WriteLogLine("Remote client " + rc + " disconnected with error: " + message);
            else
                General.WriteLogLine("Remote client " + rc + " disconnected.");

            rc.Dispose();
            clients.Remove(rc);
        }