/// <summary> /// Set up the pipeline for this client. (note: this call blocks until the client closes, run it asyncrounously if you do not want that.) /// </summary> public void Hook() { Dispatcher.Go(() => { while (Out.IsOpen) { var msg = Out.Receive(); if (Out.IsOpen) { //var sd = OnSend.Use(); using (OnSend.Use()) { try { msg.Write(backing); } catch (Exception) { OnSend.Disuse(); Close(); } } //sd.Dispose(); _ = SignalHandler.Signal(SignalMessageSent, msg); } } if (!KeepAlive) { try { backing.Dispose(); } catch { } } }); up.Set(); while (In.IsOpen) { Message message = null; try { //var recv = OnReceive.Use(); using (OnReceive.Use()) { try { message = new Message(); message.OnCreateLongStream = OnLongStreamCreate; message.LongStreamReadCreate = LongStreamReadCreate; message.OnLongStreamReadComplete += OnLongStreamReadComplete; message.Read(backing); } catch (Exception) { OnReceive.Disuse(); Close(); } } //recv.Dispose(); if (In.IsOpen) { In.Send(message); _ = SignalHandler.Signal(SignalMessageReceived, message); } } catch (Exception) { Close(); //OnException(new ClientReadException(e, "Error reading from stream")); } } }