public async Task Run_For_5_Generations() { StartTrainingSessionRequest startTrainingSessionRequest = new StartTrainingSessionRequest { Id = Guid.NewGuid(), DateTime = DateTime.Now, TrainingRoomId = TrainingRoomId, UserId = UserId }; StartTrainingSessionResponse startTrainingSessionResponse = await TrainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); Guid trainingSessionId = startTrainingSessionResponse.TrainingSession.Id; int generations = 5; PostOrganismsScoreResponse postOrganismsScoreResponse = default; for (int i = 1; i < generations; i++) { GetOrganismsRequest getOrganismsRequest = GetOrganismsRequest(trainingSessionId); GetOrganismsResponse getOrganismsResponse = await TrainingSessionService.GetOrganismsAsync(getOrganismsRequest); PostOrganismsScoreRequest postOrganismsScoreRequest = PostOrganismsScoreRequest(trainingSessionId, getOrganismsResponse); postOrganismsScoreResponse = await TrainingSessionService.PostOrganismsScoreAsync(postOrganismsScoreRequest); } Assert.IsTrue(postOrganismsScoreResponse.Success); Assert.AreEqual("Successfully updated the organisms and advanced a generation!", postOrganismsScoreResponse.Message); }
/// <inheritdoc cref="ITrainingSessionService.StartTrainingSessionAsync(StartTrainingSessionRequest)"/> public async Task <StartTrainingSessionResponse> StartTrainingSessionAsync(StartTrainingSessionRequest startTrainingSessionRequest) { TrainingRoom trainingRoom; if ((trainingRoom = await _trainingRoomRepository.FindSingleOrDefaultAsync(tr => tr.Id.Equals(startTrainingSessionRequest.TrainingRoomId))) == default) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Training room does not exist.")); } UserDto user = await _userService.FindUserAsync(startTrainingSessionRequest.UserId); if (user is null) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User does not exist.")); } if (!trainingRoom.IsUserAuthorized(startTrainingSessionRequest.UserId)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User is not authorized")); } if (!trainingRoom.StartTrainingSession(startTrainingSessionRequest.UserId, out TrainingSession trainingSession)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Training session already started.")); } await EntityRepository.CreateAsync(trainingSession); TrainingSessionDto trainingSessionDto = Mapper.Map <TrainingSessionDto>(trainingSession); return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, trainingSessionDto, "Successfully started a training session.", true)); }
public async Task StartTrainingSessionAsync_Should_Create_A_New_Session() { StartTrainingSessionRequest startTrainingSessionRequest = StartTrainingSessionRequest(TrainingRoomId, UserId); StartTrainingSessionResponse startTrainingSessionResponse = await TrainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); Assert.IsTrue(startTrainingSessionResponse.Success); }
/// <inheritdoc cref="ITrainingRoomService.StartTrainingSessionAsync(StartTrainingSessionRequest)"/> public async Task <StartTrainingSessionResponse> StartTrainingSessionAsync(StartTrainingSessionRequest startTrainingSessionRequest) { TrainingRoom trainingRoom; Expression <Func <TrainingRoom, bool> > predicate = tr => tr.Id.Equals(startTrainingSessionRequest.TrainingRoomId); if ((trainingRoom = await _trainingRoomRepository.FindSingleOrDefaultAsync(predicate)) == default) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Training room does not exist.")); } if (!await _userRepository.ExistsAsync(usr => usr.Id.Equals(startTrainingSessionRequest.UserId))) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User does not exist.")); } if (!trainingRoom.IsUserAuthorized(startTrainingSessionRequest.UserId)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User is not authorized")); } if (!trainingRoom.StartTrainingSession(startTrainingSessionRequest.UserId, out TrainingSession trainingSession)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Failed to start a training session.")); } await _trainingRoomRepository.UpdateAsync(trainingRoom); TrainingSessionDto trainingSessionDto = EntityToDtoConverter.Convert <TrainingSessionDto, TrainingSession>(trainingSession); return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, trainingSessionDto, "Successfully started a training session.", true)); }
/// <inheritdoc cref="ITrainingRoomService.StartTrainingSessionAsync(StartTrainingSessionRequest)"/> public async Task <StartTrainingSessionResponse> StartTrainingSessionAsync(StartTrainingSessionRequest startTrainingSessionRequest) { Expression <Func <TrainingRoom, bool> > predicate = tr => tr.Id.Equals(startTrainingSessionRequest.TrainingRoomId); if (!await _trainingRoomRepository.ExistsAsync(predicate)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Training room does not exist.")); } if (!await _userRepository.ExistsAsync(usr => usr.Id.Equals(startTrainingSessionRequest.UserId))) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User does not exist.")); } TrainingRoom trainingRoom = await _trainingRoomRepository.FindSingleByExpressionAsync(predicate); if (!trainingRoom.IsUserAuthorized(startTrainingSessionRequest.UserId)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "User is not authorized")); } if (!trainingRoom.StartTrainingSession(startTrainingSessionRequest.UserId, out TrainingSession trainingSession)) { return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, null, "Failed to start a training session.")); } await _trainingRoomRepository.UpdateAsync(trainingRoom); _trainingSessionOrganismsDictionary.TryAdd(trainingSession.Id, new ConcurrentQueue <Organism>(trainingRoom.Species.SelectMany(sp => sp.LastGenerationOrganisms))); TrainingSessionDto trainingSessionDto = EntityToDtoConverter.Convert <TrainingSessionDto, TrainingSession>(trainingSession); return(new StartTrainingSessionResponse(startTrainingSessionRequest.Id, trainingSessionDto, "Successfully started a training session.", true)); }
public async Task StartTrainingSessionAsync_Should_Fail_Due_To_Unknown_TrainingRoom_Id() { StartTrainingSessionRequest startTrainingSessionRequest = StartTrainingSessionRequest(Guid.NewGuid(), UserId); StartTrainingSessionResponse startTrainingSessionResponse = await TrainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); Assert.IsFalse(startTrainingSessionResponse.Success); Assert.AreEqual("Training room does not exist.", startTrainingSessionResponse.Message); }
public async Task <IActionResult> StartTrainingSessionAsync(StartTrainingSessionRequest startTrainingSessionRequest) { if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrorMessages())); } StartTrainingSessionResponse response = await _trainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); return(new OkObjectResult(response)); }
public async Task EndTrainingSessionAsync_Should_Successfully_End_The_TrainingSession() { StartTrainingSessionRequest startTrainingSessionRequest = StartTrainingSessionRequest(TrainingRoomId, UserId); StartTrainingSessionResponse startTrainingSessionResponse = await TrainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); Guid trainingSessionId = startTrainingSessionResponse.TrainingSession.Id; EndTrainingSessionRequest endTrainingSessionRequest = EndTrainingSessionRequest(trainingSessionId); EndTrainingSessionResponse endTrainingSessionResponse = await TrainingSessionService.EndTrainingSessionAsync(endTrainingSessionRequest); Assert.IsTrue(endTrainingSessionResponse.Success); }
public async Task GetOrganismsAsync_Should_Successfully_Return_15_Organisms() { StartTrainingSessionRequest startTrainingSessionRequest = new StartTrainingSessionRequest { Id = Guid.NewGuid(), DateTime = DateTime.Now, TrainingRoomId = TrainingRoomId, UserId = UserId }; StartTrainingSessionResponse startTrainingSessionResponse = await TrainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); Guid trainingSessionId = startTrainingSessionResponse.TrainingSession.Id; GetOrganismsRequest getOrganismsRequest = GetOrganismsRequest(trainingSessionId); GetOrganismsResponse getOrganismsResponse = await TrainingSessionService.GetOrganismsAsync(getOrganismsRequest); Assert.IsTrue(getOrganismsResponse.Success); Assert.AreEqual(OrganismCount, getOrganismsResponse.Organisms.Count); }
public async Task PostOrganismsAsync_Should_Successfully_Start_A_New_Generation() { StartTrainingSessionRequest startTrainingSessionRequest = new StartTrainingSessionRequest { Id = Guid.NewGuid(), DateTime = DateTime.Now, TrainingRoomId = TrainingRoomId, UserId = UserId }; StartTrainingSessionResponse startTrainingSessionResponse = await TrainingSessionService.StartTrainingSessionAsync(startTrainingSessionRequest); Guid trainingSessionId = startTrainingSessionResponse.TrainingSession.Id; GetOrganismsRequest getOrganismsRequest = GetOrganismsRequest(trainingSessionId); GetOrganismsResponse getOrganismsResponse = await TrainingSessionService.GetOrganismsAsync(getOrganismsRequest); PostOrganismsScoreRequest postOrganismsScoreRequest = PostOrganismsScoreRequest(trainingSessionId, getOrganismsResponse); PostOrganismsScoreResponse postOrganismsScoreResponse = await TrainingSessionService.PostOrganismsScoreAsync(postOrganismsScoreRequest); Assert.IsTrue(postOrganismsScoreResponse.Success); Assert.AreEqual("Successfully updated the organisms and advanced a generation!", postOrganismsScoreResponse.Message); }
static async Task Main(string[] args) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); List <Task> tasks = new List <Task>(); for (int j = 0; j < ClientCount; j++) { Task clientTask = Task.Run(async() => { IMessageProcessor messageProcessor = new ClientMessageProcessor(); IMessageSerializer messageSerializer = new JsonMessageSerializer(); SslTcpNetworkConnector networkConnector = new SslTcpNetworkConnector(messageSerializer, messageProcessor, Host, Port); await networkConnector.ConnectAsync(CancellationToken.None); await networkConnector.AuthenticateAsClient(CancellationToken.None); networkConnector.Start(); MessageListener <AuthenticateResponse> loginResponseListener = new MessageListener <AuthenticateResponse>(); MessageListener <RegisterResponse> registerMessageListener = new MessageListener <RegisterResponse>(); MessageListener <CreateTrainingRoomResponse> createTrainingRoomResponseListener = new MessageListener <CreateTrainingRoomResponse>(); MessageListener <GetEnabledTrainingRoomsResponse> getEnabledTrainingRoomsResponseListener = new MessageListener <GetEnabledTrainingRoomsResponse>(); MessageListener <StartTrainingSessionResponse> startTrainingSessionResponseListener = new MessageListener <StartTrainingSessionResponse>(); MessageListener <GetOrganismsResponse> getOrganismsResponseListener = new MessageListener <GetOrganismsResponse>(); MessageListener <PostOrganismsScoreResponse> postOrganismsScoreResponseListener = new MessageListener <PostOrganismsScoreResponse>(); loginResponseListener.Subscribe(messageProcessor); createTrainingRoomResponseListener.Subscribe(messageProcessor); registerMessageListener.Subscribe(messageProcessor); getEnabledTrainingRoomsResponseListener.Subscribe(messageProcessor); startTrainingSessionResponseListener.Subscribe(messageProcessor); getOrganismsResponseListener.Subscribe(messageProcessor); postOrganismsScoreResponseListener.Subscribe(messageProcessor); for (int i = 0; i < MessageCount; i++) { Guid name = Guid.NewGuid(); RegisterRequest registerRequest = new RegisterRequest(name.ToString(), "password2", "Name2"); await networkConnector.SendMessageAsync(registerRequest, CancellationToken.None); RegisterResponse registerResponse = await registerMessageListener.ReceiveMessageAsync(CancellationToken.None); Console.WriteLine($"RegisterResponse: \n\tSuccess: {registerResponse.Success}, \n\tRequestId: {registerResponse.RequestId}, \n\tResponseId: {registerResponse.Id}, \n\tMessage:{registerResponse.Message}"); AuthenticateRequest loginRequest = new AuthenticateRequest(name.ToString(), "password2", "Name2"); await networkConnector.SendMessageAsync(loginRequest, CancellationToken.None); AuthenticateResponse loginResponse = await loginResponseListener.ReceiveMessageAsync(CancellationToken.None); Console.WriteLine($"AuthenticateResponse: \n\tSuccess: {loginResponse.Success}, \n\tAccessToken: {loginResponse.AccessToken}, \n\tRequestId: {loginResponse.RequestId}, \n\tResponseId: {loginResponse.Id}, \n\tMessage:{loginResponse.Message}"); TrainingRoomSettings trainingRoomSettings = new TrainingRoomSettings(50, 2, 1, 1, 1, 0.4, 3, 0.05, 0.03, 0.75, 0.001, 1, 0.8, 0.1, 0.5, 0.25, 0); CreateTrainingRoomRequest createTrainingRoomRequest = new CreateTrainingRoomRequest(loginResponse.UserId, Guid.NewGuid().ToString(), trainingRoomSettings); await networkConnector.SendMessageAsync(createTrainingRoomRequest, CancellationToken.None); CreateTrainingRoomResponse createTrainingRoomResponse = await createTrainingRoomResponseListener.ReceiveMessageAsync(CancellationToken.None); Console.WriteLine($"CreateTrainingRoomResponse: \n\tId: {createTrainingRoomResponse.Id}\n\tRequestId: {createTrainingRoomResponse.RequestId}\n\tDateTime: {createTrainingRoomResponse.DateTime}\n\tMessage: {createTrainingRoomResponse.Message}\n\tSuccess: {createTrainingRoomResponse.Success}\n\tTrainingRoomId: {createTrainingRoomResponse.TrainingRoomId}"); StartTrainingSessionRequest startTrainingSessionRequest = new StartTrainingSessionRequest(loginResponse.UserId, createTrainingRoomResponse.TrainingRoomId); await networkConnector.SendMessageAsync(startTrainingSessionRequest, CancellationToken.None); StartTrainingSessionResponse startTrainingSessionResponse = await startTrainingSessionResponseListener.ReceiveMessageAsync(CancellationToken.None); Console.WriteLine($"StartTrainingSessionResponse: \n\tId: {startTrainingSessionResponse.Id}\n\tRequestId: {startTrainingSessionResponse.RequestId}\n\tDateTime: {startTrainingSessionResponse.DateTime}\n\tMessage: {startTrainingSessionResponse.Message}\n\tSuccess: {startTrainingSessionResponse.Success}\n\tTrainingSessionId: {startTrainingSessionResponse.TrainingSession.Id}"); await GetAndPostOrganismsAsync(startTrainingSessionResponse, networkConnector, getOrganismsResponseListener, postOrganismsScoreResponseListener); await GetAndPostOrganismsAsync(startTrainingSessionResponse, networkConnector, getOrganismsResponseListener, postOrganismsScoreResponseListener); await GetAndPostOrganismsAsync(startTrainingSessionResponse, networkConnector, getOrganismsResponseListener, postOrganismsScoreResponseListener); await GetAndPostOrganismsAsync(startTrainingSessionResponse, networkConnector, getOrganismsResponseListener, postOrganismsScoreResponseListener); await GetAndPostOrganismsAsync(startTrainingSessionResponse, networkConnector, getOrganismsResponseListener, postOrganismsScoreResponseListener); // await GetAndPostOrganismsAsync(startTrainingSessionResponse, networkConnector, getOrganismsResponseListener, postOrganismsScoreResponseListener); //GetEnabledTrainingRoomsRequest getEnabledTrainingRoomsRequest = new GetEnabledTrainingRoomsRequest(); //await networkConnector.SendMessageAsync(getEnabledTrainingRoomsRequest, CancellationToken.None); //GetEnabledTrainingRoomsResponse getEnabledTrainingRoomsResponse = await getEnabledTrainingRoomsResponseListener.ReceiveMessageAsync(CancellationToken.None); //Console.WriteLine($"GetEnabledTrainingRoomsResponse: \n\tId: {getEnabledTrainingRoomsResponse.Id}\n\tRequestId: {getEnabledTrainingRoomsResponse.RequestId}\n\tDateTime: {getEnabledTrainingRoomsResponse.DateTime}\n\tMessage: {getEnabledTrainingRoomsResponse.Message}\n\tSuccess: {getEnabledTrainingRoomsResponse.Success}"); //foreach (TrainingRoomDto trainingRoomDto in getEnabledTrainingRoomsResponse.TrainingRooms) // Console.WriteLine($"TrainingRoom:\n\tId: {trainingRoomDto.Id}\n\tName: {trainingRoomDto.Name}\n\tOwner: {trainingRoomDto.Owner.Username}"); } loginResponseListener.Unsubscribe(); }); tasks.Add(clientTask); } await Task.WhenAll(tasks).ContinueWith(action => { stopwatch.Stop(); Console.WriteLine($"Messages per second: {TotalMessages / stopwatch.Elapsed.TotalSeconds:N0}"); Console.ReadKey(); }); }