/***********************************************************************
 * 
 *  Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
 *
 *  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
 *  Library 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, Novell, Inc.
 * 
 *  To contact Novell about this file by physical or electronic mail, 
 *  you may find current contact information at www.novell.com.
 * 
 ***********************************************************************/

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace Novell.CASA
{
	/// <summary>
	/// Summary description for RemoteServer.
	/// </summary>
	public class RemoteServer
	{


		TcpChannel channel;
		public RemoteServer()
		{
			//
			// TODO: Add constructor logic here
			//
		}

		public void startServer(int port)
		{
			int iPort = port;
			if (iPort == 0)
				iPort = 8080;

			channel = new TcpChannel(iPort);

			try 
			{
				ChannelServices.RegisterChannel(channel);
			}
			catch (Exception e)
			{
				throw e;
			}
			
			// Register as an available service with the name HelloWorld
			RemotingConfiguration.RegisterWellKnownServiceType(
				typeof(SecretStore),
				"enumerateSecretIDs",
				WellKnownObjectMode.SingleCall );

			RemotingConfiguration.RegisterWellKnownServiceType(
				typeof(SecretStore),
				"getSecret(string id)",
				WellKnownObjectMode.SingleCall );

			System.Console.WriteLine("Server Started on "+ iPort);
//			System.Console.ReadLine();
			//return 0;
		}

		public void stopServer()
		{
			if (channel != null)
			{
				System.Console.WriteLine("Stopping server");
				ChannelServices.UnregisterChannel(channel);
			}
		}
	}
}