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); } }
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."); }
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(); }