void MyExperimentConfigurator_StartExperimentEvent(object sender, EventArgs e) { Dispatcher.Invoke((Action)(() => { MyRunExperimentControl.Configure(m_imager); MyRunExperimentControl.InitBarcodeResetRadioButtons(); MyRunExperimentControl.VM.ExpParams.experimentCurrentPlateNumber = 0; MyRunExperimentControl.VM.CurrentPlateNumberText = MyRunExperimentControl.VM.ExpParams.experimentCurrentPlateNumber.ToString(); VM.ShowRunExperimentPanel = true; MyRunExperimentControl.VM.EvalRunStatus(); GlobalVars.Instance.Status = WGStatus.READY; MyRunExperimentControl.Run(); })); }
async private void M_tcpServer_DataReceived(object sender, Message e) { WaveguideMessage message; byte[] packet; if (WaveguideMessageUtil.ParseMessage(e.Data, out message)) { m_commandMessageCount++; m_timestamp = DateTime.Now.ToString(); switch (message.messageType) { case Waveguide.WGMessageType.GET_STATUS: if (WaveguideMessageUtil.Build_Status_Message(GlobalVars.Instance.Status, GlobalVars.Instance.Status.ToString(), out packet)) { e.Reply(packet); } break; case Waveguide.WGMessageType.CONFIG_EXPERIMENT: ExperimentConfiguration config; PostMessage("Configuration Message Received"); // Waveguide must be in ONLINE or READY state to accept a config command if (GlobalVars.Instance.Status == WGStatus.ONLINE || GlobalVars.Instance.Status == WGStatus.READY) { if (ExperimentConfiguration.ParseConfigurationPayload(message.payloadBytes, out config)) { if (MyExperimentConfigurator.SetConfiguration(config)) { // Set Status to Ready GlobalVars.Instance.Status = WGStatus.READY; // send response if (WaveguideMessageUtil.Build_Status_Message(GlobalVars.Instance.Status, GlobalVars.Instance.Status.ToString(), out packet)) { e.Reply(packet); } } else { GlobalVars.Instance.Status = WGStatus.ONLINE; PostMessage("Configuration Message Format Error"); if (WaveguideMessageUtil.Build_Status_Message(WGStatus.MESSAGE_FAILED__MESSAGE_FORMAT_ERROR, "Failed to parse message", out packet)) { e.Reply(packet); } } } else { // received bad configuration data GlobalVars.Instance.Status = WGStatus.ONLINE; if (WaveguideMessageUtil.Build_Status_Message(WGStatus.MESSAGE_FAILED__MESSAGE_FORMAT_ERROR, "Failed to parse message", out packet)) { e.Reply(packet); PostMessage("Configuration Message Parse Error"); } } } else { if (WaveguideMessageUtil.Build_Status_Message(WGStatus.MESSAGE_FAILED__INCORRECT_MODE, "Current Waveguide mode = " + GlobalVars.Instance.Status.ToString() + "\nIt must be in ONLINE or READY mode in order to accept a configuration command", out packet)) { e.Reply(packet); PostMessage("Configuration Message No Accepted. Waveguide not in correct mode."); } } break; case Waveguide.WGMessageType.START_EXPERIMENT: // Waveguide must be in "Ready" state in order to Start an experiment PostMessage("Start Message Received"); if (GlobalVars.Instance.Status == WGStatus.READY) { GlobalVars.Instance.Status = WGStatus.RUNNING; if (WaveguideMessageUtil.Build_Status_Message(GlobalVars.Instance.Status, GlobalVars.Instance.Status.ToString(), out packet)) { e.Reply(packet); } // Start Experiment! MyExperimentConfigurator.StartExperiment(); // wait for camera temperature bool overridden = false; Application.Current.Dispatcher.Invoke( () => { // Code to run on the GUI thread. TemperatureMonitorDialog tdlg = new TemperatureMonitorDialog(m_imager.m_camera); tdlg.ShowDialog(); overridden = tdlg.WasOverridden(); if (overridden) { MyRunExperimentControl.VM.CameraTemperatureTarget = MyRunExperimentControl.VM.CameraTemperatureActual; } }); await Task.Delay(2000); // give time for RunExperimentControl to enable run // run vworks protocol MyRunExperimentControl.Run(); } else { if (WaveguideMessageUtil.Build_Status_Message(WGStatus.MESSAGE_FAILED__INCORRECT_MODE, "Current Waveguide mode = " + GlobalVars.Instance.Status.ToString() + "\nIt must be in READY mode in order to accept a Start command", out packet)) { e.Reply(packet); } } break; case Waveguide.WGMessageType.STOP_EXPERIMENT: PostMessage("Stop Message Received"); if (GlobalVars.Instance.Status == WGStatus.RUNNING) { GlobalVars.Instance.Status = WGStatus.READY; if (WaveguideMessageUtil.Build_Status_Message(GlobalVars.Instance.Status, GlobalVars.Instance.Status.ToString(), out packet)) { e.Reply(packet); } } else { if (WaveguideMessageUtil.Build_Status_Message(WGStatus.MESSAGE_FAILED__INCORRECT_MODE, "Current Waveguide mode = " + GlobalVars.Instance.Status.ToString() + "\nIt must be in RUNNING mode in order to accept a Stop command", out packet)) { e.Reply(packet); } } break; case Waveguide.WGMessageType.STATUS: break; } } else { //m_vm.status = WGStatus.ERROR; if (WaveguideMessageUtil.Build_Status_Message(WGStatus.MESSAGE_FAILED__MESSAGE_FORMAT_ERROR, "Error Parsing Message", out packet)) { e.Reply(packet); } } }