Esempio n. 1
0
        public MainWindow()
        {
            ConsoleLogger.Init();

            AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);

            window = this;

            InitializeComponent();

            WindowConfig.Init();

            //the timer is used to let the window initialize first, then move the screen
            DispatcherTimer timer = new DispatcherTimer();

            timer.Interval = TimeSpan.FromMilliseconds(100);
            timer.Start();
            timer.Tick += new EventHandler(delegate(object s, EventArgs a)
            {
                if (WindowConfig.IsAutoRestart == 1)
                {
                    this.Height      = WindowConfig.WindowHeight;
                    this.Width       = WindowConfig.WindowWidth;
                    this.Top         = WindowConfig.WindowTop;
                    this.Left        = WindowConfig.WindowLeft;
                    this.WindowState = WindowConfig.WindowState;
                }
                //reset the window config
                WindowConfig.IsAutoRestart = 0;
                WindowConfig.Save();

                timer.Stop();
            });



            DataContext = new MainWindowViewModel();

            //set the default selection to 1
            leftControlBar.SelectedIndex = 0;

            Modality.AddDefault();
            RP.AddDefault();
            Doctor.AddDefault();
            Room.AddDefault();

            //Start the timer, restart the program automatically every day
            WindowAutoRestart.Init();

            InjectionsManager.Init();

            NetworkManager.Init(this, WindowConfig.IsAutoRestart == 1, WindowConfig.IsServer == 1);
        }
Esempio n. 2
0
        /// <summary>
        /// Handle message if client recieved anything from server
        ///
        /// The message contain two part,
        /// first part is a identifier (string) to distinguish what type of message is it
        /// second part is the message content
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        public static void MessageReceivedFromServer(object sender, MessageReceivedFromServerEventArgs args)
        {
            Console.WriteLine("[NetworkManager-Client] Recieved message from server");
            string[] messages = Encoding.UTF8.GetString(args.Data).Split(new char[] { '_' }, 2);
            try
            {
                Console.Out.WriteLine("[NetworkManager-Client] Recieved message type: " + messages[0]);
                Console.Out.WriteLine("[NetworkManager-Client] The message is: " + messages[1]);
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e);
            }

            switch (messages[0])
            {
            case "autoRestart":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving Auto Restart Request from server, proceed to restart client");

                //disable connection to prevent reconnection to server before restarting
                connectionEnabled = false;



                window.Dispatcher.Invoke(() =>
                {
                    Console.Out.WriteLine("[NetworkManager-Client] Start timer of 15 seconds");
                    DispatcherTimer timer = new DispatcherTimer();
                    timer.Interval        = TimeSpan.FromMinutes(1);
                    timer.Start();
                    timer.Tick += new EventHandler(delegate(object s, EventArgs a)
                    {
                        //only restart if it is a different date
                        if (WindowAutoRestart.isSameDate())
                        {
                            Console.Out.WriteLine("[NetworkManager-Client] It is still yesterday. Wait until auto restart.");
                        }
                        else
                        {
                            Console.Out.WriteLine("[NetworkManager-Client] AutoRestarting...");
                            WindowAutoRestart.AutoRestart();
                            timer.Stop();
                        }
                    });
                });
                break;

            case "setClientNumber":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving Set ClientNumber Request from server, proceed to set self ClientNumber");
                window.Dispatcher.Invoke(() =>
                {
                    clientNumber = int.Parse(messages[1]);
                    Console.Out.WriteLine("[NetworkManager-Client] My client number is:" + clientNumber);
                });
                break;

            case "addAllClientInfo":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving Add All ClientInfo Request from server, proceed to add client view objects for network page");
                window.Dispatcher.Invoke(() =>
                {
                    ClientViewObject.XMLtoClient(XElement.Parse(messages[1]));
                });
                break;

            case "modInjection":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving Mod Injection Request from server, proceed to modify injection");
                window.Dispatcher.Invoke(() =>
                {
                    InjectionsManager.modInjection(XElement.Parse(messages[1]));
                });
                break;

            case "changePatientStatus":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving change PatientStatus Request from server, proceed to change PatientStatus");
                window.Dispatcher.Invoke(() =>
                {
                    //try to splite the message back to (accessionNumber, patientStatus)
                    if (messages[1].Split('^').Length == 2)
                    {
                        InjectionsManager.changePatientStatus(messages[1].Split('^')[0], messages[1].Split('^')[1]);
                    }
                    else
                    {
                        Console.Out.WriteLine("[NetworkManager-Client_changePatientStatus()] Corrupted changePatientStatus message, require 2 input. Message: " + messages[1]);
                    }
                });
                break;

            //////////////////////////////////////////////////
            ////////    Obsolete    //////////////////////////
            case "dischargeInjection":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving Discharge Injection Request from server, proceed to discharge injection");
                window.Dispatcher.Invoke(() =>
                {
#pragma warning disable CS0618 // Type or member is obsolete
                    InjectionsManager.dischargeInjection(messages[1]);
#pragma warning restore CS0618 // Type or member is obsolete
                });
                break;
            //////////////////////////////////////////////////

            case "removeInjection":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving remove Injection Request from server, proceed to remove injection");
                window.Dispatcher.Invoke(() =>
                {
                    InjectionsManager.removeInjection(messages[1]);
                });
                break;

            case "addPatient":
                Console.Out.WriteLine("[NetworkManager-Client] Receiving Add Patient Request from server, proceed to add Patient");
                window.Dispatcher.Invoke(() =>
                {
                    PatientManager.ModPatient(new Patient(XElement.Parse(messages[1])));
                });
                break;

            default:
                Console.Error.WriteLine("[NetworkManager-Client] Unhandled message type: " + messages[0]);
                break;
            }
        }