using System;

using AppModule.InterProcessComm;
using AppModule.NamedPipes;

namespace Novell.CASA.MiCasa.Communication
{
	/// <summary>
	/// Summary description for WinIPCClientChannel.
	/// </summary>
	public class WinIPCClientChannel : ClientChannel
	{

		private static IInterProcessConnection clientConnection = null;
		private static string XTIER_RPC_PIPE = "SS_RPC_PIPE";

		public WinIPCClientChannel()
		{
	
		}

		public void Open()
		{
			if (clientConnection == null)
			{
				clientConnection = new ClientPipeConnection(XTIER_RPC_PIPE, ".");
				clientConnection.Connect();
			}

		}

		public int Read(byte[] buf)
		{
			buf = Read();

			if (buf != null)
				return 0;
			else
				return -1;
		}

		public byte[] Read()
		{
			byte[] returnBuffer;
			
			try 
			{
				returnBuffer = clientConnection.ReadBytes();
				return returnBuffer;
			}
			catch (Exception e)
			{
				Console.WriteLine(e.ToString());
				return null;
			}			
		}
		
		public int Write(byte[] buf)
		{
			try
			{
				clientConnection.WriteBytes(buf);
				return 0;
			}
			catch (Exception e)
			{
				Console.WriteLine(e.ToString());
				return -1;
			}
		}

		public void Close()
		{
			
			//clientConnection.Close();
			//clientConnection.Dispose();
		}

	}
}