/// <summary> /// Подключает к транспорту. /// </summary> /// <param name="transport">Транспорт.</param> /// <returns> /// Объект, вызвав у которого <see cref="IDisposable.Dispose"/>, можно прервать связь. /// </returns> public virtual IDisposable ConnectTo(INibusEndpoint <TEncoded> transport) { Contract.Requires(!IsDisposed); Contract.Requires(transport != null); Contract.Requires(transport.IncomingMessages != null); Contract.Requires(transport.OutgoingMessages != null); Contract.Requires(Decoder != null); Contract.Requires(Encoder != null); return(LinkTo(transport)); }
/// <summary> /// Подключает к транспорту. /// </summary> /// <param name="transport">Транспорт.</param> /// <returns> /// Объект, вызвав у которого <see cref="IDisposable.Dispose"/>, можно прервать связь. /// </returns> /// <remarks>Стандартная реализация <see cref="ConnectTo{T}"/></remarks> protected IDisposable LinkTo(INibusEndpoint <TEncoded> transport) { // Удаляем старые сообщения IList <TEncoded> oldMessages; transport.IncomingMessages.TryReceiveAll(out oldMessages); var unlinker = new Unlinker(); unlinker.AddLink(transport.IncomingMessages.LinkTo(Decoder)); unlinker.AddLink(Encoder.LinkTo(transport.OutgoingMessages)); _unlinker.AddLink(unlinker); return(unlinker); }