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); }
/// <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; } }