コード例 #1
0
        void HandleSchedules(GXAmiSchedule schedule, GXEventsItem e)
        {
            ulong mask = (ulong)((int)e.Target << 16 | (int)e.Action);

            //Find is anyone interested from this data collector event.
            foreach (GXSession it in Sessions)
            {
                foreach (GXEvent e1 in it.NotifyClients)
                {
                    if (e1.UserID != 0 && (mask & e1.Mask) != 0)
                    {
                        //Notify only super admin or if user has access to this data collector.
                        if (e1.SuperAdmin)//TODO: || GXDeviceGroupService.CanUserAccessDeviceGroup(Db, e1.UserID, group.Id))
                        {
                            e1.Rows.Add(e);
                            it.Received.Set();
                        }
                    }

                    /* TODO:
                     * //Notify DC that Schedule is added.
                     * else if (e.Action == Actions.Edit && e.Target == ActionTargets.Trace &&
                     *  e1.DataCollectorGuid == schedule.datac)
                     * {
                     * e1.Rows.Add(e);
                     * it.Received.Set();
                     * }
                     * */
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Selete selected schedules.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXScheduleDeleteResponse Post(GXScheduleDeleteRequest request)
        {
            IAuthSession s  = this.GetSession(false);
            int          id = Convert.ToInt32(s.Id);

            if (id == 0)
            {
                throw new ArgumentException("Remove failed. Invalid session ID.");
            }
            if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s))
            {
                throw new ArgumentException("Remove not allowed.");
            }
            List <GXEventsItem> events = new List <GXEventsItem>();
            bool superAdmin            = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s);

            lock (Db)
            {
                foreach (ulong it in request.Schedules)
                {
                    if (it == 0)
                    {
                        throw new ArgumentException("ID is required");
                    }

                    //Only super admin or creator can remove schedule.
                    //TODO:
#if !SS4
                    GXAmiSchedule schedule = Db.QueryById <GXAmiSchedule>(it);
#else
                    GXAmiSchedule schedule = Db.SingleById <GXAmiSchedule>(it);
#endif
                    if (request.Permanently)
                    {
                        Db.DeleteById <GXAmiSchedule>(it);
                    }
                    else
                    {
                        schedule.Removed = DateTime.Now.ToUniversalTime();
                        Db.UpdateOnly(schedule, p => p.Removed, p => p.Id == it);
                    }
                    events.Add(new GXEventsItem(ActionTargets.Schedule, Actions.Remove, schedule));
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, id, events);
            return(new GXScheduleDeleteResponse());
        }
コード例 #3
0
        /// <summary>
        /// Schedule is added or edit.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public GXScheduleUpdateResponse Post(GXScheduleUpdateRequest request)
        {
            List <GXEventsItem> events = new List <GXEventsItem>();
            IAuthSession        s      = this.GetSession(false);
            long adderId = Convert.ToInt64(s.Id);

            lock (Db)
            {
                using (var trans = Db.OpenTransaction(IsolationLevel.ReadCommitted))
                {
                    //Add new schedules.
                    foreach (GXAmiSchedule it in request.Schedules)
                    {
                        if (string.IsNullOrEmpty(it.Name))
                        {
                            throw new ArgumentException("Invalid name.");
                        }
                        //If new schedule.
                        if (it.Id == 0)
                        {
                            //All date times are saved to DB in universal time.
                            it.Added = DateTime.Now.ToUniversalTime();
                            if (it.TransactionStartTime != null)
                            {
                                it.TransactionStartTime = it.TransactionStartTime.Value.ToUniversalTime();
                            }
                            if (it.TransactionEndTime != null)
                            {
                                it.TransactionEndTime = it.TransactionEndTime.Value.ToUniversalTime();
                            }
                            if (it.ScheduleStartTime != null)
                            {
                                it.ScheduleStartTime = it.ScheduleStartTime.Value.ToUniversalTime();
                            }
                            if (it.ScheduleEndTime != null)
                            {
                                it.ScheduleEndTime = it.ScheduleEndTime.Value.ToUniversalTime();
                            }
                            if (it.NextRunTine != null)
                            {
                                it.NextRunTine = it.NextRunTine.Value.ToUniversalTime();
                            }
                            if (it.LastRunTime != null)
                            {
                                it.LastRunTime = it.LastRunTime.Value.ToUniversalTime();
                            }
                            Db.Insert(it);
#if !SS4
                            it.Id = (ulong)Db.GetLastInsertId();
#else
                            it.Id = Db.LastInsertId();
#endif
                            //Restore date times back to local time.
                            it.Added = it.Added.ToLocalTime();
                            if (it.TransactionStartTime != null)
                            {
                                it.TransactionStartTime = it.TransactionStartTime.Value.ToLocalTime();
                            }
                            if (it.TransactionEndTime != null)
                            {
                                it.TransactionEndTime = it.TransactionEndTime.Value.ToLocalTime();
                            }
                            if (it.ScheduleStartTime != null)
                            {
                                it.ScheduleStartTime = it.ScheduleStartTime.Value.ToLocalTime();
                            }
                            if (it.ScheduleEndTime != null)
                            {
                                it.ScheduleEndTime = it.ScheduleEndTime.Value.ToLocalTime();
                            }
                            if (it.NextRunTine != null)
                            {
                                it.NextRunTine = it.NextRunTine.Value.ToLocalTime();
                            }
                            if (it.LastRunTime != null)
                            {
                                it.LastRunTime = it.LastRunTime.Value.ToLocalTime();
                            }
                            events.Add(new GXEventsItem(ActionTargets.Schedule, Actions.Add, it));
                        }
                        else //Update schedule.
                        {
                            //Get Added time.
#if !SS4
                            GXAmiSchedule orig = Db.GetById <GXAmiSchedule>(it.Id);
#else
                            GXAmiSchedule orig = Db.SingleById <GXAmiSchedule>(it.Id);
#endif
                            it.Added = orig.Added;
                            it.TransactionStartTime = orig.TransactionStartTime;
                            it.TransactionEndTime   = orig.TransactionEndTime;
                            it.ScheduleStartTime    = orig.ScheduleStartTime;
                            it.ScheduleEndTime      = orig.ScheduleEndTime;
                            it.NextRunTine          = orig.NextRunTine;
                            it.LastRunTime          = orig.LastRunTime;
                            Db.Update(it);
                            events.Add(new GXEventsItem(ActionTargets.Schedule, Actions.Edit, it));
                        }
                        //Delete all targets first.
                        Db.Delete <GXAmiScheduleTarget>(q => q.ScheduleId == it.Id);
                        //Add targets.
                        foreach (GXAmiScheduleTarget t in it.Targets)
                        {
                            t.ScheduleId = it.Id;
                            Db.Insert <GXAmiScheduleTarget>(t);
                        }
                    }
                    trans.Commit();
                }
            }
            AppHost host = this.ResolveService <AppHost>();
            host.SetEvents(Db, this.Request, adderId, events);
            return(new GXScheduleUpdateResponse(request.Schedules));
        }
コード例 #4
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="client"></param>
        /// <param name="scheduleItem"></param>
        public GXAmiScheduleEditorDlg(GXAmiClient client, GXAmiSchedule schedule)
        {         
            Client = client;
            InitializeComponent();
            m_ScheduleItem = schedule;
            if (System.Globalization.DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek == DayOfWeek.Sunday)
            {
                Point TmpLoc = new Point(DaySunCb.Location.X, DaySunCb.Location.Y);
                DaySunCb.Location = DayMonCb.Location;
                DayMonCb.Location = DayTueCb.Location;
                DayTueCb.Location = DayWedCb.Location;
                DayWedCb.Location = DayThuCb.Location;
                DayThuCb.Location = DayFriCb.Location;
                DayFriCb.Location = DaySatCb.Location;
                DaySatCb.Location = TmpLoc;
            }
            FillEnums();
            UpdateResouces();

            NameTb.Text = m_ScheduleItem.Name;
            if (m_ScheduleItem.TransactionStartTime != null)
            {
                TransactionStartTimeTp.Value = m_ScheduleItem.TransactionStartTime.Value;
            }
            else
            {
                TransactionStartTimeTp.Checked = false;
            }
            if (m_ScheduleItem.TransactionEndTime != null)
            {
                TransactionEndTimeTp.Value = m_ScheduleItem.TransactionEndTime.Value;
            }
            //Has to be done to uncheck, known issue in .NET
            TransactionEndTimeTp.Checked = true; //Has to be done to uncheck, known issue in .NET
            TransactionEndTimeTp.Checked = m_ScheduleItem.TransactionEndTime != null;

            if (m_ScheduleItem.TransactionEndTime != null)
            {
                TransactionEndTimeTp.Value = m_ScheduleItem.TransactionEndTime.Value;
            }
            if (m_ScheduleItem.TransactionCount == 0)
            {
                TransactionCountCb.Checked = false;
                TransactionCountTb.Text = "";
            }
            else
            {
                TransactionCountCb.Checked = true;
                TransactionCountTb.Text = m_ScheduleItem.TransactionCount.ToString();
            }
            UpdateFrequencyTp.Value = new DateTime(((long)m_ScheduleItem.UpdateInterval) * 10000000 + UpdateFrequencyTp.MinDate.Ticks);
            RepeatModeCb.SelectedItem = ScheduleRepeatToString(m_ScheduleItem.RepeatMode);
            DayOfMonthTb.Text = m_ScheduleItem.DayOfMonth.ToString();
            IntervalTb.Text = m_ScheduleItem.Interval.ToString();
            ActionCb.SelectedItem = ScheduleActionToString(m_ScheduleItem.Action);
            if (m_ScheduleItem.ScheduleStartTime != null)
            {
                ScheduleStartDateTp.Value = m_ScheduleItem.ScheduleStartTime.Value;
            }
            if (m_ScheduleItem.ScheduleEndTime != null)
            {
                ScheduleEndDateTp.Value = m_ScheduleItem.ScheduleEndTime.Value;
            }
            ScheduleEndDateTp.Checked = true; //Has to be done to uncheck, known issue in .NET
            ScheduleEndDateTp.Checked = m_ScheduleItem.ScheduleEndTime != null;
            UpdateTargetCheckTree();

            ErrorWaitTimeTp.Value = new DateTime(ErrorWaitTimeTp.MinDate.Ticks + ((long)m_ScheduleItem.FailWaitTime) * 10000);
            //ErrorWaitTimeTp.Value. = m_ScheduleItem.FailWaitTime/1000.0;
            ErrorTryCountTb.Text = m_ScheduleItem.FailTryCount.ToString();
            ConnectionDelayTimeTp.Value = new DateTime(ConnectionDelayTimeTp.MinDate.Ticks + ((long)m_ScheduleItem.ConnectionDelayTime) * 10000);
            MaxThreadCountTb.Text = m_ScheduleItem.MaxThreadCount.ToString();
            //ConnectionFailWaitTimeTb.Text = Convert.ToString(m_ScheduleItem.ConnectionFailWaitTime/1000.0);
            ConnectionFailWaitTimeTp.Value = new DateTime(ConnectionFailWaitTimeTp.MinDate.Ticks + ((long)m_ScheduleItem.ConnectionFailWaitTime) * 10000);
            ConnectionFailTryCountTb.Text = m_ScheduleItem.ConnectionFailTryCount.ToString();

            if (m_ScheduleItem.DayOfWeeks == null)
            {
                DayMonCb.Checked = DayTueCb.Checked = DayWedCb.Checked = DayThuCb.Checked = DayFriCb.Checked = DaySatCb.Checked = DaySunCb.Checked = false;
            }
            else
            {
                System.Collections.Generic.List<DayOfWeek> list = new System.Collections.Generic.List<DayOfWeek>();
                list.AddRange(m_ScheduleItem.DayOfWeeks);
                DayMonCb.Checked = list.Contains(DayOfWeek.Monday);
                DayTueCb.Checked = list.Contains(DayOfWeek.Tuesday);
                DayWedCb.Checked = list.Contains(DayOfWeek.Wednesday);
                DayThuCb.Checked = list.Contains(DayOfWeek.Thursday);
                DayFriCb.Checked = list.Contains(DayOfWeek.Friday);
                DaySatCb.Checked = list.Contains(DayOfWeek.Saturday);
                DaySunCb.Checked = list.Contains(DayOfWeek.Sunday);
            }
            OKBtn.Enabled = (m_ScheduleItem.Status & ScheduleState.Run) == 0;
        }
コード例 #5
0
		public GXScheduleResponse(GXAmiSchedule[] schedules)
		{
			this.Schedules = schedules;
		}
コード例 #6
0
ファイル: GXAmi.cs プロジェクト: giapdangle/Gurux.DeviceSuite
 void Client_OnSchedulesAdded(object sender, GXAmiSchedule[] schedules)
 {
     if (this.InvokeRequired)
     {
         this.BeginInvoke(new SchedulesAddedEventHandler(OnSchedulesAdded), sender, schedules);
     }
     else
     {
         OnSchedulesAdded(sender, schedules);
     }
 }
コード例 #7
0
		private bool SetScheduleTarget(GXAmiSchedule scheduleItem, TreeNode deviceListNode)
		{
            List<GXAmiScheduleTarget> targets = new List<GXAmiScheduleTarget>();
            foreach (TreeNode it in deviceListNode.Nodes)
            {
                if (it.Checked)
                {
                    targets.Add(new GXAmiScheduleTarget(scheduleItem, TargetType.Device, (it.Tag as GuruxAMI.Common.GXAmiDevice).Id));
                }
            }
            scheduleItem.Targets = targets.ToArray();
            return targets.Count != 0;
		}
コード例 #8
0
ファイル: GXAmi.cs プロジェクト: giapdangle/Gurux.DeviceSuite
        void OnSchedulesUpdated(object sender, GXAmiSchedule[] schedules)
        {
            try
            {
                lock (ScheduleToListViewItem)
                {
                    foreach (GXAmiSchedule it in schedules)
                    {
                        ListViewItem li = ScheduleToListViewItem[it.Id];                        
                        li.Tag = it;

                        li.SubItems[0].Text = it.Name;
                        li.SubItems[1].Text = GXAmiScheduleEditorDlg.ScheduleRepeatToString(it.RepeatMode);
                        //Next run time
                        if (it.NextRunTine > DateTime.MinValue)
                        {
                            li.SubItems[2].Text = it.NextRunTine.ToString();
                        }
                        else
                        {
                            li.SubItems[2].Text = string.Empty;
                        }
                        //Last run time
                        if (it.LastRunTime > DateTime.MinValue)
                        {
                            li.SubItems[3].Text = it.LastRunTime.ToString();
                        }
                        else
                        {
                            li.SubItems[3].Text = string.Empty;
                        }
                        //Progress                
                        li.SubItems[3].Text = string.Empty;
                    }
                }
            }
            catch (Exception ex)
            {
                GXCommon.ShowError(this.ParentComponent, Gurux.DeviceSuite.Properties.Resources.GuruxDeviceSuiteTxt, ex);
            }
        }
コード例 #9
0
ファイル: GXAmi.cs プロジェクト: giapdangle/Gurux.DeviceSuite
 void OnSchedulesAdded(object sender, GXAmiSchedule[] schedules)
 {
     try
     {
         lock (ScheduleToListViewItem)
         {
             foreach (GXAmiSchedule it in schedules)
             {
                 AddScheduleItem(it);
             }
         }
     }
     catch (Exception ex)
     {
         GXCommon.ShowError(this.ParentComponent, Gurux.DeviceSuite.Properties.Resources.GuruxDeviceSuiteTxt, ex);
     }
 }
コード例 #10
0
ファイル: GXAmi.cs プロジェクト: giapdangle/Gurux.DeviceSuite
 /// <summary>
 /// Add new Schedule.
 /// </summary>
 public void NewSchedule()
 {
     try
     {
         GXAmiSchedule schedule = new GXAmiSchedule();
         schedule.ScheduleStartTime = DateTime.Now;
         GXAmiScheduleEditorDlg dlg = new GXAmiScheduleEditorDlg(Client, schedule);
         dlg.ShowDialog(ParentComponent);                
     }
     catch (Exception ex)
     {
         GXCommon.ShowError(this.ParentComponent, Gurux.DeviceSuite.Properties.Resources.GuruxDeviceSuiteTxt, ex);
     }
 }
コード例 #11
0
ファイル: GXAmi.cs プロジェクト: giapdangle/Gurux.DeviceSuite
 void OnSchedulesStateChanged(object sender, GXAmiSchedule[] schedules)
 {
     try
     {
         lock (ScheduleToListViewItem)
         {
             foreach (GXAmiSchedule it in schedules)
             {
                 ListViewItem li = ScheduleToListViewItem[it.Id];
                 UpdateScheduleImage(li, it.Status);
             }
         }
     }
     catch (Exception ex)
     {
         GXCommon.ShowError(this.ParentComponent, Gurux.DeviceSuite.Properties.Resources.GuruxDeviceSuiteTxt, ex);
     }
 }
コード例 #12
0
ファイル: GXAmi.cs プロジェクト: giapdangle/Gurux.DeviceSuite
 private void AddScheduleItem(GXAmiSchedule item)
 {
     ListViewItem it = new ListViewItem(item.Name);
     it.SubItems.Add(GXAmiScheduleEditorDlg.ScheduleRepeatToString(item.RepeatMode));
     //Next run time
     if (item.NextRunTine > DateTime.MinValue)
     {
         it.SubItems.Add(item.NextRunTine.ToString());
     }
     else
     {
         it.SubItems.Add(string.Empty);
     }
     //Last run time
     if (item.LastRunTime > DateTime.MinValue)
     {
         it.SubItems.Add(item.LastRunTime.ToString());
     }
     else
     {
         it.SubItems.Add(string.Empty);
     }
     //Progress                
     it.SubItems.Add(string.Empty);
     it.Tag = item;
     UpdateScheduleImage(it, item.Status);
     Schedules.Items.Add(it);
     ScheduleToListViewItem[item.Id] = it;            
 }              
コード例 #13
0
 /// <summary>
 /// Schedule is started or stopped.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="schedules"></param>
 void Client_OnSchedulesStateChanged(object sender, GXAmiSchedule[] schedules)
 {
     //Update schedule state.
     lock (Schedules)
     {
         GXAmiDevice device = new GXAmiDevice();
         foreach (GXAmiSchedule it in schedules)
         {
             if (Schedules[it.Id].Status != it.Status)
             {
                 Schedules[it.Id].Status = it.Status;
                 if (it.Status == ScheduleState.Run)
                 {
                     foreach (GXAmiScheduleTarget t in Schedules[it.Id].Targets)
                     {
                         if (t.TargetType == TargetType.Device)
                         {               
                             device.Id = t.TargetID;
                             Client.Read(device);
                         }
                     }
                 }
                 else if (it.Status == ScheduleState.Start)
                 {
                     System.Collections.Generic.IDictionary<string, object> data = new Dictionary<string, object>();
                     data.Add(new KeyValuePair<string, object>("Client", Client));
                     //Target is added by ID because devices can be added or removed from it.
                     data.Add(new KeyValuePair<string, object>("Target", it.Id));
                     JobKey id = new JobKey(it.Name + it.Id.ToString(), it.Name + it.Id.ToString());
                     IJobDetail job = JobBuilder.Create(typeof(GXScheduleJob)).WithIdentity(new JobKey(it.Name + it.Id.ToString(), it.Name + it.Id.ToString()))
                         .WithIdentity(id)
                         .SetJobData(new JobDataMap(data))
                         .Build();
                     ITrigger t = GetTrigger(it);
                     m_sched.ScheduleJob(job, t);
                 }
                 else if (it.Status == ScheduleState.End)
                 {
                     if ((it.Status & ScheduleState.Run) != 0)
                     {
                         it.Status = ScheduleState.None;
                         m_sched.DeleteJob(new JobKey(it.Name + it.Id.ToString(), it.Name + it.Id.ToString()));
                     }
                 }
             }
         }
     }
     if (m_ScheduleStateChanged != null)
     {
         m_ScheduleStateChanged(sender, schedules);
     }
 }
コード例 #14
0
        /// <summary>
        /// 
        /// </summary>
        /// <remarks>
        /// see more: http://www.cronmaker.com/
        /// </remarks>
        /// <returns></returns>
        internal ITrigger GetTrigger(GXAmiSchedule schedule)
        {
            string format = null;
            DateTime end;
            ITrigger trigger = null;
            if (schedule.RepeatMode == ScheduleRepeat.Once)
            {
                trigger = (ITrigger)TriggerBuilder.Create()
                    .StartNow()
                    .EndAt(DateTime.Now)
                    .Build();
            }
            else if (schedule.RepeatMode == ScheduleRepeat.Second)
            {
                format = "0/" + schedule.Interval.ToString() + " * * * * ?";
            }
            else if (schedule.RepeatMode == ScheduleRepeat.Minute)
            {
                format = "0 0/" + schedule.Interval.ToString() + " * * * ?";
            }
            else if (schedule.RepeatMode == ScheduleRepeat.Hour)
            {
                format = "0 0 0/" + schedule.Interval.ToString() + " * * ?";
            }
            else if (schedule.RepeatMode == ScheduleRepeat.Day)
            {
                format = string.Format("{3} {2} {1} 1/{0} * ?",
                            schedule.Interval,
                            schedule.TransactionStartTime.Value.Hour,
                            schedule.TransactionStartTime.Value.Minute,
                            schedule.TransactionStartTime.Value.Second);
            }
            else if (schedule.RepeatMode == ScheduleRepeat.Week)
            {
                end = DateTime.MaxValue;
                if (schedule.ScheduleEndTime != null)
                {
                    end = new DateTime(schedule.ScheduleEndTime.Value.Year, schedule.ScheduleEndTime.Value.Month,
                        schedule.ScheduleEndTime.Value.Day, schedule.TransactionEndTime.Value.Hour, 
                        schedule.TransactionEndTime.Value.Minute, schedule.TransactionEndTime.Value.Second);
                }
                List<string> days = new List<string>();
                foreach (DayOfWeek it in schedule.DayOfWeeks)
                {
                    days.Add(it.ToString().Substring(0, 3).ToUpper());
                }
                string tmp = string.Format("{3} {2} {1} ? * {0}, *",
                                            string.Join(",", days.ToArray()),
                                            schedule.TransactionStartTime.Value.Hour,
                                            schedule.TransactionStartTime.Value.Minute,
                                            schedule.TransactionStartTime.Value.Second);
                IScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(tmp);
                trigger = (ITrigger)TriggerBuilder.Create()
                .WithIdentity(schedule.Name)
                .WithSchedule(scheduleBuilder)
                .Build();
            }
            else if (schedule.RepeatMode == ScheduleRepeat.Month)
            {
                string tmp = string.Format("0 {2} {1} {0} 1/{3} ? *",
                                            schedule.DayOfMonth,
                                            schedule.TransactionStartTime.Value.Hour,
                                            schedule.TransactionStartTime.Value.Minute,
                                            schedule.Interval);

                IScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(tmp);
                trigger = (ITrigger)TriggerBuilder.Create()
                .WithIdentity(schedule.Name)
                .WithSchedule(scheduleBuilder)
                .Build();
            }
            if (trigger == null)
            {
                end = DateTime.MaxValue;
                if (schedule.ScheduleEndTime != null)
                {
                    end = new DateTime(schedule.ScheduleEndTime.Value.Year, schedule.ScheduleEndTime.Value.Month,
                        schedule.ScheduleEndTime.Value.Day, schedule.TransactionEndTime.Value.Hour,
                        schedule.TransactionEndTime.Value.Minute, schedule.TransactionEndTime.Value.Second);
                }
                IScheduleBuilder scheduleBuilder = CronScheduleBuilder.CronSchedule(format);//.InTimeZone(TimeZoneInfo.Local);
                trigger = (ITrigger)TriggerBuilder.Create()
                .WithIdentity(schedule.Name)
                .WithSchedule(scheduleBuilder)
                .Build();
            }
            return trigger;
        }
コード例 #15
0
 /// <summary>
 /// New schedule item is added.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="schedules"></param>
 void Client_OnSchedulesAdded(object sender, GXAmiSchedule[] schedules)
 {
     lock (Schedules)
     {
         foreach (GXAmiSchedule it in schedules)
         {
             Schedules.Add(it.Id, it);
         }
     }
     if (m_ScheduleAdded != null)
     {
         m_ScheduleAdded(sender, schedules);
     }
 }
コード例 #16
0
 /// <summary>
 /// Schedule item is updated.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="schedules"></param>
 void Client_OnSchedulesUpdated(object sender, GXAmiSchedule[] schedules)
 {
     lock (Schedules)
     {
         foreach (GXAmiSchedule it in schedules)
         {
             Schedules[it.Id] = it;
         }
     }
     if (m_SchedulesUpdated != null)
     {
         m_SchedulesUpdated(sender, schedules);
     }
 }