00001
00002
00003 #ifndef _ssMultibeamProcess_h
00004 #define _ssMultibeamProcess_h
00005
00010 #include "../../../../Common/Observer/Observer.h"
00011 #include <vtkProcessObject.h>
00012 #include <vtkKWApplication.h>
00013
00014 #ifndef RUN_CYCLE_TAG
00015 #define RUN_CYCLE_TAG 1
00016 #endif
00017
00018 class vtkThreadedController;
00019 class vtkMultiProcessController;
00020 class MultibeamInstrument;
00021 class MultibeamBackEnd;
00022 class ssMultibeamLWApplication;
00023 class ssMultibeamProcessMonitor;
00024
00035 class ssMultibeamProcess : public vtkProcessObject
00036
00037 , public Observer
00038
00039 {
00040
00041 public:
00042
00052 static ssMultibeamProcess *New();
00053
00054 vtkTypeMacro(ssMultibeamProcess, vtkObject);
00055
00061 void PrintSelf(ostream& os, vtkIndent indent);
00062
00067 vtkMultiProcessController *Controller() const;
00068
00073 virtual void Run();
00074
00075
00079 enum ProcessNumber
00080 {
00081 FRONTEND_PROCESS = 1,
00082 BACKEND_PROCESS = 2,
00083 GUI_PROCESS = 0,
00084 SDF_PROCESS = 3,
00085 INSTRUMENT_MONITOR_PROCESS = 4,
00086 LAST_PROCESS
00087 };
00088
00089
00093
00094 enum OutputTag
00095 {
00096 BATHYMETRY = 100,
00097 ATTITUDE = ssMultibeamProcess::BATHYMETRY + 4,
00098 NAVIGATION = ssMultibeamProcess::ATTITUDE + 4,
00099 TIDE = ssMultibeamProcess::NAVIGATION + 4,
00100 VELOCIMETER = ssMultibeamProcess::TIDE + 4,
00101 TEMPERATURE = ssMultibeamProcess::VELOCIMETER + 4,
00102 LAST_STREAM
00103 };
00104
00105
00106
00111 enum NoficationTag
00112 {
00113 BATHYMETRY_DAV = 200,
00114 ATTITUDE_DAV,
00115 NAVIGATION_DAV,
00116 TIDE_DAV,
00117 VELOCIMETER_DAV,
00118 TEMPERATURE_DAV,
00119 LAST_STREAM_DAV,
00120 };
00121
00122
00123
00127 enum MonitorTag
00128 {
00129 TERMINATE_RMI,
00130 LAST_MONITOR_RMI
00131 };
00132
00133
00138 MultibeamInstrument *Instrument() const;
00139
00144 MultibeamBackEnd *BackEnd() const;
00145
00150 ssMultibeamLWApplication *Ui() const;
00151
00155 ssMultibeamProcessMonitor *ProcessMonitor() const;
00156
00161 virtual void notify();
00162
00167 virtual void Delete();
00168
00173 static void Run(vtkMultiProcessController *controller, void* vtkNotUsed(arg));
00174
00175
00176 protected:
00177
00181 ssMultibeamProcess();
00182
00186 virtual ~ssMultibeamProcess();
00187
00188
00189 private:
00190
00194 ssMultibeamProcess(const ssMultibeamProcess&);
00195 ssMultibeamProcess& operator=(const ssMultibeamProcess&);
00196
00202 static void RunParts(vtkMultiProcessController *controller, void *tlc);
00203
00204 MultibeamInstrument *instrument;
00205 MultibeamBackEnd *backend;
00206 ssMultibeamLWApplication *ui;
00207 ssMultibeamProcessMonitor *processmonitor;
00208
00209 vtkThreadedController *parentController;
00210 };
00211
00216 struct ThreadArgs
00217 {
00218 int argc;
00219 char **argv;
00220 Tcl_Interp *interp;
00221 };
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00311 #endif