using System; using Decal.Adapter.NetParser; using Decal.Adapter.Support; using Decal.Interop.Filters; using Decal.Interop.Net; namespace Decal.Adapter.Wrappers; public class EchoFilter2 : GenericDisposableWrapper { private event EventHandler serverDispatch; private event EventHandler clientDispatch; /// /// Fires when the client receives a message from the server /// public event EventHandler ServerDispatch { add { serverDispatch += value; } remove { serverDispatch -= value; } } /// /// Fires when the client sends a message to the server /// public event EventHandler ClientDispatch { add { clientDispatch += value; } remove { clientDispatch -= value; } } public EchoFilter2(Decal.Interop.Filters.EchoFilter2 obj) : base(obj) { base.Wrapped.EchoClient += onEchoClient; base.Wrapped.EchoServer += onEchoServer; } protected override void Dispose(bool userCalled) { if (userCalled && base.Wrapped != null) { base.Wrapped.EchoClient -= onEchoClient; base.Wrapped.EchoServer -= onEchoServer; } base.Dispose(userCalled); } private void onEchoServer(IMessage2 pMsg) { try { Message message = null; Util.SafeFireEvent(args: new NetworkMessageEventArgs((!(pMsg is MessageWrapper messageWrapper)) ? new Message(pMsg, MessageDirection.Inbound) : messageWrapper.Wrapped), sender: this, eventHandler: this.serverDispatch); } catch (Exception ex) { Util.WriteLine("Exception in onEchoServer {0}", ex); } } private void onEchoClient(IMessage2 pMsg) { try { Message message = null; Util.SafeFireEvent(args: new NetworkMessageEventArgs((!(pMsg is MessageWrapper messageWrapper)) ? new Message(pMsg, MessageDirection.Inbound) : messageWrapper.Wrapped), sender: this, eventHandler: this.clientDispatch); } catch (Exception ex) { Util.WriteLine("Exception in onEchoClient {0}", ex); } } }