public StreamAssociationHandle(StreamTransportSettings settings, Stream stream, Address localAddress, Address remoteAddress, object state)
            : base(localAddress, remoteAddress)
        {
            _settings   = settings;
            _stream     = stream;
            _state      = state;
            _writeQueue = new AsyncQueue <ByteString>(settings.RemoteDispatcher);

            _readBuffer  = new byte[settings.StreamReadBufferSize];
            _writeBuffer = new byte[settings.StreamWriteBufferSize];

            _initialized   = new TaskCompletionSource <bool>();
            _disassociated = new TaskCompletionSource <bool>();

            _stopped   = Task.Run(() => StopRunner());
            _writeLoop = Task.Run(() => WriteLoop());
            _readLoop  = Task.Run(() => ReadLoop());
        }
Example #2
0
        protected StreamTransport(ActorSystem system, StreamTransportSettings settings)
        {
            _cancellation = new CancellationTokenSource();

            System       = system;
            Config       = settings.Config;
            Settings     = settings;
            Settings.Log = Logging.GetLogger(System, this);

            var dispatcherId = System.Settings.Config.GetString("akka.remote.use-dispatcher");

            if (dispatcherId == null)
            {
                throw new InvalidOperationException("The setting 'akka.remote.use-dispatcher' is missing from config.");
            }

            if (!System.Dispatchers.HasDispatcher(dispatcherId))
            {
                throw  new InvalidOperationException($"Dispatcher '{dispatcherId}' is missing from config.");
            }

            Settings.RemoteDispatcher = System.Dispatchers.Lookup(dispatcherId);
            Settings.FlushWaitTimeout = System.Settings.Config.GetTimeSpan("akka.remote.flush-wait-on-shutdown");
        }