Beispiel #1
0
        public ConnectionIO(Connection connection) : base(channelNum: 0)
        {
            _conn         = connection;
            _socketHolder = new SocketHolder();

            _commandOutboxEvent = new AutoResetEvent(false);
            _waitingServerReply = new ManualResetEventSlim(true);
            // _commandOutboxEvent = new AutoResetSuperSlimLock(false);
            _commandOutbox = new ConcurrentQueue <CommandToSend>();

            _cmdToSendObjPool = new ObjectPool <CommandToSend>(() => new CommandToSend(i => _cmdToSendObjPool.PutObject(i)), 200, true);

            _amqpWriter  = new AmqpPrimitivesWriter();
            _amqpReader  = new AmqpPrimitivesReader();
            _frameReader = new FrameReader();
        }
        internal async Task InternalDoConnectSocket(string hostname, int port)
        {
            var index = Interlocked.Increment(ref _counter);

            await _socketHolder.Connect(hostname, port, OnSocketClosed, index);

            _amqpWriter = new AmqpPrimitivesWriter(_socketHolder.Writer, null, null);
            _amqpReader = new AmqpPrimitivesReader(_socketHolder.Reader);

            _frameReader = new FrameReader(_socketHolder.Reader, _amqpReader, this);

            var t1 = new Thread(WriteFramesLoop)
            {
                IsBackground = true, Name = "WriteFramesLoop_" + index
            };

            t1.Start();
            var t2 = new Thread(ReadFramesLoop)
            {
                IsBackground = true, Name = "ReadFramesLoop_" + index
            };

            t2.Start();
        }