Exemplo n.º 1
0
        public async Task WritePixel(WritePixelCommand command)
        {
            if (await IsRateLimited() || await IsBlacklisted())
            {
                //throttle user
                await Task.Delay(TimeSpan.FromSeconds(RateLimitedRequests));

                return;
            }

            var slice = GrainFactory.GetGrain <IPixelSliceGrain>(command.SliceKey);

            await slice.WritePixel(command);

            LastWrite = DateTime.UtcNow;
        }
Exemplo n.º 2
0
        public Task WritePixel(WritePixelCommand command)
        {
            var index         = SliceHelpers.GetIndex(command.X, command.Y);
            var relativeIndex = index - Offset;

            var pixel = _slice.Pixels[relativeIndex];

            //only replace pixel if new command is newer.
            if (command.Timestamp >= pixel.LastTimestamp || !pixel.LastTimestamp.HasValue)
            {
                pixel.Color         = command.Color;
                pixel.LastAuthor    = command.Author;
                pixel.LastTimestamp = command.Timestamp;
            }

            return(TaskDone.Done);
        }
Exemplo n.º 3
0
        private static Task RunBatch(int count, Random random)
        {
            List <Task> tasks = new List <Task>();

            var i = count;

            while (i-- > 0)
            {
                var userid = random.Next() % 10;
                var x      = random.Next() % Constants.Width;
                var y      = random.Next() % Constants.Height;

                var color = (Colors)(random.Next() % 256);

                string username = $"TestClient_{userid}";
                var    author   = GrainClient.GrainFactory.GetGrain <IUserGrain>(username);

                var command = new WritePixelCommand()
                {
                    X         = (short)x,
                    Y         = (short)y,
                    Author    = username,
                    Color     = color,
                    Timestamp = DateTime.UtcNow
                };

                //await author.WritePixel(command);
                tasks.Add(author.WritePixel(command));

                //Console.WriteLine($"{username} wrote pixel {x}x{y} with {color.ToString()}");
            }

            Task.WaitAll(tasks.ToArray());

            return(TaskDone.Done);
        }