Beispiel #1
0
        public void CancelEventNotFound()
        {
            //Arrange
            SetBasicMockDb();
            var controller = new EventController(_logs, _eventRepo);

            var cancel = new EventCancelled
            {
                EventId = "0"
            };

            //Act
            var result = controller.CancelEvent(cancel);

            //Assert
            Assert.IsType <NotFoundResult>(result);
        }
        public IActionResult CancelEvent([FromBody] EventCancelled cancelEvent)
        {
            var authenticatedUser = GetAuthenticatedUserNetname();

            if (!_eventRepo.IsAuthorized(cancelEvent.EventId, authenticatedUser, Role.Creator, true))
            {
                return(Forbid());
            }

            var result = _eventRepo.RemoveEventAsync(cancelEvent).Result;

            if (result != EventActionResult.Success)
            {
                return(NotFound());
            }

            return(Ok());
        }
        public void Start()
        {
            if (Sourse != null && !Sourse.IsCancellationRequested)
            {
                return;
            }

            Sourse = new CancellationTokenSource();

            var callOptions = new CallOptions(new Metadata {
                new Metadata.Entry("mailbox-name", "game")
            }, cancellationToken: Sourse.Token);
            var _call = _client.Mailbox(callOptions.WithWaitForReady());

            _ = Task.Run(async() =>
            {
                var incomeMailQueue = _dbMailQueueRepository.GetIncomeMailQueue();
                await foreach (var message in _call.ResponseStream.ReadAllAsync(Sourse.Token))
                {
                    await incomeMailQueue.WriteAsync(new MailPacket {
                        Id      = message.Id, Content = message.Content.ToByteArray(),
                        Reserve = message.Reserve, UserId = message.UserId, ClientId = message.ClientId
                    });
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("!!!end");
                Console.ResetColor();
            }, Sourse.Token);


            _ = Task.Run(async() =>
            {
                while (!Sourse.Token.IsCancellationRequested)
                {
                    try
                    {
                        if (CurrentMail == null)
                        {
                            if (await _mailChannel.Reader.WaitToReadAsync(Sourse.Token))
                            {
                                if (_mailChannel.Reader.TryRead(out var mail))
                                {
                                    CurrentMail = mail;
                                    await WriteDBMail(CurrentMail);
                                    CurrentMail = null;
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            await WriteDBMail(CurrentMail);
                            CurrentMail = null;
                        }
                    }
                    catch (Exception e)
                    {
                        _logger.LogWarning(e.Message);
                        Sourse.Cancel();
                    }
                }
            }, Sourse.Token);

            async Task WriteDBMail(MailPacket mail)
            {
                var forward = new ForwardMailMessage
                {
                    Id      = mail.Id,
                    Content = mail.Content != null?Google.Protobuf.ByteString.CopyFrom(mail.Content) : Google.Protobuf.ByteString.Empty,
                                  Reserve = mail.ClientId, UserId = mail.UserId, ClientId = mail.ClientId
                };

                try
                {
                    await _call.RequestStream.WriteAsync(forward);
                }
                catch (Exception e)
                {
                    _logger.LogWarning(e.Message);
                    Sourse.Cancel();
                    EventCancelled?.Invoke(_type);
                }
            }
        }