Example #1
0
        // This processes the client.
        // Returns false when the connection was closed.
        public bool Process(RemoteManager manager)
        {
            // Send data
            int          maxsendbytes   = Math.Min(SEND_RECEIVE_SIZE, (int)sendbuffer.Length);
            int          bytessent      = socket.Send(sendbuffer.ToArray(), 0, maxsendbytes, SocketFlags.None);
            int          bytesremaining = (int)sendbuffer.Length - bytessent;
            MemoryStream oldbuffer      = sendbuffer;

            sendbuffer = new MemoryStream(Math.Max(bytesremaining, SEND_RECEIVE_SIZE));
            if (bytesremaining > 0)
            {
                sendbuffer.Write(oldbuffer.ToArray(), bytessent, bytesremaining);
            }
            oldbuffer.Dispose();

            // Receive data
            byte[] datablock     = new byte[SEND_RECEIVE_SIZE];
            int    bytesreceived = socket.Receive(datablock);

            if (bytesreceived == 0)
            {
                // When Receive returns 0 bytes the connection was closed
                return(false);
            }
            else
            {
                // Receive new data from client
                NotifyResponse();
                ReceiveData(datablock, bytesreceived);

                // Parse and process commands
                RemoteCommand c = TryParseCommand();
                while (c != null)
                {
                    manager.ProcessCommand(c);
                    c = TryParseCommand();
                }

                return(true);
            }
        }
Example #2
0
		public static void Main()
		{
			// Enable visual styles
			//Application.EnableVisualStyles();
			//Application.DoEvents();		// This must be here to work around a .NET bug
			Application.SetCompatibleTextRenderingDefault(true);
			
			// Set current thread name
			Thread.CurrentThread.Name = "Main Application";
			
			// Application is running
			appmutex = new Mutex(false, "gluon");
			apprunning = true;
			
			// Get a reference to this assembly
			thisasm = Assembly.GetExecutingAssembly();
			Version thisversion = thisasm.GetName().Version;
			
			// Find paths
			Uri localpath = new Uri(Path.GetDirectoryName(thisasm.GetName().CodeBase));
			apppath = Uri.UnescapeDataString(localpath.AbsolutePath);
			temppath = Path.GetTempPath();
			settingspath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Gluon");
			logfile = Path.Combine(settingspath, "Log.txt");
			
			// Make program settings directory if missing
			if(!Directory.Exists(settingspath)) Directory.CreateDirectory(settingspath);
			
			// Remove the previous log file and start logging
			//if(File.Exists(logfile)) File.Delete(logfile);
			General.WriteLogLine("===============================================================================================");
			General.WriteLogLine("Gluon " + thisversion.Major + "." + thisversion.Minor + "." + thisversion.Build + "." + thisversion.Revision + " startup.");
			
			#if HIGH_PRIORITY_PROCESS
				Process thisproc = Process.GetCurrentProcess();
				thisproc.PriorityClass = ProcessPriorityClass.AboveNormal;
			#endif
			Thread thisthread = Thread.CurrentThread;
			thisthread.Priority = ThreadPriority.Highest;

			// Load settings
			settings = new SettingsManager();
			
			#if DEBUG
				if(!settings.LiveEnvironment)
					accessenabled = true;
			#endif

			// Make me a clock
			clock = new Clock();
			
			// Make the power managment
			power = new PowerManager();
			
			// Load sounds
			sounds = new SoundsManager();
			sounds.LoadSounds();

			// If audio is not set to primary device, we must make it so and restart Gluon
			if(!sounds.CheckAudioOutputPrimary())
			{
				sounds.SetAudioOutputPrimary();
				
				// Restart Gluon
				ProcessStartInfo proc = new ProcessStartInfo();
				proc.ErrorDialog = false;
				proc.FileName = Path.Combine(General.AppPath, "Gluon.exe");
				proc.LoadUserProfile = true;
				//proc.UserName = "******";
				proc.UseShellExecute = false;
				proc.WorkingDirectory = General.AppPath;
				Process.Start(proc);
				return;
			}
			
			// Load color palette
			colors = new ColorPalette();
			
			// Load interface images
			images = new InterfaceImageProvider();
			
			// Build images for all color schemes
			colors.SetupDarkScheme();
			images.BuildImages();
			colors.SetupNormalScheme();
			images.BuildImages();

			// Managers
			remote = new RemoteManager();
			display = new DisplayManager();
			pcap = new PCapManager();
			obex = new ObexManager();
			agenda = new AgendaManager();
			notes = new NotesManager();
			groceries = new GroceriesManager();
			db = new DatabaseManager();

			// Load main window
			mainwindow = new MainForm();
			mainwindow.ShowTaggedPanel("loading");
			
			// See LoadingDisplaypanel::Load() for connect/setup stuff
			
			#if CATCH_EXCEPTIONS
					
				// Add exception handlers
				AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
				Application.ThreadException += Application_ThreadException;
			
			#endif
			
			bool failed;
			
			do
			{
				failed = false;
				
				#if CATCH_EXCEPTIONS
				
				try
				{
				
				#endif
					
					// Show main window
					Application.Run(mainwindow);
					
				#if CATCH_EXCEPTIONS
				
				}
				catch(Exception e)
				{
					Application.ExitThread();
					failed = true;
					mainwindow = new MainForm();
					General.ErrorMessage = e.GetType().Name + ": " + e.Message + "\r\n" + e.StackTrace;
					General.WriteLogLine(General.ErrorMessage);
					mainwindow.ShowTaggedPanel("error");
				}
				
				#endif
			}
			while(failed);

			// Clean stuff up
			sounds.SetAudioOutputPrimary();
			display.Dispose();
			obex.Dispose();
			pcap.Dispose();
			db.Dispose();
			remote.Dispose();
		}
Example #3
0
        public static void Main()
        {
            // Enable visual styles
            //Application.EnableVisualStyles();
            //Application.DoEvents();		// This must be here to work around a .NET bug
            Application.SetCompatibleTextRenderingDefault(true);

            // Set current thread name
            Thread.CurrentThread.Name = "Main Application";

            // Application is running
            appmutex   = new Mutex(false, "gluon");
            apprunning = true;

            // Get a reference to this assembly
            thisasm = Assembly.GetExecutingAssembly();
            Version thisversion = thisasm.GetName().Version;

            // Find paths
            Uri localpath = new Uri(Path.GetDirectoryName(thisasm.GetName().CodeBase));

            apppath      = Uri.UnescapeDataString(localpath.AbsolutePath);
            temppath     = Path.GetTempPath();
            settingspath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Gluon");
            logfile      = Path.Combine(settingspath, "Log.txt");

            // Make program settings directory if missing
            if (!Directory.Exists(settingspath))
            {
                Directory.CreateDirectory(settingspath);
            }

            // Remove the previous log file and start logging
            //if(File.Exists(logfile)) File.Delete(logfile);
            General.WriteLogLine("===============================================================================================");
            General.WriteLogLine("Gluon " + thisversion.Major + "." + thisversion.Minor + "." + thisversion.Build + "." + thisversion.Revision + " startup.");

                        #if HIGH_PRIORITY_PROCESS
            Process thisproc = Process.GetCurrentProcess();
            thisproc.PriorityClass = ProcessPriorityClass.AboveNormal;
                        #endif
            Thread thisthread = Thread.CurrentThread;
            thisthread.Priority = ThreadPriority.Highest;

            // Load settings
            settings = new SettingsManager();

                        #if DEBUG
            if (!settings.LiveEnvironment)
            {
                accessenabled = true;
            }
                        #endif

            // Make me a clock
            clock = new Clock();

            // Make the power managment
            power = new PowerManager();

            // Load sounds
            sounds = new SoundsManager();
            sounds.LoadSounds();

            // If audio is not set to primary device, we must make it so and restart Gluon
            if (!sounds.CheckAudioOutputPrimary())
            {
                sounds.SetAudioOutputPrimary();

                // Restart Gluon
                ProcessStartInfo proc = new ProcessStartInfo();
                proc.ErrorDialog     = false;
                proc.FileName        = Path.Combine(General.AppPath, "Gluon.exe");
                proc.LoadUserProfile = true;
                //proc.UserName = "******";
                proc.UseShellExecute  = false;
                proc.WorkingDirectory = General.AppPath;
                Process.Start(proc);
                return;
            }

            // Load color palette
            colors = new ColorPalette();

            // Load interface images
            images = new InterfaceImageProvider();

            // Build images for all color schemes
            colors.SetupDarkScheme();
            images.BuildImages();
            colors.SetupNormalScheme();
            images.BuildImages();

            // Managers
            remote    = new RemoteManager();
            display   = new DisplayManager();
            pcap      = new PCapManager();
            obex      = new ObexManager();
            agenda    = new AgendaManager();
            notes     = new NotesManager();
            groceries = new GroceriesManager();
            db        = new DatabaseManager();

            // Load main window
            mainwindow = new MainForm();
            mainwindow.ShowTaggedPanel("loading");

            // See LoadingDisplaypanel::Load() for connect/setup stuff

                        #if CATCH_EXCEPTIONS
            // Add exception handlers
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            Application.ThreadException += Application_ThreadException;
                        #endif

            bool failed;

            do
            {
                failed = false;

                                #if CATCH_EXCEPTIONS
                try
                {
                                #endif

                // Show main window
                Application.Run(mainwindow);

                                #if CATCH_EXCEPTIONS
            }
            catch (Exception e)
            {
                Application.ExitThread();
                failed               = true;
                mainwindow           = new MainForm();
                General.ErrorMessage = e.GetType().Name + ": " + e.Message + "\r\n" + e.StackTrace;
                General.WriteLogLine(General.ErrorMessage);
                mainwindow.ShowTaggedPanel("error");
            }
                                #endif
            }while(failed);

            // Clean stuff up
            sounds.SetAudioOutputPrimary();
            display.Dispose();
            obex.Dispose();
            pcap.Dispose();
            db.Dispose();
            remote.Dispose();
        }
Example #4
0
        // This processes the client.
        // Returns false when the connection was closed.
        public bool Process(RemoteManager manager)
        {
            // Send data
            int maxsendbytes = Math.Min(SEND_RECEIVE_SIZE, (int)sendbuffer.Length);
            int bytessent = socket.Send(sendbuffer.ToArray(), 0, maxsendbytes, SocketFlags.None);
            int bytesremaining = (int)sendbuffer.Length - bytessent;
            MemoryStream oldbuffer = sendbuffer;
            sendbuffer = new MemoryStream(Math.Max(bytesremaining, SEND_RECEIVE_SIZE));
            if(bytesremaining > 0)
                sendbuffer.Write(oldbuffer.ToArray(), bytessent, bytesremaining);
            oldbuffer.Dispose();

            // Receive data
            byte[] datablock = new byte[SEND_RECEIVE_SIZE];
            int bytesreceived = socket.Receive(datablock);
            if(bytesreceived == 0)
            {
                // When Receive returns 0 bytes the connection was closed
                return false;
            }
            else
            {
                // Receive new data from client
                NotifyResponse();
                ReceiveData(datablock, bytesreceived);

                // Parse and process commands
                RemoteCommand c = TryParseCommand();
                while(c != null)
                {
                    manager.ProcessCommand(c);
                    c = TryParseCommand();
                }

                return true;
            }
        }