////////////////////////////////////////////////// // Created by Ivan Latunov - IvanWeb.com // //----------------------------------------------// // This program is free software. You can // // redistribute it and/or modify it as you wish // ////////////////////////////////////////////////// using System; using System.IO; using sscs.communication.win.InterProcessComm; namespace sscs.communication.win.NamedPipes { #region Comments /// /// Used by server applications to communicate with client ones by using named pipes. /// #endregion public sealed class ServerPipeConnection : APipeConnection { #region Comments /// /// Disconnects a client named pipe. /// /// /// When a client named pipe is disconnected, the server one is not closed. /// The latter can later be reused by starting to listen again.

/// In a message oriented protocol the server will disconnect the client when the /// response is sent and all the data is flushed. The same server named pipe /// could then be reused by calling the /// Connect method. ///
#endregion public void Disconnect() { CheckIfDisposed(); NamedPipeWrapper.Disconnect(this.Handle); } #region Comments /// /// Closes the operating system native handle of the named pipe. /// #endregion public override void Close() { CheckIfDisposed(); NamedPipeWrapper.Close(this.Handle); } #region Comments /// /// Starts listening to client pipe connections. /// /// /// This method will block the program execution until a client pipe attempts /// to establish a connection.

/// When a client named pipe is disconnected, the server one is not closed. /// The latter can later be reused by starting to listen again.

///
#endregion public override void Connect() { CheckIfDisposed(); NamedPipeWrapper.Connect(this.Handle); } #region Comments /// /// Creates a ServerPipeConnection instance and the underlying operating system handle. /// /// The name of the pipe. /// The outbound buffer. /// The inbound buffer. /// The maximum bytes to read from clients. #endregion public ServerPipeConnection(string name, uint outBuffer, uint inBuffer, int maxReadBytes) { this.Name = name; this.Handle = NamedPipeWrapper.Create(name, outBuffer, inBuffer); this.maxReadBytes = maxReadBytes; } #region Comments /// /// Object destructor. /// #endregion ~ServerPipeConnection() { Dispose(false); } } }