CASA/c_micasad/communication/WinIPCChannel.cs
2005-10-11 19:51:00 +00:00

103 lines
2.2 KiB
C#

using System;
using System.IO;
using System.Text;
using sscs.communication.win.NamedPipes;
using sscs.common;
using sscs.verbs;
using sscs.constants;
namespace sscs.communication
{
class WinIPCChannel : IPCChannel
{
// Data
private ServerPipeConnection m_serverPipeConnection;
private WinUserIdentifier userId = null;
//Methods
public WinIPCChannel(ServerPipeConnection serverPipeConnection)
{
m_serverPipeConnection = serverPipeConnection;
}
override internal UserIdentifier GetIPCChannelUserId()
{
CSSSLogger.DbgLog("In WinIPCChannel::GetIPCChannelUserId");
return userId;
}
private WinIPCChannel()
{
CSSSLogger.DbgLog("WinIPCChannel constructor must be called with a serverPipe");
}
~WinIPCChannel()
{
// Console.WriteLine("WinIPCChannel::~~WinIPCChannel");
}
override internal byte[] Read()
{
int localUserIDLow = 0;
int localUserIDHigh = 0;
string sSIDString = "";
byte[] incoming = null;
try
{
incoming = m_serverPipeConnection.ReadBytes();
// get local Userid and SID
m_serverPipeConnection.GetLocalUserID(ref localUserIDLow, ref localUserIDHigh, ref sSIDString);
if (localUserIDLow != 0 || localUserIDHigh !=0)
{
userId = new WinUserIdentifier(localUserIDLow, localUserIDHigh, sSIDString);
}
return incoming;
}
catch(Exception e)
{
return null;
//CSSSLogger.DbgLog("Exception in reading data from client" + e.ToString());
//throw new CommunicationException(e.ToString());
}
}
override internal int Read(byte[] buf)
{
return 0;
}
override internal int Write(byte[] buf)
{
int bytesSent = 0;
try
{
m_serverPipeConnection.WriteBytes(buf);
bytesSent = buf.Length;
}
catch (Exception)
{
}
CSSSLogger.DbgLog("WinIPCChannel::Write - Bytes sent is {0}" +bytesSent);
return bytesSent;
}
override internal void Close()
{
CSSSLogger.DbgLog("WinIPCChannel Closed");
//clientSocket.Close();
m_serverPipeConnection.Close();
}
}
}