//public void HandleRequest(Socket clientSocket, byte[] buffer) //{ // var messageWrapper = MessageWrapper.Load(buffer, _messageReaders); // switch (messageWrapper.ClientType) // { // case ClientType.Scavenger: // var scavengerService = new ScavengerService(new ScavengerClient(clientSocket)); // _scavengerHandlers[messageWrapper.MessageType](scavengerService, messageWrapper); // break; // case ClientType.Guide: // var guideService = new GuideService(new GuideClient(clientSocket)); // _guideHandlers[messageWrapper.MessageType](guideService, messageWrapper); // break; // default: // throw new ArgumentOutOfRangeException(); // } //} internal async Task HandleClient(TcpClient client, CancellationToken cancellationToken) { using (client) { var buffer = new byte[bufferLength]; var stream = client.GetStream(); while (!cancellationToken.IsCancellationRequested) { var amountReadTask = stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken); var amountRead = amountReadTask.Result; if (amountRead == 0) { break; } var messageWrapper = MessageWrapper.Load(buffer, _messageReaders); switch (messageWrapper.ClientType) { case ClientType.Scavenger: var scavengerService = new ScavengerService(); await scavengerService.SetClient(new ScavengerClient(stream, messageWrapper.ClientId)); await _scavengerHandlers[messageWrapper.MessageType](scavengerService, messageWrapper); break; case ClientType.Guide: var guideService = new GuideService(); await guideService.SetClient(new GuideClient(stream, messageWrapper.ClientId)); await _guideHandlers[messageWrapper.MessageType](guideService, messageWrapper); break; default: throw new ArgumentOutOfRangeException(); } } } }
public void StartLobby() { IGuideService guideService = new GuideService(IpAddress); IScavengerService scavengerService = new ScavengerService(IpAddress); var guideClient = new TestGuideClient(); var scavengerClient = new TestScavengerClient(); var guideReady = false; var scavengerReady = false; guideClient.OnLobbyReady += guid => guideReady = true; scavengerClient.OnLobbyReady += guid => scavengerReady = true; guideService.Start(guideClient); scavengerService.Start(scavengerClient); while (!guideReady && !scavengerReady) { } Assert.IsTrue(guideReady && scavengerReady); }