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 async Task ReactToLongMessages() { /// <see cref="TCPMessagePasser"/> has a buffer size of 256 const int tooLongMessage = 300; IMessage message = new ChatMessageClient(0, new String('e', tooLongMessage)); TcpListener listener = new TcpListener(endPoint); listener.Start(); Task <TcpClient> receiverTask = listener.AcceptTcpClientAsync(); using TcpClient sender = new TcpClient(); sender.Connect(endPoint); sender.GetStream().Write(Serializer.Serialize(message, playerIntegerSize)); sender.Close(); using TcpClient receiver = await receiverTask; listener.Stop(); Reactor reactor = new Reactor(); TCPMessagePasser messagePasser = new TCPMessagePasser(receiver.GetStream(), reactor); messagePasser.PlayerIntegerSize = playerIntegerSize; messagePasser.ListenAndReactClient(); Assert.IsTrue(new[] { message }.SequenceEqual(reactor.Log), "Should receive the same message as was sent even if it's longer than the buffer."); }
public static void ParseClient(Client player, ChatMessageClient chat) { string message = chat.Text; if (message.Contains("§")) { Log.WritePlayer(player, "Illegal chat: " + message); return; } //Flood detection if (player.ChatFloodNextReset < DateTime.Now) { player.ChatFloodCount = 1; player.ChatFloodNextReset = DateTime.Now.AddSeconds(5); } else { player.ChatFloodCount += 1; if (player.ChatFloodCount > 10) { player.ChatFloodCount = 0; player.BanByServer(DateTime.Now.AddMinutes(5), "Chat Flood"); return; } } if (chat.Text.StartsWith("/")) { MainCommands.ParseClientCommand(player, message); } else { ParseClientChat(player, message); } }
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); sender.GetStream().Write(Serializer.Serialize(message, playerIntegerSize)); sender.Close(); using TcpClient receiver = await receiverTask; listener.Stop(); Reactor reactor = new Reactor(); TCPMessagePasser messagePasser = new TCPMessagePasser(receiver.GetStream(), reactor); messagePasser.PlayerIntegerSize = playerIntegerSize; messagePasser.ListenAndReactClient(); Assert.IsTrue(new[] { message }.SequenceEqual(reactor.Log), "Should receive the same message as was sent."); }
void ChatLoop(string line) { var chat = new ChatMessageClient(line); FromClient(chat); }
public void ReceiveChatMessage(ChatMessageClient message) { main.AddChatMessage(message.SenderPlayerId, message.ChatMessage); }
public void ReceiveChatMessage(ChatMessageClient message) { log.Add(message); }