Changeset 2101
- Timestamp:
- 06/25/09 14:18:47 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Hive.Client.Console/3.2/HiveClientConsole.cs
r2062 r2101 38 38 { 39 39 40 #region Delegates 41 42 //delegate to write text in the textbox from another process 43 public delegate void AppendTextDelegate(String message); 44 45 //delegate to remove text in the textbox from another process 46 public delegate void RemoveTextDelegate(int newLength, int maxChars); 47 48 //delegate fired, if a dialog is being closed 49 public delegate void OnDialogClosedDelegate(RecurrentEvent e); 50 51 #endregion 52 53 public partial class HiveClientConsole : Form 54 { 55 56 #region Declarations 57 58 private const string ENDPOINTADRESS = "net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator"; 59 60 //the logfilereader 61 private LogFileReader logFileReader; 62 63 //communication with the client 64 private ClientConsoleCommunicatorClient clientCommunicator; 65 66 //the timer for refreshing the gui 67 private System.Windows.Forms.Timer refreshTimer; 68 69 //the list of appointments in the calender 70 [XmlArray("Appointments")] 71 [XmlArrayItem("Appointment", typeof(Appointment))] 72 public List<Appointment> onlineTimes = new List<Appointment>(); 73 74 public OnDialogClosedDelegate dialogClosedDelegate; 75 76 #endregion 77 78 #region Constructor 79 80 public HiveClientConsole() 81 { 82 InitializeComponent(); 83 InitTimer(); 84 ConnectToClient(); 85 RefreshGui(); 86 InitCalender(); 87 InitLogFileReader(); 88 } 89 90 #endregion 91 92 #region Methods 93 94 #region Client connection 95 96 private void ConnectToClient() 97 { 98 try 99 { 100 clientCommunicator = new ClientConsoleCommunicatorClient(WcfSettings.GetBinding(), new EndpointAddress(ENDPOINTADRESS)); 101 clientCommunicator.GetStatusInfosCompleted += new EventHandler<GetStatusInfosCompletedEventArgs>(clientCommunicator_GetStatusInfosCompleted); 102 clientCommunicator.GetCurrentConnectionCompleted += new EventHandler<GetCurrentConnectionCompletedEventArgs>(clientCommunicator_GetCurrentConnectionCompleted); 103 clientCommunicator.GetUptimeCalendarCompleted += new EventHandler<GetUptimeCalendarCompletedEventArgs>(clientCommunicator_GetUptimeCalendarCompleted); 104 clientCommunicator.SetUptimeCalendarCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(clientCommunicator_SetUptimeCalendarCompleted); 105 } 106 catch (Exception) 107 { 108 refreshTimer.Stop(); 109 DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running!", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 110 if (res == DialogResult.OK) 111 this.Close(); 112 } 113 } 114 115 #endregion 116 117 #region Logging 118 119 private void InitLogFileReader() 120 { 121 logFileReader = new LogFileReader(Environment.CurrentDirectory + @"/Hive.log"); 122 logFileReader.MoreData += new LogFileReader.MoreDataHandler(logFileReader_MoreData); 123 logFileReader.Start(); 124 } 125 126 private void logFileReader_MoreData(object sender, string newData) 127 { 128 int maxChars = txtLog.MaxLength; 129 if (newData.Length > maxChars) 130 { 131 newData = newData.Remove(0, newData.Length - maxChars); 132 } 133 int newLength = this.txtLog.Text.Length + newData.Length; 134 if (newLength > maxChars) 135 { 136 RemoveText(newLength, maxChars); 137 } 138 AppendText(newData); 139 } 140 141 private void RemoveText(int newLength, int maxChars) 142 { 143 if (this.txtLog.InvokeRequired) 144 { 145 this.txtLog.Invoke(new 146 RemoveTextDelegate(RemoveText), new object[] { newLength, maxChars }); 147 } 40 #region Delegates 41 42 //delegate to write text in the textbox from another process 43 public delegate void AppendTextDelegate(String message); 44 45 //delegate to remove text in the textbox from another process 46 public delegate void RemoveTextDelegate(int newLength, int maxChars); 47 48 //delegate fired, if a dialog is being closed 49 public delegate void OnDialogClosedDelegate(RecurrentEvent e); 50 51 #endregion 52 53 public partial class HiveClientConsole : Form 54 { 55 56 #region Declarations 57 58 private const string ENDPOINTADRESS = "net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator"; 59 60 private static bool isfired = false; 61 //the logfilereader 62 private LogFileReader logFileReader; 63 64 //communication with the client 65 private ClientConsoleCommunicatorClient clientCommunicator; 66 67 //the timer for refreshing the gui 68 private System.Windows.Forms.Timer refreshTimer; 69 70 //the list of appointments in the calender 71 [XmlArray("Appointments")] 72 [XmlArrayItem("Appointment", typeof(Appointment))] 73 public List<Appointment> onlineTimes = new List<Appointment>(); 74 75 public OnDialogClosedDelegate dialogClosedDelegate; 76 77 #endregion 78 79 #region Constructor 80 81 public HiveClientConsole() 82 { 83 InitializeComponent(); 84 InitTimer(); 85 ConnectToClient(); 86 RefreshGui(); 87 InitCalender(); 88 InitLogFileReader(); 89 } 90 91 #endregion 92 93 #region Methods 94 95 #region Client connection 96 97 private void ConnectToClient() 98 { 99 try 100 { 101 clientCommunicator = new ClientConsoleCommunicatorClient(WcfSettings.GetBinding(), new EndpointAddress(ENDPOINTADRESS)); 102 clientCommunicator.GetStatusInfosCompleted += new EventHandler<GetStatusInfosCompletedEventArgs>(clientCommunicator_GetStatusInfosCompleted); 103 clientCommunicator.GetCurrentConnectionCompleted += new EventHandler<GetCurrentConnectionCompletedEventArgs>(clientCommunicator_GetCurrentConnectionCompleted); 104 clientCommunicator.GetUptimeCalendarCompleted += new EventHandler<GetUptimeCalendarCompletedEventArgs>(clientCommunicator_GetUptimeCalendarCompleted); 105 clientCommunicator.SetUptimeCalendarCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(clientCommunicator_SetUptimeCalendarCompleted); 106 } 107 catch (Exception ex) 108 { 109 ManageFatalException("Connection Error, check if Hive Client is running!", "Connection Error", ex); 110 } 111 } 112 113 #endregion 114 115 #region Logging 116 117 private void InitLogFileReader() 118 { 119 logFileReader = new LogFileReader(Environment.CurrentDirectory + @"/Hive.log"); 120 logFileReader.MoreData += new LogFileReader.MoreDataHandler(logFileReader_MoreData); 121 logFileReader.Start(); 122 } 123 124 private void logFileReader_MoreData(object sender, string newData) 125 { 126 int maxChars = txtLog.MaxLength; 127 if (newData.Length > maxChars) 128 { 129 newData = newData.Remove(0, newData.Length - maxChars); 130 } 131 int newLength = this.txtLog.Text.Length + newData.Length; 132 if (newLength > maxChars) 133 { 134 RemoveText(newLength, maxChars); 135 } 136 AppendText(newData); 137 } 138 139 private void RemoveText(int newLength, int maxChars) 140 { 141 if (this.txtLog.InvokeRequired) 142 { 143 this.txtLog.Invoke(new 144 RemoveTextDelegate(RemoveText), new object[] { newLength, maxChars }); 145 } 146 else 147 { 148 this.txtLog.Text = this.txtLog.Text.Remove(0, newLength - (int)maxChars); 149 } 150 } 151 152 private void AppendText(string message) 153 { 154 if (this.txtLog.InvokeRequired) 155 { 156 this.txtLog.Invoke(new 157 AppendTextDelegate(AppendText), new object[] { message }); 158 } 159 else 160 { 161 this.txtLog.AppendText(message); 162 } 163 } 164 165 #endregion 166 167 #region Gui Refresh 168 169 private void InitTimer() 170 { 171 refreshTimer = new System.Windows.Forms.Timer(); 172 refreshTimer.Interval = 1000; 173 refreshTimer.Tick += new EventHandler(refreshTimer_Tick); 174 refreshTimer.Start(); 175 } 176 177 private void RefreshGui() 178 { 179 try 180 { 181 clientCommunicator.GetStatusInfosAsync(); 182 } 183 catch (Exception ex) 184 { 185 ManageFatalException("Connection Error, check if Hive Client is running!", "Connection Error", ex); 186 } 187 } 188 189 private void UpdateGraph(JobStatus[] jobs) 190 { 191 ZedGraphControl zgc = new ZedGraphControl(); 192 GraphPane myPane = zgc.GraphPane; 193 myPane.GraphObjList.Clear(); 194 195 myPane.Title.IsVisible = false; // no title 196 myPane.Border.IsVisible = false; // no border 197 myPane.Chart.Border.IsVisible = false; // no border around the chart 198 myPane.XAxis.IsVisible = false; // no x-axis 199 myPane.YAxis.IsVisible = false; // no y-axis 200 myPane.Legend.IsVisible = false; // no legend 201 202 myPane.Fill.Color = this.BackColor; 203 204 myPane.Chart.Fill.Type = FillType.None; 205 myPane.Fill.Type = FillType.Solid; 206 207 double allProgress = 0; 208 double done = 0; 209 210 if (jobs.Length == 0) 211 { 212 myPane.AddPieSlice(100, Color.Green, 0.1, ""); 213 } 214 else 215 { 216 for (int i = 0; i < jobs.Length; i++) 217 { 218 allProgress += jobs[i].Progress; 219 } 220 221 done = allProgress / jobs.Length; 222 223 myPane.AddPieSlice(done, Color.Green, 0, ""); 224 myPane.AddPieSlice(1 - done, Color.Red, 0, ""); 225 } 226 //Hides the slice labels 227 PieItem.Default.LabelType = PieLabelType.None; 228 229 myPane.AxisChange(); 230 231 pbGraph.Image = zgc.GetImage(); 232 } 233 234 #region Events 235 236 private void refreshTimer_Tick(object sender, EventArgs e) 237 { 238 RefreshGui(); 239 } 240 241 #endregion 242 243 244 #endregion 245 246 #region Calendar stuff 247 248 private void InitCalender() 249 { 250 dvOnline.StartDate = DateTime.Now; 251 dvOnline.OnNewAppointment += new EventHandler<NewAppointmentEventArgs>(dvOnline_OnNewAppointment); 252 dvOnline.OnResolveAppointments += new EventHandler<ResolveAppointmentsEventArgs>(dvOnline_OnResolveAppointments); 253 254 //get calender from client 255 clientCommunicator.GetUptimeCalendarAsync(); 256 } 257 258 private bool CreateAppointment() 259 { 260 DateTime from, to; 261 262 if (!string.IsNullOrEmpty(dtpFrom.Text) && !string.IsNullOrEmpty(dtpTo.Text)) 263 { 264 if (chbade.Checked) 265 { 266 //whole day appointment, only dates are visible 267 if (DateTime.TryParse(dtpFrom.Text, out from) && DateTime.TryParse(dtpTo.Text, out to) && from <= to) 268 onlineTimes.Add(CreateAppointment(from, to.AddDays(1), true)); 269 else 270 MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 271 } 272 else if (!string.IsNullOrEmpty(txttimeFrom.Text) && !string.IsNullOrEmpty(txttimeTo.Text)) 273 { 274 //Timeframe appointment 275 if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txttimeTo.Text, out to) && from < to) 276 { 277 if (from.Date == to.Date) 278 onlineTimes.Add(CreateAppointment(from, to, false)); 148 279 else 149 280 { 150 this.txtLog.Text = this.txtLog.Text.Remove(0, newLength - (int)maxChars); 281 //more than 1 day selected 282 while (from.Date != to.Date) 283 { 284 onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false)); 285 from = from.AddDays(1); 286 } 287 onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false)); 151 288 } 152 } 153 154 private void AppendText(string message) 155 { 156 if (this.txtLog.InvokeRequired) 157 { 158 this.txtLog.Invoke(new 159 AppendTextDelegate(AppendText), new object[] { message }); 160 } 161 else 162 { 163 this.txtLog.AppendText(message); 164 } 165 } 166 167 #endregion 168 169 #region Gui Refresh 170 171 private void InitTimer() 172 { 173 refreshTimer = new System.Windows.Forms.Timer(); 174 refreshTimer.Interval = 1000; 175 refreshTimer.Tick += new EventHandler(refreshTimer_Tick); 176 refreshTimer.Start(); 177 } 178 179 private void RefreshGui() 180 { 181 try 182 { 183 clientCommunicator.GetStatusInfosAsync(); 184 } 185 catch (Exception ex) 186 { 187 refreshTimer.Stop(); 188 DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running!" + ex.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 189 if (res == DialogResult.OK) 190 this.Close(); 191 } 192 } 193 194 private void UpdateGraph(JobStatus[] jobs) 195 { 196 ZedGraphControl zgc = new ZedGraphControl(); 197 GraphPane myPane = zgc.GraphPane; 198 myPane.GraphObjList.Clear(); 199 200 myPane.Title.IsVisible = false; // no title 201 myPane.Border.IsVisible = false; // no border 202 myPane.Chart.Border.IsVisible = false; // no border around the chart 203 myPane.XAxis.IsVisible = false; // no x-axis 204 myPane.YAxis.IsVisible = false; // no y-axis 205 myPane.Legend.IsVisible = false; // no legend 206 207 myPane.Fill.Color = this.BackColor; 208 209 myPane.Chart.Fill.Type = FillType.None; 210 myPane.Fill.Type = FillType.Solid; 211 212 double allProgress = 0; 213 double done = 0; 214 215 if (jobs.Length == 0) 216 { 217 myPane.AddPieSlice(100, Color.Green, 0.1, ""); 218 } 219 else 220 { 221 for (int i = 0; i < jobs.Length; i++) 222 { 223 allProgress += jobs[i].Progress; 224 } 225 226 done = allProgress / jobs.Length; 227 228 myPane.AddPieSlice(done, Color.Green, 0, ""); 229 myPane.AddPieSlice(1 - done, Color.Red, 0, ""); 230 } 231 //Hides the slice labels 232 PieItem.Default.LabelType = PieLabelType.None; 233 234 myPane.AxisChange(); 235 236 pbGraph.Image = zgc.GetImage(); 237 } 238 239 #region Events 240 241 private void refreshTimer_Tick(object sender, EventArgs e) 242 { 243 RefreshGui(); 244 } 245 246 #endregion 247 248 249 #endregion 250 251 #region Calendar stuff 252 253 private void InitCalender() 254 { 255 dvOnline.StartDate = DateTime.Now; 256 dvOnline.OnNewAppointment += new EventHandler<NewAppointmentEventArgs>(dvOnline_OnNewAppointment); 257 dvOnline.OnResolveAppointments += new EventHandler<ResolveAppointmentsEventArgs>(dvOnline_OnResolveAppointments); 258 259 //get calender from client 260 clientCommunicator.GetUptimeCalendarAsync(); 261 } 262 263 private bool CreateAppointment() 264 { 265 DateTime from, to; 266 267 if (!string.IsNullOrEmpty(dtpFrom.Text) && !string.IsNullOrEmpty(dtpTo.Text)) 268 { 269 if (chbade.Checked) 270 { 271 //whole day appointment, only dates are visible 272 if (DateTime.TryParse(dtpFrom.Text, out from) && DateTime.TryParse(dtpTo.Text, out to) && from <= to) 273 onlineTimes.Add(CreateAppointment(from, to.AddDays(1), true)); 274 else 275 MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 276 } 277 else if (!string.IsNullOrEmpty(txttimeFrom.Text) && !string.IsNullOrEmpty(txttimeTo.Text)) 278 { 279 //Timeframe appointment 280 if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txttimeTo.Text, out to) && from < to) 281 { 282 if (from.Date == to.Date) 283 onlineTimes.Add(CreateAppointment(from, to, false)); 284 else 285 { 286 //more than 1 day selected 287 while (from.Date != to.Date) 288 { 289 onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false)); 290 from = from.AddDays(1); 291 } 292 onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false)); 293 } 294 } 295 else 296 MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 297 } 298 dvOnline.Invalidate(); 299 return true; 300 } 301 else 302 { 303 MessageBox.Show("Error in create appointment, please fill out all textboxes!", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 304 return false; 305 } 306 } 307 308 private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay) 309 { 310 Appointment App = new Appointment(); 311 App.StartDate = startDate; 312 App.EndDate = endDate; 313 App.AllDayEvent = allDay; 314 App.BorderColor = Color.Red; 315 App.Locked = true; 316 App.Subject = "Online"; 317 App.Recurring = false; 318 return App; 319 } 320 321 private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay, bool recurring, Guid recurringId) 322 { 323 Appointment App = new Appointment(); 324 App.StartDate = startDate; 325 App.EndDate = endDate; 326 App.AllDayEvent = allDay; 327 App.BorderColor = Color.Red; 328 App.Locked = true; 329 App.Subject = "Online"; 330 App.Recurring = recurring; 331 App.RecurringId = recurringId; 332 return App; 333 } 334 335 private void DeleteAppointment() 336 { 337 onlineTimes.Remove(dvOnline.SelectedAppointment); 338 } 339 340 private void DeleteRecurringAppointment(Guid recurringId) 341 { 342 onlineTimes.RemoveAll(a => a.RecurringId.ToString() == dvOnline.SelectedAppointment.RecurringId.ToString()); 343 } 344 345 private void ChangeRecurrenceAppointment(Guid recurringId) 346 { 347 int hourfrom = int.Parse(txttimeFrom.Text.Substring(0, txttimeFrom.Text.IndexOf(':'))); 348 int hourTo = int.Parse(txttimeTo.Text.Substring(0, txttimeTo.Text.IndexOf(':'))); 349 List<Appointment> recurringAppointments = onlineTimes.Where(appointment => appointment.RecurringId == recurringId).ToList(); 350 recurringAppointments.ForEach(appointment => appointment.StartDate = new DateTime(appointment.StartDate.Year, appointment.StartDate.Month, appointment.StartDate.Day, hourfrom, 0, 0)); 351 recurringAppointments.ForEach(appointment => appointment.EndDate = new DateTime(appointment.EndDate.Year, appointment.EndDate.Month, appointment.EndDate.Day, hourTo, 0, 0)); 352 353 DeleteRecurringAppointment(recurringId); 354 onlineTimes.AddRange(recurringAppointments); 355 } 356 357 public void DialogClosed(RecurrentEvent e) 358 { 359 CreateDailyRecurrenceAppointments(e.DateFrom, e.DateTo, e.AllDay, e.IncWeeks, e.WeekDays); 360 } 361 362 private void CreateDailyRecurrenceAppointments(DateTime dateFrom, DateTime dateTo, bool allDay, int incWeek, HashSet<DayOfWeek> daysOfWeek) 363 { 364 DateTime incDate = dateFrom; 365 Guid guid = Guid.NewGuid(); 366 367 while (incDate.Date <= dateTo.Date) 368 { 369 if (daysOfWeek.Contains(incDate.Date.DayOfWeek)) 370 onlineTimes.Add(CreateAppointment(incDate, new DateTime(incDate.Year, incDate.Month, incDate.Day, dateTo.Hour, dateTo.Minute, 0), allDay, true, guid)); 371 incDate = incDate.AddDays(1); 372 } 373 374 dvOnline.Invalidate(); 375 } 376 377 #region Calendar Events 378 379 private void btbDelete_Click(object sender, EventArgs e) 380 { 381 Appointment selectedAppointment = dvOnline.SelectedAppointment; 382 if (dvOnline.SelectedAppointment != null) 383 { 384 if (!selectedAppointment.Recurring) 385 DeleteAppointment(); 386 else 387 { 388 DialogResult res = MessageBox.Show("Delete all events in this series?", "Delete recurrences", MessageBoxButtons.YesNo); 389 if (res != DialogResult.Yes) 390 DeleteAppointment(); 391 else 392 DeleteRecurringAppointment(selectedAppointment.RecurringId); 393 } 394 } 395 dvOnline.Invalidate(); 396 } 397 398 private void chbade_CheckedChanged(object sender, EventArgs e) 399 { 400 txttimeFrom.Visible = !chbade.Checked; 401 txttimeTo.Visible = !chbade.Checked; 402 } 403 404 private void dvOnline_OnSelectionChanged(object sender, EventArgs e) 405 { 406 //btCreate.Enabled = true; 407 if (dvOnline.Selection == SelectionType.DateRange) 408 { 409 dtpFrom.Text = dvOnline.SelectionStart.ToShortDateString(); 410 dtpTo.Text = dvOnline.SelectionEnd.Date.ToShortDateString(); 411 txttimeFrom.Text = dvOnline.SelectionStart.ToShortTimeString(); 412 txttimeTo.Text = dvOnline.SelectionEnd.ToShortTimeString(); 413 414 btCreate.Text = "Save"; 415 } 416 417 if (dvOnline.Selection == SelectionType.Appointment) 418 { 419 420 dtpFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortDateString(); 421 dtpTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortDateString(); 422 txttimeFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortTimeString(); 423 txttimeTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortTimeString(); 424 425 if (dvOnline.SelectedAppointment.Recurring) 426 //btCreate.Enabled = false; 427 //also change the caption of the save button 428 btCreate.Text = "Save changes"; 429 } 430 431 if (dvOnline.Selection == SelectionType.None) 432 { 433 //also change the caption of the save button 434 btCreate.Text = "Save"; 435 } 436 437 } 438 439 private void mcOnline_DateChanged(object sender, DateRangeEventArgs e) 440 { 441 dvOnline.StartDate = mcOnline.SelectionStart; 442 } 443 444 private void btCreate_Click(object sender, EventArgs e) 445 { 446 if (dvOnline.Selection != SelectionType.Appointment) 447 { 448 CreateAppointment(); 449 } 450 else 451 { 452 //now we want to change an existing appointment 453 if (!dvOnline.SelectedAppointment.Recurring) 454 { 455 if (CreateAppointment()) 456 DeleteAppointment(); 457 } 458 else 459 { 460 //change recurring appointment 461 //check, if only selected appointment has to change or whole recurrence 462 DialogResult res = MessageBox.Show("Change all events in this series?", "Change recurrences", MessageBoxButtons.YesNo); 463 if (res != DialogResult.Yes) 464 { 465 if (CreateAppointment()) 466 DeleteAppointment(); 467 } 468 else 469 ChangeRecurrenceAppointment(dvOnline.SelectedAppointment.RecurringId); 470 } 471 } 472 dvOnline.Invalidate(); 473 } 474 475 private void btnRecurrence_Click(object sender, EventArgs e) 476 { 477 Recurrence recurrence = new Recurrence(); 478 recurrence.dialogClosedDelegate = new OnDialogClosedDelegate(this.DialogClosed); 479 recurrence.Show(); 480 } 481 482 private void btnSaveCal_Click(object sender, EventArgs e) 483 { 484 clientCommunicator.SetUptimeCalendarAsync(onlineTimes.ToArray()); 485 } 486 487 private void dvOnline_OnResolveAppointments(object sender, ResolveAppointmentsEventArgs e) 488 { 489 List<Appointment> Apps = new List<Appointment>(); 490 491 foreach (Appointment m_App in onlineTimes) 492 if ((m_App.StartDate >= e.StartDate) && 493 (m_App.StartDate <= e.EndDate)) 494 Apps.Add(m_App); 495 e.Appointments = Apps; 496 } 497 498 private void dvOnline_OnNewAppointment(object sender, NewAppointmentEventArgs e) 499 { 500 Appointment Appointment = new Appointment(); 501 502 Appointment.StartDate = e.StartDate; 503 Appointment.EndDate = e.EndDate; 504 505 onlineTimes.Add(Appointment); 506 } 507 508 #endregion 509 510 #endregion 511 512 #region Client communicator events 513 514 void clientCommunicator_SetUptimeCalendarCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 515 { 516 if (e.Error == null) 517 { 518 MessageBox.Show("Calendar successfully saved!", "Calender", MessageBoxButtons.OK, MessageBoxIcon.Information); 519 } 520 else 521 { 522 MessageBox.Show("Error saving calender \n" + e.Error.ToString(), "Calender", MessageBoxButtons.OK, MessageBoxIcon.Error); 523 } 524 } 525 526 void clientCommunicator_GetUptimeCalendarCompleted(object sender, GetUptimeCalendarCompletedEventArgs e) 527 { 528 if (e.Error == null) 529 { 530 if (e.Result != null) 531 { 532 onlineTimes = e.Result.ToList<Appointment>(); 533 onlineTimes.ForEach(a => a.BorderColor = Color.Red); 534 } 535 else 536 { 537 onlineTimes = new List<Appointment>(); 538 } 539 } 540 //InitTestCalenderEntries(); 541 } 542 543 private void clientCommunicator_GetCurrentConnectionCompleted(object sender, GetCurrentConnectionCompletedEventArgs e) 544 { 545 if (e.Error == null) 546 { 547 ConnectionContainer curConnection = e.Result; 548 tbIPAdress.Text = curConnection.IPAdress; 549 tbPort.Text = curConnection.Port.ToString(); 550 } 551 else 552 { 553 refreshTimer.Stop(); 554 DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running! - " + e.Error.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 555 if (res == DialogResult.OK) 556 this.Close(); 557 } 558 } 559 560 private void clientCommunicator_GetStatusInfosCompleted(object sender, GetStatusInfosCompletedEventArgs e) 561 { 562 563 if (e.Error == null) 564 { 565 StatusCommons sc = e.Result; 566 567 lbGuid.Text = sc.ClientGuid.ToString(); 568 lbConnectionStatus.Text = sc.Status.ToString(); 569 lbJobdone.Text = sc.JobsDone.ToString(); 570 lbJobsAborted.Text = sc.JobsAborted.ToString(); 571 lbJobsFetched.Text = sc.JobsFetched.ToString(); 572 573 this.Text = "Client Console (" + sc.Status.ToString() + ")"; 574 575 ListViewItem curJobStatusItem; 576 577 if (sc.Jobs != null) 578 { 579 lvJobDetail.Items.Clear(); 580 double progress; 581 foreach (JobStatus curJob in sc.Jobs) 582 { 583 curJobStatusItem = new ListViewItem(curJob.JobId.ToString()); 584 curJobStatusItem.SubItems.Add(curJob.Since.ToString()); 585 progress = curJob.Progress * 100; 586 curJobStatusItem.SubItems.Add(progress.ToString()); 587 lvJobDetail.Items.Add(curJobStatusItem); 588 } 589 lvJobDetail.Sort(); 590 } 591 592 UpdateGraph(sc.Jobs); 593 594 if (sc.Status == NetworkEnumWcfConnState.Connected || sc.Status == NetworkEnumWcfConnState.Loggedin) 595 { 596 btConnect.Enabled = false; 597 btnDisconnect.Enabled = true; 598 lbCs.Text = sc.ConnectedSince.ToString(); 599 clientCommunicator.GetCurrentConnectionAsync(); 600 } 601 else if (sc.Status == NetworkEnumWcfConnState.Disconnected) 602 { 603 btConnect.Enabled = true; 604 btnDisconnect.Enabled = false; 605 lbCs.Text = String.Empty; 606 } 607 else if (sc.Status == NetworkEnumWcfConnState.Failed) 608 { 609 btConnect.Enabled = true; 610 btnDisconnect.Enabled = false; 611 lbCs.Text = String.Empty; 612 } 613 614 clientCommunicator.GetCurrentConnection(); 615 } 616 else 617 { 618 refreshTimer.Stop(); 619 DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running! - " + e.Error.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 620 if (res == DialogResult.OK) 621 this.Close(); 622 } 623 } 624 625 #endregion 626 627 #endregion 628 629 #region GUI Events 630 631 private void btConnect_Click(object sender, EventArgs e) 632 { 633 IPAddress ipAdress; 634 int port; 635 ConnectionContainer cc = new ConnectionContainer(); 636 if (IPAddress.TryParse(tbIPAdress.Text, out ipAdress) && int.TryParse(tbPort.Text, out port)) 637 { 638 cc.IPAdress = tbIPAdress.Text; 639 cc.Port = port; 640 clientCommunicator.SetConnectionAsync(cc); 641 } 642 else 643 { 644 MessageBox.Show("IP Adress and/or Port Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 645 } 646 } 647 648 private void btnDisconnect_Click(object sender, EventArgs e) 649 { 650 clientCommunicator.DisconnectAsync(); 651 } 652 653 private void btn_clientShutdown_Click(object sender, EventArgs e) 654 { 655 DialogResult res = MessageBox.Show("Do you really want to shutdown the Hive Client?", "Hive Client Console", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 656 if (res == DialogResult.Yes) 657 { 658 logFileReader.Stop(); 659 clientCommunicator.ShutdownClient(); 660 this.Close(); 661 } 662 } 663 664 private void Connection_KeyPress(object sender, KeyPressEventArgs e) 665 { 666 if (e.KeyChar == (char)Keys.Return) 667 btConnect_Click(null, null); 668 } 669 670 #endregion 671 672 } 289 } 290 else 291 MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 292 } 293 dvOnline.Invalidate(); 294 return true; 295 } 296 else 297 { 298 MessageBox.Show("Error in create appointment, please fill out all textboxes!", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 299 return false; 300 } 301 } 302 303 private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay) 304 { 305 Appointment App = new Appointment(); 306 App.StartDate = startDate; 307 App.EndDate = endDate; 308 App.AllDayEvent = allDay; 309 App.BorderColor = Color.Red; 310 App.Locked = true; 311 App.Subject = "Online"; 312 App.Recurring = false; 313 return App; 314 } 315 316 private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay, bool recurring, Guid recurringId) 317 { 318 Appointment App = new Appointment(); 319 App.StartDate = startDate; 320 App.EndDate = endDate; 321 App.AllDayEvent = allDay; 322 App.BorderColor = Color.Red; 323 App.Locked = true; 324 App.Subject = "Online"; 325 App.Recurring = recurring; 326 App.RecurringId = recurringId; 327 return App; 328 } 329 330 private void DeleteAppointment() 331 { 332 onlineTimes.Remove(dvOnline.SelectedAppointment); 333 } 334 335 private void DeleteRecurringAppointment(Guid recurringId) 336 { 337 onlineTimes.RemoveAll(a => a.RecurringId.ToString() == dvOnline.SelectedAppointment.RecurringId.ToString()); 338 } 339 340 private void ChangeRecurrenceAppointment(Guid recurringId) 341 { 342 int hourfrom = int.Parse(txttimeFrom.Text.Substring(0, txttimeFrom.Text.IndexOf(':'))); 343 int hourTo = int.Parse(txttimeTo.Text.Substring(0, txttimeTo.Text.IndexOf(':'))); 344 List<Appointment> recurringAppointments = onlineTimes.Where(appointment => appointment.RecurringId == recurringId).ToList(); 345 recurringAppointments.ForEach(appointment => appointment.StartDate = new DateTime(appointment.StartDate.Year, appointment.StartDate.Month, appointment.StartDate.Day, hourfrom, 0, 0)); 346 recurringAppointments.ForEach(appointment => appointment.EndDate = new DateTime(appointment.EndDate.Year, appointment.EndDate.Month, appointment.EndDate.Day, hourTo, 0, 0)); 347 348 DeleteRecurringAppointment(recurringId); 349 onlineTimes.AddRange(recurringAppointments); 350 } 351 352 public void DialogClosed(RecurrentEvent e) 353 { 354 CreateDailyRecurrenceAppointments(e.DateFrom, e.DateTo, e.AllDay, e.IncWeeks, e.WeekDays); 355 } 356 357 private void CreateDailyRecurrenceAppointments(DateTime dateFrom, DateTime dateTo, bool allDay, int incWeek, HashSet<DayOfWeek> daysOfWeek) 358 { 359 DateTime incDate = dateFrom; 360 Guid guid = Guid.NewGuid(); 361 362 while (incDate.Date <= dateTo.Date) 363 { 364 if (daysOfWeek.Contains(incDate.Date.DayOfWeek)) 365 onlineTimes.Add(CreateAppointment(incDate, new DateTime(incDate.Year, incDate.Month, incDate.Day, dateTo.Hour, dateTo.Minute, 0), allDay, true, guid)); 366 incDate = incDate.AddDays(1); 367 } 368 369 dvOnline.Invalidate(); 370 } 371 372 #region Calendar Events 373 374 private void btbDelete_Click(object sender, EventArgs e) 375 { 376 Appointment selectedAppointment = dvOnline.SelectedAppointment; 377 if (dvOnline.SelectedAppointment != null) 378 { 379 if (!selectedAppointment.Recurring) 380 DeleteAppointment(); 381 else 382 { 383 DialogResult res = MessageBox.Show("Delete all events in this series?", "Delete recurrences", MessageBoxButtons.YesNo); 384 if (res != DialogResult.Yes) 385 DeleteAppointment(); 386 else 387 DeleteRecurringAppointment(selectedAppointment.RecurringId); 388 } 389 } 390 dvOnline.Invalidate(); 391 } 392 393 private void chbade_CheckedChanged(object sender, EventArgs e) 394 { 395 txttimeFrom.Visible = !chbade.Checked; 396 txttimeTo.Visible = !chbade.Checked; 397 } 398 399 private void dvOnline_OnSelectionChanged(object sender, EventArgs e) 400 { 401 //btCreate.Enabled = true; 402 if (dvOnline.Selection == SelectionType.DateRange) 403 { 404 dtpFrom.Text = dvOnline.SelectionStart.ToShortDateString(); 405 dtpTo.Text = dvOnline.SelectionEnd.Date.ToShortDateString(); 406 txttimeFrom.Text = dvOnline.SelectionStart.ToShortTimeString(); 407 txttimeTo.Text = dvOnline.SelectionEnd.ToShortTimeString(); 408 409 btCreate.Text = "Save"; 410 } 411 412 if (dvOnline.Selection == SelectionType.Appointment) 413 { 414 415 dtpFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortDateString(); 416 dtpTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortDateString(); 417 txttimeFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortTimeString(); 418 txttimeTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortTimeString(); 419 420 if (dvOnline.SelectedAppointment.Recurring) 421 //btCreate.Enabled = false; 422 //also change the caption of the save button 423 btCreate.Text = "Save changes"; 424 } 425 426 if (dvOnline.Selection == SelectionType.None) 427 { 428 //also change the caption of the save button 429 btCreate.Text = "Save"; 430 } 431 432 } 433 434 private void mcOnline_DateChanged(object sender, DateRangeEventArgs e) 435 { 436 dvOnline.StartDate = mcOnline.SelectionStart; 437 } 438 439 private void btCreate_Click(object sender, EventArgs e) 440 { 441 if (dvOnline.Selection != SelectionType.Appointment) 442 { 443 CreateAppointment(); 444 } 445 else 446 { 447 //now we want to change an existing appointment 448 if (!dvOnline.SelectedAppointment.Recurring) 449 { 450 if (CreateAppointment()) 451 DeleteAppointment(); 452 } 453 else 454 { 455 //change recurring appointment 456 //check, if only selected appointment has to change or whole recurrence 457 DialogResult res = MessageBox.Show("Change all events in this series?", "Change recurrences", MessageBoxButtons.YesNo); 458 if (res != DialogResult.Yes) 459 { 460 if (CreateAppointment()) 461 DeleteAppointment(); 462 } 463 else 464 ChangeRecurrenceAppointment(dvOnline.SelectedAppointment.RecurringId); 465 } 466 } 467 dvOnline.Invalidate(); 468 } 469 470 private void btnRecurrence_Click(object sender, EventArgs e) 471 { 472 Recurrence recurrence = new Recurrence(); 473 recurrence.dialogClosedDelegate = new OnDialogClosedDelegate(this.DialogClosed); 474 recurrence.Show(); 475 } 476 477 private void btnSaveCal_Click(object sender, EventArgs e) 478 { 479 clientCommunicator.SetUptimeCalendarAsync(onlineTimes.ToArray()); 480 } 481 482 private void dvOnline_OnResolveAppointments(object sender, ResolveAppointmentsEventArgs e) 483 { 484 List<Appointment> Apps = new List<Appointment>(); 485 486 foreach (Appointment m_App in onlineTimes) 487 if ((m_App.StartDate >= e.StartDate) && 488 (m_App.StartDate <= e.EndDate)) 489 Apps.Add(m_App); 490 e.Appointments = Apps; 491 } 492 493 private void dvOnline_OnNewAppointment(object sender, NewAppointmentEventArgs e) 494 { 495 Appointment Appointment = new Appointment(); 496 497 Appointment.StartDate = e.StartDate; 498 Appointment.EndDate = e.EndDate; 499 500 onlineTimes.Add(Appointment); 501 } 502 503 #endregion 504 505 #endregion 506 507 #region Client communicator events 508 509 void clientCommunicator_SetUptimeCalendarCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 510 { 511 if (e.Error == null) 512 { 513 MessageBox.Show("Calendar successfully saved!", "Calender", MessageBoxButtons.OK, MessageBoxIcon.Information); 514 } 515 else 516 { 517 MessageBox.Show("Error saving calender \n" + e.Error.ToString(), "Calender", MessageBoxButtons.OK, MessageBoxIcon.Error); 518 } 519 } 520 521 void clientCommunicator_GetUptimeCalendarCompleted(object sender, GetUptimeCalendarCompletedEventArgs e) 522 { 523 if (e.Error == null) 524 { 525 if (e.Result != null) 526 { 527 onlineTimes = e.Result.ToList<Appointment>(); 528 onlineTimes.ForEach(a => a.BorderColor = Color.Red); 529 } 530 else 531 { 532 onlineTimes = new List<Appointment>(); 533 } 534 } 535 } 536 537 private void clientCommunicator_GetCurrentConnectionCompleted(object sender, GetCurrentConnectionCompletedEventArgs e) 538 { 539 if (e.Error == null) 540 { 541 ConnectionContainer curConnection = e.Result; 542 tbIPAdress.Text = curConnection.IPAdress; 543 tbPort.Text = curConnection.Port.ToString(); 544 } 545 else 546 { 547 ManageFatalException("Connection Error, check if Hive Client is running!", "Connection Error", null); 548 } 549 } 550 551 private void clientCommunicator_GetStatusInfosCompleted(object sender, GetStatusInfosCompletedEventArgs e) 552 { 553 if (e.Error == null) 554 { 555 StatusCommons sc = e.Result; 556 557 lbGuid.Text = sc.ClientGuid.ToString(); 558 lbConnectionStatus.Text = sc.Status.ToString(); 559 lbJobdone.Text = sc.JobsDone.ToString(); 560 lbJobsAborted.Text = sc.JobsAborted.ToString(); 561 lbJobsFetched.Text = sc.JobsFetched.ToString(); 562 563 this.Text = "Client Console (" + sc.Status.ToString() + ")"; 564 565 ListViewItem curJobStatusItem; 566 567 if (sc.Jobs != null) 568 { 569 lvJobDetail.Items.Clear(); 570 double progress; 571 foreach (JobStatus curJob in sc.Jobs) 572 { 573 curJobStatusItem = new ListViewItem(curJob.JobId.ToString()); 574 curJobStatusItem.SubItems.Add(curJob.Since.ToString()); 575 progress = curJob.Progress * 100; 576 curJobStatusItem.SubItems.Add(progress.ToString()); 577 lvJobDetail.Items.Add(curJobStatusItem); 578 } 579 lvJobDetail.Sort(); 580 } 581 582 UpdateGraph(sc.Jobs); 583 584 if (sc.Status == NetworkEnumWcfConnState.Connected || sc.Status == NetworkEnumWcfConnState.Loggedin) 585 { 586 btConnect.Enabled = false; 587 btnDisconnect.Enabled = true; 588 lbCs.Text = sc.ConnectedSince.ToString(); 589 clientCommunicator.GetCurrentConnectionAsync(); 590 } 591 else if (sc.Status == NetworkEnumWcfConnState.Disconnected) 592 { 593 btConnect.Enabled = true; 594 btnDisconnect.Enabled = false; 595 lbCs.Text = String.Empty; 596 } 597 else if (sc.Status == NetworkEnumWcfConnState.Failed) 598 { 599 btConnect.Enabled = true; 600 btnDisconnect.Enabled = false; 601 lbCs.Text = String.Empty; 602 } 603 604 clientCommunicator.GetCurrentConnection(); 605 } 606 else 607 { 608 ManageFatalException("Connection Error, check if Hive Client is running!", "Connection Error", null); 609 } 610 } 611 612 #endregion 613 614 #region Exception 615 private void ManageFatalException(string body, string caption, Exception e) 616 { 617 if (!isfired) 618 { 619 isfired = true; 620 refreshTimer.Stop(); 621 DialogResult res = MessageBox.Show(body, caption, MessageBoxButtons.OK, MessageBoxIcon.Error); 622 if (res == DialogResult.OK) 623 this.Close(); 624 } 625 } 626 627 #endregion 628 629 #endregion 630 631 #region GUI Events 632 633 private void btConnect_Click(object sender, EventArgs e) 634 { 635 IPAddress ipAdress; 636 int port; 637 ConnectionContainer cc = new ConnectionContainer(); 638 if (IPAddress.TryParse(tbIPAdress.Text, out ipAdress) && int.TryParse(tbPort.Text, out port)) 639 { 640 cc.IPAdress = tbIPAdress.Text; 641 cc.Port = port; 642 clientCommunicator.SetConnectionAsync(cc); 643 } 644 else 645 { 646 MessageBox.Show("IP Adress and/or Port Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 647 } 648 } 649 650 private void btnDisconnect_Click(object sender, EventArgs e) 651 { 652 clientCommunicator.DisconnectAsync(); 653 } 654 655 private void btn_clientShutdown_Click(object sender, EventArgs e) 656 { 657 DialogResult res = MessageBox.Show("Do you really want to shutdown the Hive Client?", "Hive Client Console", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 658 if (res == DialogResult.Yes) 659 { 660 logFileReader.Stop(); 661 clientCommunicator.ShutdownClient(); 662 this.Close(); 663 } 664 } 665 666 private void Connection_KeyPress(object sender, KeyPressEventArgs e) 667 { 668 if (e.KeyChar == (char)Keys.Return) 669 btConnect_Click(null, null); 670 } 671 672 #endregion 673 674 } 673 675 }
Note: See TracChangeset
for help on using the changeset viewer.