public void OnMessageEvent(ServerEventMessage msg) { if (msg.Channel == typeof(JarsDefaultAppointment).Name) { // throw new NotImplementedException(); ServerEventMessageData msgData = msg.Json.FromJson <ServerEventMessageData>(); switch (msg.Selector) { case SelectorTypes.store: List <JarsDefaultAppointment> appts = msgData.jsonDataString.ConvertTo <List <JarsDefaultAppointment> >(); foreach (var item in appts) { //first see if the appt is already in the list, if it is then update it, otherwise add it. var findItm = ((List <JarsDefaultAppointment>)standardAppointmentDefaultBindingSource.List).FirstOrDefault(x => x.Id == item.Id); if (findItm != null) { findItm.PopulateWith(item); } else { standardAppointmentDefaultBindingSource.List.Add(item.ConvertTo <JarsDefaultAppointment>()); } } this.BeginInvokeIfRequired(c => { c.Refresh(); }); break; case SelectorTypes.delete: List <int> ids = msgData.jsonDataString.ConvertTo <List <int> >(); var findList = ((List <JarsDefaultAppointment>)standardAppointmentDefaultBindingSource.List).Where(j => ids.Contains(j.Id));//.CreateCopy(); this.BeginInvokeIfRequired(c => { int[] idx = new int[findList.Count()]; int x = 0; foreach (var item in findList) { idx[x] = standardAppointmentDefaultBindingSource.IndexOf(item); x++; } for (int i = 0; i < idx.Length; i++) { standardAppointmentDefaultBindingSource.RemoveAt(idx[i]); } c.Refresh(); }); break; default: break; } } }
public bool OnDeleteCommandReceived(Control control, ServerEventMessage seMsg) { try { if (control is SchedulerControl schedulerControl) { //EntityIdComparer idComparer = new EntityIdComparer(); ServerEventMessageData msgData = seMsg.Json.FromJson <ServerEventMessageData>(); // if (msgJson.FromClientGuid == Context.ClientInstanceGuid) if (msgData.From == Context.LoggedInUser.UserName) { return(true); } List <int> ids = msgData.jsonDataString.FromJson <List <int> >(); IList <Appointment> appts = schedulerControl.DataStorage.Appointments.Items .Where(a => a.CustomFields["ENTITY"] is StandardAppointment && ids.Contains((a.CustomFields["ENTITY"] as StandardAppointment).Id)).ToList();//, idComparer)); if (appts.Any()) { schedulerControl.BeginInvokeIfRequired(sc => { AllowServerPost = false; foreach (Appointment appt in appts) { appt.CustomFields["STATE"] = "DELETED"; sc.DataStorage.Appointments.Remove(appt); } sc.Refresh(); AllowServerPost = true; }); } } } catch (Exception ex) { Logger.Error(ex.Message, ex); #if DEBUG throw ex; #endif } return(true); }
public bool OnStoreCommandReceived(Control control, ServerEventMessage seMsg) { if (control is SchedulerControl schedulerControl) { try { ServerEventMessageData msgJson = seMsg.Json.FromJson <ServerEventMessageData>(); // if (msgJson.FromClientGuid == Context.ClientInstanceGuid) if (msgJson.From == Context.LoggedInUser.UserName) { return(true); } IList <StandardAppointment> sAppts = msgJson.jsonDataString.FromJson <List <StandardAppointment> >(); schedulerControl.BeginUpdate(); if (sAppts.Any()) { foreach (StandardAppointment sAppt in sAppts) { Appointment appt = null; AppointmentType apptType = (AppointmentType)Enum.Parse(typeof(AppointmentType), sAppt.ApptTypeCode); if (new[] { AppointmentType.ChangedOccurrence, AppointmentType.DeletedOccurrence, AppointmentType.Occurrence }.Contains(apptType)) { //get the main pattern appt appt = schedulerControl.DataStorage.Appointments.Items .FirstOrDefault(a => a.CustomFields["ENTITY"] is StandardAppointment && a.Type == AppointmentType.Pattern && a.RecurrenceInfo.Id.ToString() == sAppt.RecurrenceId.ToString()); } else { appt = schedulerControl.DataStorage.Appointments.Items .FirstOrDefault(a => a.CustomFields["ENTITY"] is StandardAppointment && (a.CustomFields["ENTITY"] as StandardAppointment).Id == sAppt.Id); } //this appointment is most likely received from a server event so no need to post it back and forth. AllowServerPost = false; schedulerControl.InvokeIfRequired(sc => { appt = CreateOrUpdateAppointmentFromEntity(schedulerControl, sAppt, appt); }); AllowServerPost = true;//enable server posting again. } } } catch (Exception ex) { schedulerControl.InvokeIfRequired(sc => { sc.EndUpdate(); sc.Refresh(); }); Logger.Error(ex.Message, ex); #if DEBUG throw ex; #endif } finally { AllowServerPost = true;//enable server posting again. //schedulerControl.EndUpdate(); schedulerControl.InvokeIfRequired(sc => { sc.EndUpdate(); sc.Refresh(); }); } } return(true); }