internal PipeConnection(int p_ID, string p_Name, PipeStream p_ServerStream) { ID = p_ID; Name = p_Name; m_StreamWrapper = new PipeStreamWrapper(p_ServerStream); }
private void WaitForConnection(string p_PipeName) { NamedPipeServerStream s_HandshakePipe = null; NamedPipeServerStream s_DataPipe = null; PipeConnection s_Connection = null; var s_ConnectionPipeName = GetNextConnectionPipeName(p_PipeName); try { s_HandshakePipe = PipeServerFactory.CreateAndConnectPipe(p_PipeName); var s_HandshakeWrapper = new PipeStreamWrapper(s_HandshakePipe); s_HandshakeWrapper.WriteMessage(new PipeMessage() { Module = "SM", Type = "HS", Content = s_ConnectionPipeName }); s_HandshakeWrapper.WaitForPipeDrain(); s_HandshakeWrapper.Close(); s_DataPipe = PipeServerFactory.CreatePipe(s_ConnectionPipeName); s_DataPipe.WaitForConnection(); s_Connection = ConnectionFactory.CreateConnection(s_DataPipe); s_Connection.ReceiveMessage += ClientOnReceiveMessage; s_Connection.Disconnected += ClientOnDisconnected; s_Connection.Open(); lock (m_Connections) m_Connections.Add(s_Connection); ClientOnConnected(s_Connection); } catch (Exception) { Cleanup(s_HandshakePipe); Cleanup(s_DataPipe); ClientOnDisconnected(s_Connection); } }