Пример #1
0
        //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();
                    }
                }
            }
        }
Пример #2
0
        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);
        }