//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
//  
using System;
using System.IO;
using System.Drawing;
using System.Collections;
using System.Diagnostics;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;


namespace CLRUnleashed.Remoting
{
	/// <summary>
	/// Podsumowanie dla TimeForm.
	/// </summary>
	public class TimeForm : System.Windows.Forms.Form
	{
		private System.ComponentModel.IContainer components;

		public TimeForm()
		{
			//
			// Wymagane do obsługi Windows Form Designer
			//
			InitializeComponent();

			timeService = new TimeObjectService();
			timer.Enabled = true;
		}

		/// <summary>
		/// Oczyszczenie używanych zasobów.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Metoda wymagana do obsługi Designera - nie należy modyfikować
		/// zawartości tej metody przy użyciu edytora kodu.
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			this.date = new System.Windows.Forms.TextBox();
			this.time = new System.Windows.Forms.TextBox();
			this.timer = new System.Windows.Forms.Timer(this.components);
			this.dateCount = new System.Windows.Forms.TextBox();
			this.timeCount = new System.Windows.Forms.TextBox();
			this.SuspendLayout();
			// 
			// date
			// 
			this.date.BackColor = System.Drawing.Color.Black;
			this.date.Font = new System.Drawing.Font("Trebuchet MS", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.date.ForeColor = System.Drawing.Color.Lime;
			this.date.Location = new System.Drawing.Point(8, 32);
			this.date.Name = "date";
			this.date.Size = new System.Drawing.Size(400, 39);
			this.date.TabIndex = 0;
			this.date.Text = "";
			this.date.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
			// 
			// time
			// 
			this.time.BackColor = System.Drawing.Color.Black;
			this.time.Font = new System.Drawing.Font("Trebuchet MS", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.time.ForeColor = System.Drawing.Color.Lime;
			this.time.Location = new System.Drawing.Point(8, 123);
			this.time.Name = "time";
			this.time.Size = new System.Drawing.Size(400, 39);
			this.time.TabIndex = 1;
			this.time.Text = "";
			this.time.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
			// 
			// timer
			// 
			this.timer.Interval = 1000;
			this.timer.Tick += new System.EventHandler(this.OnTick);
			// 
			// dateCount
			// 
			this.dateCount.Location = new System.Drawing.Point(184, 80);
			this.dateCount.Name = "dateCount";
			this.dateCount.Size = new System.Drawing.Size(56, 20);
			this.dateCount.TabIndex = 2;
			this.dateCount.Text = "";
			this.dateCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
			// 
			// timeCount
			// 
			this.timeCount.Location = new System.Drawing.Point(184, 176);
			this.timeCount.Name = "timeCount";
			this.timeCount.Size = new System.Drawing.Size(56, 20);
			this.timeCount.TabIndex = 3;
			this.timeCount.Text = "";
			this.timeCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
			// 
			// TimeForm
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(416, 222);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.timeCount,
																		  this.dateCount,
																		  this.time,
																		  this.date});
			this.Name = "TimeForm";
			this.Text = "Zdalny czas";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// Główny punkt wejścia dla aplikacji.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new TimeForm());
		}

		private System.Windows.Forms.TextBox date;
		private System.Windows.Forms.TextBox time;
		private System.Windows.Forms.Timer timer;
		private System.Windows.Forms.TextBox dateCount;
		private System.Windows.Forms.TextBox timeCount;
		private TimeObjectService timeService = null;

		private void OnTick(object sender, System.EventArgs e)
		{
			if(timeService != null)
			{
				try
				{
					time.Text = timeService.get_Time();
					date.Text = timeService.get_Date();
					dateCount.Text = Convert.ToString(timeService.get_DateCount());
					timeCount.Text = Convert.ToString(timeService.get_TimeCount());
				}
				catch(Exception exception)
				{
					Debug.WriteLine(exception);
					timeService = null;
					timer.Enabled = false;
				}
			}
		}
	}
}
