コード例 #1
0
ファイル: INibusCodec.cs プロジェクト: sarakusha/Nibus.NET
        /// <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));
        }
コード例 #2
0
ファイル: INibusCodec.cs プロジェクト: sarakusha/Nibus.NET
        /// <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);
        }