示例#1
0
        public PlayReactor?Connect()
        {
            TcpClient client = localPort is int port ? new TcpClient(new IPEndPoint(IPAddress.Any, port)) : new TcpClient();

            console.Output.WriteLine($"Connecting to {ipAddress}:{this.port}...");
            client.Connect(new IPEndPoint(ipAddress, this.port));
            console.Output.WriteLine("Connected!");

            TCPMessageSender messageSender = new TCPMessageSender(client.GetStream());

            messageSender.QueueMessage(new ConnectClient());
            console.Output.WriteLine("Hailing server...");
            messageSender.SendOneMessage();

            TCPMessagePasser messagePasser = new TCPMessagePasser(client.GetStream(), this);

            while (!serverState.HasValue)
            {
                console.Output.WriteLine("Listening for response...");
                messagePasser.ListenAndReactClient();
            }

            ConnectServer ss = serverState.Value;

            if (ss.CanHost)
            {
                return(new PlayReactor(client, ss));
            }
            else
            {
                return(null);
            }
        }
示例#2
0
        public async Task ReactToMessages()
        {
            IMessage message = new ChatMessageClient(0, "Hello World!");

            TcpListener listener = new TcpListener(endPoint);

            listener.Start();
            Task <TcpClient> receiverTask = listener.AcceptTcpClientAsync();

            using TcpClient sender = new TcpClient();
            sender.Connect(endPoint);
            TCPMessageSender messageSender = new TCPMessageSender(sender.GetStream());

            messageSender.PlayerIntegerSize = playerIntegerSize;
            messageSender.QueueMessage(message);
            messageSender.SendOneMessage();
            sender.Close();

            using TcpClient receiver = await receiverTask;
            listener.Stop();

            byte[] bytes = new byte[256];
            receiver.GetStream().Read(bytes, 0, bytes.Length);
            IMessage receivedMessage = Serializer.DeSerializeClient(bytes, playerIntegerSize);

            Assert.AreEqual(message, receivedMessage, "Should receive the same message as was sent.");
        }
示例#3
0
        public PlayReactor(TcpClient client, ConnectServer ss)
        {
            playerId = ss.PlayerId;

            this.client   = client;
            messagePasser = new TCPMessagePasser(this.client.GetStream(), this);
            messagePasser.PlayerIntegerSize = ss.PlayerIntegerSize;
            messageSender = new TCPMessageSender(this.client.GetStream());
            messageSender.PlayerIntegerSize = ss.PlayerIntegerSize;

            main = new MainComponent();
        }