/***********************************************************************
 * 
 *  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 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();
		}

	}
}