using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Pilz.IO { /// /// stellt den Erben "Server" und "Client" 2 verschiedene /// Message-Events zur Verfügung, und ein Event-Raisendes Dispose /// public abstract class ManagedPipe : IDisposable { public delegate void EventHandlerWithOneArgument(T0 Sender); /// /// Zur Ausgabe chat-verwaltungstechnischer Status-Informationen /// public event EventHandler StatusMessage; /// Zur Ausgabe von Chat-Messages public event EventHandler RetriveData; public event EventHandlerWithOneArgument Disposed; private bool _IsDisposed = false; protected abstract void Dispose(bool disposing); public abstract void Send(byte[] bytes); public abstract Task SendAsnyc(byte[] bytes); protected void OnStatusMessage(DataEventArgs e) { StatusMessage?.Invoke(this, e); } protected void OnRetriveData(DataEventArgs e) { RetriveData?.Invoke(this, e); } public void RemoveFrom(ICollection Coll) where T : ManagedPipe { Coll.Remove((T)this); } public bool IsDisposed { get { return _IsDisposed; } } public void AddTo(ICollection Coll) where T : ManagedPipe { Coll.Add((T)this); } public void Dispose() { if (_IsDisposed) return; _IsDisposed = true; Dispose(true); // rufe die erzwungenen Überschreibungen von Sub Dispose(Boolean) Disposed?.Invoke(this); GC.SuppressFinalize(this); } } }