Exemplo n.º 1
0
        private void dbMCSources_OnEventHandler(object obj)
        {
            DbMCInterface.ID_EVENT id_event = DbMCInterface.ID_EVENT.Unknown;
            EventArgs argEventChanged       = null; // оборудование для которого произошло событие
            TEC       tec;                          // для оборудования которой произошло событие
            Tuple <DbMCInterface.EVENT, bool> tupleConnectHandler;

            Func <DateTime, TimeSpan> difference = delegate(DateTime target) {
                // разница целевой даты объекта события и текущей даты
                return(target - ASUTP.Core.HDateTime.ToMoscowTimeZone());
            };

            Func <DateTime, bool> isRequired = delegate(DateTime target) {
                // разница целевой даты объекта события и текущей даты; для проверки необходимости обработки события (только текущие сутки)
                TimeSpan diff = difference(target);

                return(diff.TotalDays > -1 &&
                       diff.TotalDays < ASUTP.Core.HDateTime.TS_MSK_OFFSET_OF_UTCTIMEZONE.TotalDays);
            };

            Func <DbMCInterface.ID_EVENT, DateTime, DateTime> translate = delegate(DbMCInterface.ID_EVENT id, DateTime datetime) {
                return(((id == DbMCInterface.ID_EVENT.RELOAD_PLAN_VALUES) || (id == DbMCInterface.ID_EVENT.NEW_PLAN_VALUES))
                    ? datetime.SystemToLocalHqEx()
                        : ((id == DbMCInterface.ID_EVENT.PHANTOM_RELOAD_PLAN_VALUES) || (id == DbMCInterface.ID_EVENT.REQUEST_PLAN_VALUES))
                            ? datetime
                                : datetime);
            };

            if (obj is Array)
            {
                id_event = (DbMCInterface.ID_EVENT)(obj as object []) [0];

                if (id_event == DbMCInterface.ID_EVENT.GENOBJECT_MODIFIED)
                {
                    Modes.NetAccess.EventRefreshData53500 ev = (obj as object []) [1] as Modes.NetAccess.EventRefreshData53500;

                    #region Подготовка текста сообщения в журнал о событии
                    string msg      = string.Empty
                    , listEquipment = string.Empty;
                    msg = string.Format(@"AdminMC::dbMCSources_OnEventHandler((ID_MC_EVENT={1}) - обработчик события - изменения[кол-во={2}]{0}для оборудования {3}..."
                                        , Environment.NewLine, id_event, ev.Equipments.Count, @"СПИСОК");
                    foreach (KeyValuePair <DateTime, List <int> > pair in ev.Equipments)
                    {
                        listEquipment += string.Format(@"[Дата={0}, список=({1})],", pair.Key.ToString(), string.Join(", ", pair.Value));
                    }
                    listEquipment = listEquipment.Remove(listEquipment.Length - 1);
                    msg           = msg.Replace(@"СПИСОК", listEquipment);
                    #endregion

                    Logging.Logg().Action(msg, Logging.INDEX_MESSAGE.NOT_SET);
                }
                else if ((id_event == DbMCInterface.ID_EVENT.RELOAD_PLAN_VALUES) ||
                         (id_event == DbMCInterface.ID_EVENT.PHANTOM_RELOAD_PLAN_VALUES))
                {
                    Modes.NetAccess.EventRefreshJournalMaket53500 ev = (obj as object []) [1] as Modes.NetAccess.EventRefreshJournalMaket53500;

                    DateTime dateTarget;
                    ReadOnlyCollection <Guid> makets;
                    string abbr = string.Empty
                    , taskModes = string.Empty;

                    dateTarget = translate(id_event, ev.dtTarget.GetValueOrDefault());
                    makets     = ev.makets as ReadOnlyCollection <Guid>;
                    abbr       = ev.Task.GetAbbr();
                    taskModes  = ev.Task.ModesTaskToString();

                    Logging.Logg().Action(string.Format(@"AdminMC::dbMCSources_OnEventHandler(ID_MC_EVENT={0}) - обработчик события - переопубликация[на дату={1}, кол-во макетов={2}], Аббр={3}, описание={4}..."
                                                        , id_event.ToString(), dateTarget.ToString(), makets.Count, abbr, taskModes)
                                          , Logging.INDEX_MESSAGE.NOT_SET);

                    if (isRequired(dateTarget) == true)
                    {
                        argEventChanged = new EventArgs <Guid> (id_event, dateTarget, makets);
                    }
                    else
                    {
                        Logging.Logg().Debug($"AdminMC::dbMCSources_OnEventHandler(ID_MC_EVENT={id_event.ToString ()}) - дата нового не актуальна; Day=[{dateTarget}], разн.(сутки)=[{difference (dateTarget).TotalDays}]..."
                                             , Logging.INDEX_MESSAGE.NOT_SET);
                    }
                }
                else if ((id_event == DbMCInterface.ID_EVENT.NEW_PLAN_VALUES) ||
                         (id_event == DbMCInterface.ID_EVENT.REQUEST_PLAN_VALUES))
                {
                    Modes.NetAccess.EventPlanDataChanged ev = (obj as object []) [1] as Modes.NetAccess.EventPlanDataChanged;

                    DateTime day
                    , version;
                    string pbr_number = string.Empty
                    , id_mc_tec       = string.Empty;
                    int id_gate       = -1;

                    day        = translate(id_event, ev.Day);
                    pbr_number = ev.Type.PlanTypeToString();
                    version    = translate(id_event, ev.Version);
                    id_mc_tec  = ev.ClientId;
                    id_gate    = ev.IdGate;

                    Logging.Logg().Action(string.Format(@"AdminMC::dbMCSources_OnEventHandler(ID_MC_EVENT={0}) - обработчик события - {6} план[на дату={1}, номер={2}, версия={3}, для подразделения={4}, IdGate={5}]..."
                                                        , id_event.ToString(), day.ToString(), pbr_number, version.ToString(), id_mc_tec, id_gate
                                                        , id_event == DbMCInterface.ID_EVENT.NEW_PLAN_VALUES ? "новый" : id_event == DbMCInterface.ID_EVENT.REQUEST_PLAN_VALUES ? "<запрос>" : "НЕ ИЗВЕСТНО")
                                          , Logging.INDEX_MESSAGE.NOT_SET);

                    // проверить дату за которую получен новый план: только сегодняшние и следующие сутки сутки
                    if (isRequired(day) == true)
                    {
                        tec = m_list_tec.Find(t => {
                            return(t.name_MC.Trim().Equals(id_mc_tec.ToString()));
                        });

                        argEventChanged = new EventArgs <FormChangeMode.KeyDevice> (id_event, day, new ReadOnlyCollection <FormChangeMode.KeyDevice> (
                                                                                        allTECComponents.FindAll(comp => {
                            return((comp.IsGTP == true) &&
                                   (comp.tec.m_id == tec.m_id));
                        }).ConvertAll(comp => new FormChangeMode.KeyDevice()
                        {
                            Id = comp.m_id, Mode = FormChangeMode.MODE_TECCOMPONENT.GTP
                        })
                                                                                        ));
                    }
                    else
                    {
                        Logging.Logg().Debug($"AdminMC::dbMCSources_OnEventHandler(ID_MC_EVENT={id_event.ToString ()}) - дата не актуальная; Day=[{day}], разн.(сутки)=[{difference (day).TotalDays}]..."
                                             , Logging.INDEX_MESSAGE.NOT_SET);
                    }
                }
                else
                {
                    ;
                }
                // проверить сфорирован ли аргумент для события
                // , имеется ли обработчик; иначе из коллекции не смогут быть удалены элементы(удаление только из-вне)
                // , а значит коллекция увеличивается без ограничений, а элементы никаким образом не обрабатываются
                if ((Equals(argEventChanged, null) == false) &&
                    (isHandlerMCEvent(id_event) == true))
                {
                    AddEvent(argEventChanged);
                }
                else
                {
                    ;
                }
            }
            else if (typeof(Tuple <DbMCInterface.EVENT, bool>).IsAssignableFrom(obj.GetType()) == true)
            {
                //TODO: ретранслировать для формы произошла подписка/отписка от события Модес-Центра
                tupleConnectHandler = obj as Tuple <DbMCInterface.EVENT, bool>;

                _dictNotify [DbMCInterface.ID_EVENT.HANDLER_CONNECT]?.Invoke(this, new EventArgs <bool>(DbMCInterface.TranslateEvent(tupleConnectHandler.Item1), DateTime.MinValue, new ReadOnlyCollection <bool> (new List <bool>()
                {
                    tupleConnectHandler.Item2
                })));
            }
            else if (typeof(bool).IsAssignableFrom(obj.GetType()) == true)
            {
                id_event = DbMCInterface.ID_EVENT.Unknown;

                //TODO: проверить результат попытки установки соединения
                Logging.Logg().Action($"AdminMC::dbMCSources_OnEventHandler(ID_MC_EVENT={id_event.ToString ()}) - изменение состояния соединения УСТАНОВЛЕНО = {(bool)obj})...", Logging.INDEX_MESSAGE.NOT_SET);

                switch ((bool)obj == true ? 1 : 0)
                {
                case 0:
                    _eventConnected.Reset();
                    break;

                case 1:
                    _eventConnected.Set();
                    FetchEvent(false);
                    break;

                default:
                    break;
                }
            }
            else
            {
                throw new Exception(@"AdminMC::dbMCSources_OnEventHandler () - неизвестное событие от DbMCSources...");
            }
        }
Exemplo n.º 2
0
        private void FormMainTransMC_EventHandlerConnect(object obj, EventArgs ev)
        {
            Action checkStateChanged = delegate() {
                trans_mc.AdminMC.EventArgs <bool> arg = ev as trans_mc.AdminMC.EventArgs <bool>;

                ((ToolStripMenuItem)this.СобытияМодесЦентрToolStripMenuItem.DropDownItems.Find(getNameSubToolStripMenuItem(DbMCInterface.TranslateEvent(arg.m_id)), true) [0])
                .Checked = arg.m_listParameters [0];

                this.СобытияМодесЦентрToolStripMenuItem.Enabled = this.СобытияМодесЦентрToolStripMenuItem.DropDownItems.Cast <ToolStripMenuItem> ().Any(item => item.Checked == true);
            };

            try {
                if (InvokeRequired == true)
                {
                    Invoke(checkStateChanged);
                }
                else
                {
                    checkStateChanged();
                }
            } catch (Exception e) {
                Logging.Logg().Exception(e, $"::FormMainTransMC_EventHandlerConnect () - ...", Logging.INDEX_MESSAGE.NOT_SET);
            }
        }