示例#1
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.");
        }
示例#2
0
        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.");
        }
示例#3
0
        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);
            }
        }
示例#4
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);
            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.");
        }
示例#5
0
        void ChatLoop(string line)
        {
            var chat = new ChatMessageClient(line);

            FromClient(chat);
        }
示例#6
0
 public void ReceiveChatMessage(ChatMessageClient message)
 {
     main.AddChatMessage(message.SenderPlayerId, message.ChatMessage);
 }
示例#7
0
 public void ReceiveChatMessage(ChatMessageClient message)
 {
     log.Add(message);
 }