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

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

		private SecretStore obj; 
		TcpChannel chan = null;

		public RemoteClient()
		{
		}


		public void openSocket(string serverAddr, string sPort)
		{
			// Create a channel for communicating w/ the remote object
			// Notice no port is specified on the client
			chan = new TcpChannel();


			try 
			{
				ChannelServices.RegisterChannel(chan);
			}
			catch (Exception)
			{
				
			}
			// Create an instance of the remote object
			obj = (SecretStore) Activator.GetObject(
				typeof(Novell.CASA.SecretStore),
				"tcp://"+serverAddr + ":" + sPort + "/enumerateSecretIDs" );
		}

		public void closeSocket()
		{
			if (chan != null) 
			{
				ChannelServices.UnregisterChannel(chan);
				//chan = null;
			}
		}


		public StringCollection getRemoteSecretIDS()
		{
			// Use the object
			try 
			{
				if( obj.Equals(null) )
				{
					System.Console.WriteLine("Error: unable to locate server");
					return null;
				}
				else
				{
					//Console.WriteLine(obj.enumerateSecretIDs());
					return obj.enumerateSecretIDs();
				}
			}
			catch (Exception e)
			{
				throw e;
			}
		}

		public Secret getRemoteSecret(string id)
		{

			if (obj.Equals(null))
			{
				return null;
			}
			else
			{
				return obj.getSecret(id);
			}
		}
	}
}