public WinspecInterfaceServer() { // Build the TCP/IP Server and connect the event handlers server = new TcpServer(); server.OnConnect += this.OnConnect_Handler; server.OnDataAvailable += this.OnDataAvailable_Handler; server.OnError += this.OnError_Handler; // Setup the Winspec interface doc = null; //Initialize the current doc to null; app = new Winx32App(); // Will either launch or connect to the current Winspec instance exp = new ExpSetup(); spec = new SpectroObjMgr(); }
private void process_command(ref string full_command, TcpServerConnection connection) { OnLog(new LogEventArgs("Processing Command: " + full_command)); string[] command_elements = full_command.Split(' '); switch (command_elements[0].ToLower()) { case "acquire": if (is_acquiring()) { send_response("err already acquiring\n", connection); } else { try { start_acquisition(); send_response("ok\n", connection); } catch (Exception e) { OnLog(new LogEventArgs("Error starting acquisition: " + e.ToString())); send_response("err " + e.Message + "\n", connection); } } break; case "status": try { if (is_acquiring()) { send_response("ok 1\n", connection); } else { send_response("ok 0\n", connection); } break; } catch (Exception e) { OnLog(new LogEventArgs("Error getting status: " + e.ToString())); send_response("err " + e.Message + "\n", connection); } break; case "get_data": if (is_acquiring()) { send_response("err acquiring\n", connection); break; } else if (doc == null) { send_response("err no data available\n", connection); break; } else { send_current_data(connection); } break; case "set_acq_time": try { object obj = Convert.ToDouble(command_elements[1]); exp.SetParam(EXP_CMD.EXP_EXPOSURE, ref obj); send_response("ok\n", connection); } catch (Exception e) { OnLog(new LogEventArgs("Error setting acquisition time\n")); send_response("err " + e.Message + "\n", connection); } break; case "get_acq_time": try { short res; double acq_time_out = (double)exp.GetParam(EXP_CMD.EXP_EXPOSURE, out res); OnLog(new LogEventArgs(string.Format("result = {0}", res))); send_response(String.Format("ok {0}\n", acq_time_out), connection); } catch (Exception e) { OnLog(new LogEventArgs("Error fetching acquisition time\n")); send_response("err " + e.Message + "\n", connection); } break; case "set_grating": try { object grating = Convert.ToInt32(command_elements[1]); object position = Convert.ToDouble(command_elements[2]); spec.Current.SetParam(SPT_CMD.SPT_NEW_GRATING, ref grating); spec.Current.SetParam(SPT_CMD.SPT_NEW_POSITION, ref position); spec.Current.Move(); send_response("ok\n", connection); } catch (Exception e) { OnLog(new LogEventArgs("Error setting grating\n")); send_response("err " + e.Message + "\n", connection); } break; case "get_grating": try { object grating = new object(); object position = new object(); spec.Current.GetParam(SPT_CMD.SPT_INST_CUR_GRAT_NUM, 0, out grating); spec.Current.GetParam(SPT_CMD.SPT_INST_CUR_GRAT_POS, 0, out position); send_response(string.Format("ok {0} {1}\n", grating, position), connection); } catch (Exception e) { OnLog(new LogEventArgs("Error fetching grating\n")); send_response("err " + e.Message + "\n", connection); } break; case "reinitialize": try { // Setup the Winspec interface doc = null; //Initialize the current doc to null; app = new Winx32App(); // Will either launch or connect to the current Winspec instance exp = new ExpSetup(); spec = new SpectroObjMgr(); send_response(string.Format("ok\n"), connection); } catch (Exception e) { OnLog(new LogEventArgs("Error reinitialzing winspec automation objects\n")); send_response("err " + e.Message + "\n", connection); } break; } }