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