/// <summary> /// Получение актуального(действующего) планового графика на текущие сутки /// </summary> static void GetPlanValuesActual(IApiExternal api_, Modes.BusinessLogic.IGenObject IGO) { //api_.GetPlanFactors() - это список: генерация; минимум генерации; максимум генерации //Величины в тестовом примере читаются так: Values (это коллекция) = api_.GetPlanValuesActual(...) //А потом цикл по ним, и у них берётся .DT и .Value IList <PlanValueItem> LPVI = api_.GetPlanValuesActual(DateTime.Now.Date.LocalHqToSystemEx(), DateTime.Now.Date.AddDays(1).LocalHqToSystemEx(), IGO); if (LPVI.Count == 0) { Console.WriteLine(" Нет параметров генерации!"); } foreach (PlanValueItem pvi in LPVI.OrderBy(RRR => RRR.DT)) { Console.WriteLine(" " + pvi.DT.SystemToLocalHqEx().ToString() + " " + pvi.Type.ToString() + " [" + LPFI[pvi.ObjFactor].Description + "] " + /*it.ObjName это id генерирующего объекта*/ LPFI[pvi.ObjFactor].Name + " =" + pvi.Value.ToString()); techsite.WritePlanValue(IGO.IdInner, pvi.DT.SystemToLocalHqEx(), pvi.Type.ToString(), (MySQLtechsite.Params)LPFI[pvi.ObjFactor].Id, pvi.Value); //Запись в БД techsite //02.09.2013 меняю IGO.Id на IGO.IdInner //pvi.DT.SystemToLocalHqEx() даёт Московское время, как и нужно //Аналогичный результат даст явное преобразование TimeZoneInfo.ConvertTimeFromUtc(pvi.DT, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")) //"Russian Standard Time" - это Москва. "N. Central Asia Standard Time" - это Новосибирск. //Про конвертацию времени: http://msdn.microsoft.com/ru-ru/library/bb397769.aspx } }
static void ProcessChilds(Modes.BusinessLogic.IGenObject IGO, int Level, IApiExternal api_) { foreach (Modes.BusinessLogic.IGenObject IGOch in IGO.Children) { if (!(IGOch.GenObjType.Id == 15)) //Оборудование типа ГОУ исключаем - по ним нет ни параметров, ни дочерних элементов { Console.WriteLine(new System.String('-', Level) + IGOch.Description + " [" + IGOch.GenObjType.Description + "] P:" + IGOch.VarParams.Count.ToString() + " Id:" + IGOch.Id.ToString() + " IdInner:" + IGOch.IdInner.ToString()); //if (g_bList == false) ProcessParams(IGOch); else ; if (IGOch.GenObjType.Id == 3) { //У оборудования типа Электростанция (id=1) нет параметров - только дочерние элементы if (g_bList == false) { GetPlanValuesActual(api_, IGOch); } else { ; } } else { ; } ProcessChilds(IGOch, Level + 1, api_); } else { ; } } }
public void modesConnect() { int index = 0; while (!ModesApiFactory.IsInitilized && index <= 10) { try { using (Impersonator imp = new Impersonator(MCSettings.Single.MCUser, "corp", MCSettings.Single.MCPassword)) { Logger.Info(String.Format("Подключение к MC. Попытка {0}", index)); //ModesApiFactory.Initialize(MCSettings.Single.MCServer, MCSettings.Single.MCUser, MCSettings.Single.MCPassword); ModesApiFactory.Initialize(MCSettings.Single.MCServer); api = ModesApiFactory.GetModesApi(); } /*Logger.Info(String.Format("Подключение к MC. Попытка {0}", index)); * ModesApiFactory.Initialize(MCSettings.Single.MCServer, "mc_votges", "mcV0tges"); * api = ModesApiFactory.GetModesApi();*/ } catch (Exception e) { Logger.Info(e.ToString()); } index++; } }
public ParseMCGetData(IApiExternal mcApi //, Modes.BusinessLogic.IModesTimeSlice modesTimeSlice , IList <PlanFactorItem> listPFI , object query , Func <int, Modes.BusinessLogic.IGenObject> fFindIGO , Func <int, Modes.BusinessLogic.IGenObject> fAddIGO , Action <FillErrorEventArgs> fGetData_OnFillError) { _operation = DbMCInterface.Operation.Unknown; _mcApi = mcApi; //_modesTimeSlice = modesTimeSlice; _mcListPFI = listPFI; delegateFunctionFindIGO = fFindIGO; delegateFunctionAddIGO = fAddIGO; delegateGetData_OnFillError = fGetData_OnFillError; _arguments = ((string)query).Split(';'); Enum.TryParse <DbMCInterface.Operation> (_arguments [0], out _operation); }
private void подключитьсяToolStripMenuItem_Click(object sender, EventArgs e) { if (isConnected) { подключитьсяToolStripMenuItem.Text = "Подключиться"; ModesApiFactory.CloseConnection(); isConnected = false; } else { ConnectionForm_ f1 = new ConnectionForm_(); if (f1.ShowDialog() != DialogResult.OK) { return; } if (f1.isLocal) { ModesApiFactory.Initialize(f1.serverName, f1.User, f1.Pass); } else { ModesApiFactory.Initialize(f1.serverName); } if (ModesApiFactory.IsInitilized) { api_ = ModesApiFactory.GetModesApi(); api_.OnData53500Modified += new EventHandler <EventRefreshData53500>(api__OnData53500Modified); api_.OnMaket53500Changed += new EventHandler <EventRefreshJournalMaket53500>(api__OnMaket53500Changed); api_.OnNsiModified += new EventHandler <EventUpdateNsi>(api__OnNSIModified); api_.OnClose += new EventHandler(api__ServiceOnClose); api_.OnPlanDataChanged += new EventHandler <EventPlanDataChanged>(api__OnPlanDataChanged); isConnected = true; подключитьсяToolStripMenuItem.Text = "Отключиться"; } } }
static void Main(string[] args) { bool bNoWait, bCalculatedHalfHourValues; bNoWait = bCalculatedHalfHourValues = false; if (ProcArgs(args, out bNoWait, out g_bList, out bCalculatedHalfHourValues) == true) { return; } else { ; } int iTechsiteInitialized = 0; if (g_bList == false) { Console.WriteLine(Environment.NewLine + "DB PPBR Initializing - Please Wait..."); try { techsite = new MySQLtechsite(bCalculatedHalfHourValues); } catch (Exception e) { Logging.Logg().Exception(e, "MySQLtechsite::MySQLtechsite () - new MySqlConnection (...)", Logging.INDEX_MESSAGE.NOT_SET); itssAUX.PrintErrorMessage(e.Message + Environment.NewLine); iTechsiteInitialized = 1; } if (iTechsiteInitialized == 0) { iTechsiteInitialized = techsite.Initialized; } else { ; } } else { ; } if ((iTechsiteInitialized == 0) || (g_bList == true)) { Console.WriteLine("Modes-Centre API Initializing - Please Wait..." + Environment.NewLine); ModesApiFactory.Initialize(GetNameHostModesCentre()); if (ModesApiFactory.IsInitilized == true) { var bContinue = true; if (bNoWait == false) { ConsoleKeyInfo choice; Console.Write("Continue (Y/N)..."); choice = Console.ReadKey(); //Console.WriteLine(choice.ToString ()); Console.WriteLine(Environment.NewLine); if (!(choice.Key == ConsoleKey.Y)) { bContinue = false; } else { ; } } else { } if (bContinue == true) { IApiExternal api_ = ModesApiFactory.GetModesApi(); LPFI = api_.GetPlanFactors(); DateTime dt = DateTime.Now.Date.LocalHqToSystemEx(); //"Дата начала суток по московскому времени в формате UTC" (из документации) - так по московскому или в UTC? Правильнее - дата-время начала суток в Москве по Гринвичу. //dt = DateTime.Now.Date.ToUniversalTime(); //Вот это реально в UTC, но API выдаёт ошибку - не на начало суток указывает //dt = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.Date.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")); //Вот это Московское, но API его не принимает - требует в UTC //dt = TimeZoneInfo.ConvertTime(DateTime.Now.Date, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")); TimeSpan dtSpan = TimeSpan.Zero; if (g_bList == true) { dtSpan = g_dtList.Date.LocalHqToSystemEx() - dt; } else { ; } Modes.BusinessLogic.IModesTimeSlice ts = api_.GetModesTimeSlice(dt.AddHours(dtSpan.TotalHours), SyncZone.First, TreeContent.PGObjects, true); foreach (Modes.BusinessLogic.IGenObject IGO in ts.GenTree) { Console.WriteLine(IGO.Description + " [" + IGO.GenObjType.Description + "]"); ProcessParams(IGO); ProcessChilds(IGO, 1, api_); } if (g_bList == false) { //А время апдейта (поле wr_date_time) Новосибирское Console.WriteLine(Environment.NewLine + "Время Московское, в т.ч. при записи в БД. В поле wr_date_time - Новосибирское." + Environment.NewLine); techsite.FlushDataToDatabase(); } else { Console.WriteLine(string.Empty); } } else { ; //Пользователь не захотел продолжать } } else { itssAUX.PrintErrorMessage("Ошибка инициализации API Modes-Centre при обращении к сервису."); } } else { //Не инициализировано соединение с БД Статистика if (iTechsiteInitialized > 0) { //Нет соединения с БД (конфигурации или назаначения) } else { switch (iTechsiteInitialized) { case -1: itssAUX.PrintErrorMessage("Ошибка! MySQLtechsite::MySQLtechsite () - список идентификаторов ГТП пуст..."); break; default: break; } } } messageToExit(bNoWait); }
/// <summary> /// Установить соединение с Модес-Центром и подготовить объект соединения к запросам /// </summary> /// <returns>Результат установления соединения и инициализации</returns> protected override bool Connect() { string msgLog = string.Empty; if (m_connectionSettings == null) { return(false); } else { ; } if (m_connectionSettings.GetType().Equals(typeof(string)) == false) { return(false); } else { ; } if (!(((string)m_connectionSettings).Length > 0)) { return(false); } else { ; } bool result = false, bRes = false; try { if (bRes == true) { return(bRes); } else { bRes = true; } } catch (Exception e) { Logging.Logg().Exception(e, "DbMCInterface::Connect ()", Logging.INDEX_MESSAGE.NOT_SET); } lock (lockConnectionSettings) { if (needReconnect == true) // если перед приходом в данную точку повторно были изменены настройки, то подключения со старыми настройками не делаем { return(false); } else { ; } } msgLog = string.Format("Соединение с Modes-Centre ({0})", (string)m_connectionSettings); try { ModesApiFactory.Initialize((string)m_connectionSettings); Logging.Logg().Debug(string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); } bRes = result = ModesApiFactory.IsInitilized; if (bRes == true) { // на случай перезагрузки сервера Модес-центр try { m_MCApi = ModesApiFactory.GetModesApi(); m_MCTimeSlice = m_MCApi.GetModesTimeSlice(DateTime.Now.Date.LocalHqToSystemEx(), SyncZone.First, TreeContent.PGObjects, true); m_listPFI = m_MCApi.GetPlanFactors(); m_MCApi.OnData53500Modified += mcApi_OnEventHandler; m_MCApi.OnPlanDataChanged += mcApi_OnEventHandler; m_MCApi.OnMaket53500Changed += mcApi_OnEventHandler; Logging.Logg().Debug(string.Format(@"{0} - {1}...", msgLog, @"УСПЕХ"), Logging.INDEX_MESSAGE.NOT_SET); } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); result = false; } } else { Logging.Logg().Debug(string.Format(@"{0} - {1}...", msgLog, @"ОШИБКА"), Logging.INDEX_MESSAGE.NOT_SET); } return(result); }
protected override bool Connect() { if (!(((string)m_connectionSettings).Length > 0)) { return(false); } else { ; } bool result = false, bRes = false; try { if (bRes == true) { return(bRes); } else { bRes = true; } } catch (Exception e) { Logging.Logg().Exception(e, Logging.INDEX_MESSAGE.NOT_SET, "DbMCInterface::Connect ()"); } lock (lockConnectionSettings) { if (needReconnect == true) // если перед приходом в данную точку повторно были изменены настройки, то подключения со старыми настройками не делаем { return(false); } else { ; } } try { ModesApiFactory.Initialize((string)m_connectionSettings); Logging.Logg().Debug("Соединение с Modes-Centre (" + (string)m_connectionSettings + ")", Logging.INDEX_MESSAGE.NOT_SET); } catch (Exception e) { Logging.Logg().Exception(e, Logging.INDEX_MESSAGE.NOT_SET, "Ошибка соединения с Modes-Centre (" + (string)m_connectionSettings + ")"); } bRes = result = ModesApiFactory.IsInitilized; if (bRes == true) { m_MCApi = ModesApiFactory.GetModesApi(); m_MCTimeSlice = m_MCApi.GetModesTimeSlice(DateTime.Now.Date.LocalHqToSystemEx(), SyncZone.First, TreeContent.PGObjects, true); m_listPFI = m_MCApi.GetPlanFactors(); } else { ; } Logging.Logg().Debug("Соединение с Modes-Centre(" + (string)m_connectionSettings + ") - УСПЕХ", Logging.INDEX_MESSAGE.NOT_SET); return(result); }
/// <summary> /// Установить соединение с Модес-Центром и подготовить объект соединения к запросам /// </summary> /// <returns>Результат установления соединения и инициализации</returns> protected override bool Connect() { string msgLog = string.Empty; if (m_connectionSettings == null) { return(false); } else { ; } if (m_connectionSettings.GetType().Equals(typeof(string)) == false) { return(false); } else { ; } if (!(((string)m_connectionSettings).Length > 0)) { return(false); } else { ; } bool result = false, bRes = false; try { if (bRes == true) { return(bRes); } else { bRes = true; } } catch (Exception e) { Logging.Logg().Exception(e, "DbMCInterface::Connect ()", Logging.INDEX_MESSAGE.NOT_SET); } lock (lockConnectionSettings) { if (IsNeedReconnectNew == true) // если перед приходом в данную точку повторно были изменены настройки, то подключения со старыми настройками не делаем { return(false); } else { ; } } msgLog = string.Format("Соединение с Modes-Centre ({0})", (string)m_connectionSettings); try { ModesApiFactory.Initialize((string)m_connectionSettings); Logging.Logg().Debug(string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); } bRes = result = ModesApiFactory.IsInitilized; bool bEventHandler = false; IEnumerable <Delegate /*MethodInfo*/> handlers; if (bRes == true) { // на случай перезагрузки сервера Модес-центр try { m_MCApi = ModesApiFactory.GetModesApi(); m_modesTimeSlice = m_MCApi.GetModesTimeSlice(DateTime.Now.Date.LocalHqToSystemEx(), SyncZone.First, TreeContent.PGObjects, true); m_listPFI = m_MCApi.GetPlanFactors(); #region добавить обработчики для проверки возможности их удаления //m_MCApi.OnClose += mcApi_OnClose; //m_MCApi.OnData53500Modified += new EventHandler<Modes.NetAccess.EventRefreshData53500> (mcApi_OnEventHandler); //m_MCApi.OnMaket53500Changed += mcApi_OnEventHandler; //m_MCApi.OnPlanDataChanged += mcApi_OnEventHandler; #endregion #region Отмена регистрация неуниверсальных обработчиков //List<ParameterInfo> handlerParameters; //handlers = getHandlerExists (m_MCApi); //foreach (Delegate handler in handlers.ToList ()) { // handlerParameters = handler.Method.GetParameters ().ToList(); // if (handlerParameters.Count () == 2) // if (typeof (Modes.NetAccess.EventRefreshData53500).IsAssignableFrom (handlerParameters [1].GetType ()) == true) // m_MCApi.OnData53500Modified -= (EventHandler<Modes.NetAccess.EventRefreshData53500>)handler; // else if (typeof (Modes.NetAccess.EventRefreshJournalMaket53500).IsAssignableFrom (handlerParameters [1].GetType ()) == true) // m_MCApi.OnMaket53500Changed -= (EventHandler<Modes.NetAccess.EventRefreshJournalMaket53500>)handler; // else if (typeof (Modes.NetAccess.EventPlanDataChanged).IsAssignableFrom (handlerParameters [1].GetType ()) == true) // m_MCApi.OnPlanDataChanged -= (EventHandler<Modes.NetAccess.EventPlanDataChanged>)handler; // else // ; // else if (handlerParameters.Count () == 0) // m_MCApi.OnClose -= (EventHandler)handler; // else // ; //} //// проверить //handlers = getHandlerExists (m_MCApi); #endregion #region Отмена регистрации универсального обработчика List <string> eventNames = new List <string> () { "OnClose" , "OnData53500Modified", "OnMaket53500Changed", "OnPlanDataChanged" }; foreach (string eventName in eventNames) { foreach (Delegate handler in getHandlerExists(m_MCApi, eventName)) { switch (eventNames.IndexOf(eventName)) { case 0: m_MCApi.OnClose -= (EventHandler)handler; break; case 1: m_MCApi.OnData53500Modified -= (EventHandler <Modes.NetAccess.EventRefreshData53500>)handler; break; case 2: m_MCApi.OnMaket53500Changed -= (EventHandler <Modes.NetAccess.EventRefreshJournalMaket53500>)handler; break; case 3: m_MCApi.OnPlanDataChanged -= (EventHandler <Modes.NetAccess.EventPlanDataChanged>)handler; break; default: break; } } } // проверить handlers = getHandlerExists(m_MCApi); #endregion m_MCApi.OnClose += mcApi_OnClose; // добавить обработчики в соответствии с конфигурацией if (_jsonEventListener.Count > 0) { foreach (DbMCInterface.EVENT nameEvent in Enum.GetValues(typeof(DbMCInterface.EVENT))) { if (nameEvent == DbMCInterface.EVENT.Unknown) { continue; } else { ; } bEventHandler = bool.Parse(_jsonEventListener.Value <string> (nameEvent.ToString())); delegateMCApiHandler(Tuple.Create <EVENT, bool> (nameEvent, bEventHandler)); if (bEventHandler == true) { switch (nameEvent) { case EVENT.OnData53500Modified: m_MCApi.OnData53500Modified += mcApi_OnEventHandler; break; case EVENT.OnMaket53500Changed: m_MCApi.OnMaket53500Changed += mcApi_OnEventHandler; break; case EVENT.OnPlanDataChanged: m_MCApi.OnPlanDataChanged += mcApi_OnEventHandler; break; case EVENT.OnModesEvent: m_MCApi.OnModesEvent += mcApi_OnModesEvent; break; default: break; } } else { ; } } } else { // нет ни одного правила для (отмены)регистрации события ; } //// проверить //handlers = getHandlerExists (m_MCApi); Logging.Logg().Debug(string.Format(@"{0} - {1}...", msgLog, @"УСПЕХ"), Logging.INDEX_MESSAGE.NOT_SET); } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); result = false; } } else { Logging.Logg().Debug(string.Format(@"{0} - {1}...", msgLog, @"ОШИБКА"), Logging.INDEX_MESSAGE.NOT_SET); } lock (mcApiEventLocked) { delegateMCApiHandler?.Invoke(bRes); } return(result); }
/// <summary> /// Установить соединение с Модес-Центром и подготовить объект соединения к запросам /// </summary> /// <returns>Результат установления соединения и инициализации</returns> protected override bool Connect() { string msgLog = string.Empty; bool result = false , bRes = false; //Task<bool> taskInitialized; CancellationToken cancelTokenInitialized; if (m_connectionSettings == null) { return(false); } else { ; } if (m_connectionSettings.GetType().Equals(typeof(string)) == false) { return(false); } else { ; } if (!(((string)m_connectionSettings).Length > 0)) { return(false); } else { ; } result = bRes = false; //??? 'bRes' не м.б. 'True' try { if (bRes == true) { return(bRes); } else { bRes = true; } } catch (Exception e) { Logging.Logg().Exception(e, "DbMCInterface::Connect ()", Logging.INDEX_MESSAGE.NOT_SET); } lock (lockConnectionSettings) { if (IsNeedReconnectNew == true) // если перед приходом в данную точку повторно были изменены настройки, то подключения со старыми настройками не делаем { return(false); } else { ; } } msgLog = string.Format("Соединение с Modes-Centre ({0})", (string)m_connectionSettings); try { Logging.Logg().Debug(string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); _cancelTokenSourceInitialized = new CancellationTokenSource(); cancelTokenInitialized = _cancelTokenSourceInitialized.Token; using (Task <bool> taskInitialized = Task <bool> .Factory.StartNew(delegate() { ModesApiFactory.Initialize((string)m_connectionSettings); return(ModesApiFactory.IsInitilized); }, cancelTokenInitialized)) { taskInitialized.Wait(cancelTokenInitialized); bRes = result = taskInitialized.Status == TaskStatus.RanToCompletion ? taskInitialized.Result : false; } _cancelTokenSourceInitialized.Dispose(); _cancelTokenSourceInitialized = null; } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); } if (bRes == true) { // на случай перезагрузки сервера Модес-центр try { m_iConnectCounter++; m_MCApi = ModesApiFactory.GetModesApi(); m_modesTimeSlice = m_MCApi.GetModesTimeSlice(DateTime.Now.Date.LocalHqToSystemEx(), SyncZone.First, TreeContent.PGObjects, true); m_listPFI = m_MCApi.GetPlanFactors(); result = unregisterHandler(); if (result == true) { result = registerHandler(); } else { ; } if (result == true) { Logging.Logg().Debug(string.Format(@"{0} - {1}...", msgLog, @"УСПЕХ"), Logging.INDEX_MESSAGE.NOT_SET); } else { Logging.Logg().Error(string.Format(@"{0} - {1}; не выполнена регистрация/отмена регистрации подписчиков на события...", msgLog, @"ОШИБКА"), Logging.INDEX_MESSAGE.NOT_SET); } } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"{0} - ...", msgLog), Logging.INDEX_MESSAGE.NOT_SET); result = false; } } else { Logging.Logg().Debug(string.Format(@"{0} - {1}...", msgLog, @"ОШИБКА"), Logging.INDEX_MESSAGE.NOT_SET); } lock (mcApiEventLocked) { delegateMCApiHandler?.Invoke(bRes); } return(result); }