public void ScenarioSetup()
        {
            this._senders   = new SenderContext <object>();
            this._receivers = new List <ReceiverContext <object> >();

            this._checker = new Rediser(_redisConString);
        }
        public override async Task OnConnectedAsync(ConnectionContext connection)
        {
            _logger.LogInformation($"New connection with id='{connection.ConnectionId}' !");
            var(decoder, encoder) = _framing.CreatePair(connection);
            var proxy   = encoder as IMessageEncoder ?? throw new InvalidOperationException();
            var context = new SenderContext(connection, proxy);

            try {
                await proxy.WriteAsync(_handshakeMessage).ConfigureAwait(false);

                await foreach (var frame in decoder.ReadFramesAsync(connection.ConnectionClosed))
                {
                    _logger.LogDebug($"Connection with id = '{connection.ConnectionId}' sent a frame with : {frame.Metadata}");
                    var dispatchResult = await _framing.Dispatcher.OnFrameReceivedAsync(in frame, context)
                                         .ConfigureAwait(false);

                    if (dispatchResult != DispatchResult.Success)
                    {
                        break;
                    }
                }
            }
            finally {
                _logger.LogInformation($"Connection with id='{connection.ConnectionId}' ended with framesRead: {decoder.FramesRead}, framesSent: {encoder.FramesWritten} !");
                decoder.Dispose();
                encoder.Dispose();
            }
        }
        public override async Task OnConnectedAsync(ConnectionContext connection)
        {
            var(decoder, encoder) = _framing.CreatePair(connection);
            var context = new SenderContext(connection, encoder as IMessageEncoder);

            _logger.LogInformation($"Successfully connected to remote server at {connection.RemoteEndPoint} !");

            try {
                await foreach (var frame in decoder.ReadFramesAsync(connection.ConnectionClosed))
                {
                    _logger.LogDebug($"Received a frame with : {frame.Metadata}");
                    var dispatchResult = await _framing.Dispatcher.OnFrameReceivedAsync(in frame, context)
                                         .ConfigureAwait(false);

                    if (dispatchResult != DispatchResult.Success)
                    {
                        break;
                    }
                }
            }
            finally
            {
                _logger.LogInformation($"Connection with remote server at {connection.RemoteEndPoint} ended with framesRead: {decoder.FramesRead}, framesSent: {encoder.FramesWritten} !");
                decoder.Dispose();
                encoder.Dispose();
            }
        }
Esempio n. 4
0
        public void Initial()
        {
            _ctx = new SenderContext <object>();
            _ctx.ReceiverTable.Receivers = rcRecords;

            _ctx.MsgConnection  = Substitute.For <IRediser>();
            _ctx.DataConnection = Substitute.For <IRediser>();
        }
Esempio n. 5
0
 private static bool CallOnSendCompleted(bool async, SenderContext context)
 {
     context.EventArgs.Completed = context.CallBack;
     if (async)
     {
         context.CallBack(context.EventArgs);
     }
     return(async);
 }
Esempio n. 6
0
        public RedisSender(IBuffersPool buffersPool, IAsyncSocket asyncSocket, bool autoFlush)
        {
            _buffersPool   = buffersPool;
            _asyncSocket   = asyncSocket;
            _autoFlush     = autoFlush;
            _senderContext = new SenderContext();

            _flushArgs           = new AsyncSocketEventArgs();
            _flushArgs.Completed = FlushCallBack;

            _sendingQueue = new ConcurrentQueue <ArraySegment <byte> >();
        }
Esempio n. 7
0
        public RedisSender(IBuffersPool buffersPool, IAsyncSocket asyncSocket, bool autoFlush)
        {
            _buffersPool = buffersPool;
            _asyncSocket = asyncSocket;
            _autoFlush = autoFlush;
            _senderContext = new SenderContext();

            _flushArgs = new AsyncSocketEventArgs();
            _flushArgs.Completed = FlushCallBack;

            _sendingQueue = new ConcurrentQueue<ArraySegment<byte>>();
        }
Esempio n. 8
0
        public void Finished()
        {
            if (this._ctx.ReceiverTable.Amount > 0)
            {
                this._ctx.ReceiverTable.Receivers.Clear();
            }

            this._ctx.ReceiverTable.Receivers = null;
            this._ctx.MsgConnection           = null;
            this._ctx.DataConnection          = null;
            this._ctx = null;
        }
Esempio n. 9
0
        private int Send(List <VKApiRequestModel> Requests, SenderContext context)
        {
            var res = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests));

            if (res == 0)
            {
                context.SaveChanges();
            }
            else
            {
                context.UndoChanges();
            }
            Requests.Clear();
            return(res);
        }
        public void InitiateMulti_Sender()
        {
            SenderContext <object> senderA = new SenderContext <object>(),
                                   senderB = new SenderContext <object>();

            senderA.MsgConnection  = new Rediser(_redisConString, SerializerType.NewtonJson);
            senderA.DataConnection = new Rediser(_redisConString, SerializerType.NewtonJson);

            senderB.MsgConnection  = new Rediser(_redisConString, SerializerType.NewtonJson);
            senderB.DataConnection = new Rediser(_redisConString, SerializerType.NewtonJson);

            senderA.Initial();
            senderB.Initial();

            this._senders.Add(senderA);
            this._senders.Add(senderB);
        }
Esempio n. 11
0
 public SenderProcessState(SenderContext <T> ctx)
 {
     this._ctx = ctx;
 }
Esempio n. 12
0
 public SenderInitialState(SenderContext <T> ctx)
 {
     this._ctx = ctx;
 }
Esempio n. 13
0
 private static bool CallOnSendCompleted(bool async, SenderContext context)
 {
     context.EventArgs.Completed = context.CallBack;
     if (async) context.CallBack(context.EventArgs);
     return async;
 }
Esempio n. 14
0
 public SenderItem(SenderContext <DTO> sender)
 {
     this._sender = sender;
 }
Esempio n. 15
0
        public void DoWork()
        {
            var context  = new SenderContext("database");
            var Requests = new List <VKApiRequestModel>();

            while (true)
            {
                try
                {
                    var list  = context.Message.Where(x => !x.IsSended && x.BotUserVKID != null).ToArray();
                    int count = 0;
                    //неотправленные запросы пользователям Вконтакте
                    foreach (var item in list)
                    {
                        count++;
                        if (item.Photo != null)
                        {
                            Requests.Add(new VKApiRequestModel(ulong.Parse(item.BotUserVKID), item.Text, RequestType.SendMessageWithPhoto, item.Photo));
                        }
                        else
                        {
                            Requests.Add(new VKApiRequestModel(ulong.Parse(item.BotUserVKID), item.Text));
                        }
                        item.IsSended = true;

                        if (count >= 20 && count % 20 == 0)
                        {
                            var res = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests));
                            if (res == 0)
                            {
                                context.SaveChanges();
                            }
                            else
                            {
                                context.UndoChanges();
                            }
                            Requests.Clear();
                        }
                    }
                    if (Requests.Count > 0)
                    {
                        var res = AsyncHelper.RunSync(() => vk.SendAllRequests(Requests));
                        if (res == 0)
                        {
                            context.SaveChanges();
                        }
                        else
                        {
                            context.UndoChanges();
                        }
                        Requests.Clear();
                        Thread.Sleep(500);
                    }
                    else
                    {
                        Thread.Sleep(500);
                    }
                }
                catch (Exception esc)
                {
                    Logging.Logger.Error(esc);
                }
            }
        }
Esempio n. 16
0
 public SenderPrepareState(SenderContext <T> ctx)
 {
     this._ctx = ctx;
 }