Пример #1
0
        private void ExcuteCommand(EEGStudioModuleItem eegStudioItem,
            Guid examinationContext, string fileName, bool isNewExamination,
            string additionalParams = "", PatientData patientData = null)
        {
            if (moduleExchange == null)
                throw new Exception("Exchange module null reference error !!!");

            if (File.Exists(eegStudioItem.ExecuteFile) == false)
                throw new Exception("EEGStudio executable file not found !!!");

            // Проверяем конфиг EEGStudio
            CheckEEGStudioInitialization(eegStudioItem);

            // Запуск нового обследования
            if (isNewExamination == true)
            {
                // Создаем файл PatData.dat в папке конфига для обмена данными между базой и EEGStudio
                // Данные из PatData.dat применяются только при создании нового обследования
                PatientDataHelper.WriteEEGStudioPatDataFile(patientData, patDataFile, fileName);

                string newFileParam = string.Format("-new -pat=\"{0}\"", patDataFile); //

                BeginProcess(eegStudioItem, examinationContext, newFileParam, additionalParams);
            }
            else
            {
                String file = String.Format("\"{0}\"", fileName);
                BeginProcess(eegStudioItem, examinationContext, file, additionalParams);
            }
        }
Пример #2
0
        // Завершение процесса
        private void EndProcess(EEGStudioModuleItem eegStudioItem)
        {
            if (eegStudioItem != null)
            {
                foreach (Guid guid in eegStudioItem.Contexts)
                {
                    if (CheckOtherUnit(eegStudioItem, guid) == false)
                        moduleExchange.ProcessMessage(guid, "ProcessExited");
                }

                eegStudioItem.Contexts.Clear();
                eegStudioItem.Process = null;
            }
        }
Пример #3
0
        /// <summary>
        /// Метод проверяет наличие конфига EEGStudio 
        /// и если его нет запускает EEGStudio с ключем -init для инициализации
        /// </summary>
        private void CheckEEGStudioInitialization(EEGStudioModuleItem item)
        {
            int tryInitCount = 1; // счетчик попыток инициализации
            // Если нет  конфига EEGStudio - запустить процесс с ключем - init
            while (CheckEEGConfigPath() == false || Directory.Exists(eegStudioConfigPath) == false)
            {
                if (tryInitCount == 0)
                {
                    // Если не удалось создать конфиг с N-ой попытки
                    throw new Exception("Initialization Error");
                }
                tryInitCount--;

                try
                {
                    Process process = new Process();
                    ProcessStartInfo info = new ProcessStartInfo(item.ExecuteFile);
                    String arg = "-init";
                    info.Arguments = arg;

                    process.StartInfo = info;

                    // При успешном запуске процесс должен создать конфиг и завершиться
                    process.Start();
                    process.WaitForExit(); // ждать завешения

                    // повторно инициализируем пути
                    eegStudioConfigPath = GetConfigPath();
                    patDataFile = Path.Combine(eegStudioConfigPath, "PatData.dat");
                }
                catch { throw new Exception("Software not found"); }
            }
        }
Пример #4
0
 // Проверяем не содежат ли другие модули идентификатор данного обследования
 private bool CheckOtherUnit(EEGStudioModuleItem item, Guid context)
 {
     return eegStudioItems.FindAll(i => i.Mode != item.Mode).Any(x => x.Contexts.Contains(context));
 }
Пример #5
0
        /// <summary>
        /// Метод запускает с параметрами процесс соответствующего модуля EEGStudio
        /// !!! ПОРЯДОК ПАРАМЕТРОВ: -mdbs -exam={GUID} file_name[-new] !!!
        /// </summary>
        /// <param name="eegStudioItem"></param>
        /// <param name="examContext">дентификатор обследования</param>
        /// <param name="examFile">Полное имя файла MDFX</param>
        /// <param name="additionalParam">Добавочный параметр из конфига</param>
        private void BeginProcess(EEGStudioModuleItem eegStudioItem,
            Guid examContext, string examFile, string additionalParam)
        {
            Process process = null;
            try
            {
                process = new Process();
                ProcessStartInfo info = new ProcessStartInfo(eegStudioItem.ExecuteFile);
                String arg = String.Format("-mdbs -exam={0} {1} {2}", examContext, examFile, additionalParam);

                info.Arguments = arg;
                process.StartInfo = info;
                process.EnableRaisingEvents = true;

                // если модуль еще не запускал процессы
                if (eegStudioItem.Process == null && eegStudioItem.Contexts.Count == 0)
                {
                    process.Exited += (o, a) => { EndProcess(eegStudioItem); };
                    eegStudioItem.Process = process;
                }

                process.Start();

                moduleExchange.ProcessMessage(examContext, "ProcessStarted");

                // добавляем обследование в список запущенных данным процессом
                if (eegStudioItem.Contexts.Contains(examContext) == false)
                    eegStudioItem.Contexts.Add(examContext);
            }
            catch (Exception)
            {
                throw new Exception(process.ProcessName + " running error !!!");
            }
        }