/*********************************************************************/
/*                                                                   */
/*                     AgentService Framework                        */
/*                       www.agentservice.it                         */
/*                                                                   */
/* Copyright (C) 2007 l.i.d.o. - DIST, University of Genoa, Italy    */
/* GNU Lesser General Public License                                 */
/*                                                                   */
/* This library is free software; you can redistribute it and/or     */
/* modify it under the terms of the GNU Lesser General Public        */
/* License as published by the Free Software Foundation,             */
/* version 2.1 of the License.                                       */
/*                                                                   */
/* This library is distributed in the hope that it will be useful,   */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of    */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU */
/* Lesser General Public License for more details.                   */
/*                                                                   */
/* You should have received a copy of the GNU Lesser General Public  */
/* License along with this library; if not, write to the             */
/* Free Software Foundation, Inc., 59 Temple Place - Suite 330,      */
/* Boston, MA  02111-1307, USA.                                      */
/*                                                                   */
/*********************************************************************/
using System;
using System.Collections;
using AgentService.Platform.Modules;
using AgentService.Agent;
using AgentService.Platform.MTS;
using System.Threading;


namespace AgentService.Agent.Runtime
{
	/// <summary>
	/// Summary description for RuntimeChannel.
	/// </summary>
	public class RuntimeChannel
	{
		private Platform.Platform platform;
		
		private AID aid;
		
		private bool bOpen = false;

		public string ClientId
		{
			get
			{
				return this.aid.Name;
			}

			set
			{
				if (bOpen == false)
				{
					this.aid = new AID(value,this.aid.HapName);
				}
			}
		}

		private MsgBatchClient msgClient;
		
		public MsgBatchClient MsgClient
		{
			get
			{
				return this.msgClient;
			}
		}
		
		public RuntimeChannel(string clientId,Platform.Platform platform)
		{
			this.platform = platform;
			this.aid = new AID(clientId,this.platform.Description.Name);
		}

		public bool OpenChannel()
		{
			if (this.platform.AMS.RegisteredAgents.Contains(this.aid) == true)
			{
				return false;
			}
            this.msgClient = new MsgBatchClient(this.aid, this.platform.MTS);
			this.bOpen = true;

			return true;
		}

		public void CloseChannel()
		{
			if (this.bOpen == true)
			{
				this.platform.MTS.Deregister(this.aid);
				this.bOpen = false;
			}
		}
	}
}
