示例#1
0
        public void ProcessSinglePacketTest()
        {
            int logindeniedpacketlength = 2;

            byte ExtraByte1 = 0xAB;
            byte ExtraByte2 = 0xBA;

            byte LoginDeniedPacketID = 0x82;
            LoginRejectReason LoginDeniedReasonCode = LoginRejectReason.CharTransfer;

            byte[] buffer = new byte[] { LoginDeniedPacketID, (byte)LoginDeniedReasonCode, ExtraByte1, ExtraByte2 };

            int bufferDataLengthExpected = buffer.Length - logindeniedpacketlength;

            ServerPacket packet;
            PacketBuffer reader = new PacketBuffer(20);

            using (MemoryStream ms = new MemoryStream(buffer))
            {
                reader.Read(ms);
                packet = handler.RecieveSinglePacketIfAvailable(reader);
            }

            Assert.AreEqual(bufferDataLengthExpected, reader.Length);
            Assert.IsTrue(packet is LoginDeniedPacket);
            Assert.AreEqual(LoginDeniedReasonCode, ((LoginDeniedPacket)packet).Reason);

            Assert.AreEqual(ExtraByte1, reader[0]);
            Assert.AreEqual(ExtraByte2, reader[1]);
        }
示例#2
0
        public void OnPacketTest()
        {
            using (Client client = CreateClient())
            {
                bool connected = false;
                bool gotpacket = false;
                List <ServerPacket> Packets = new List <ServerPacket>();

                int ThisThreadID        = Thread.CurrentContext.ContextID;
                int OnConnectedThreadID = -1;
                int OnPacketThreadID    = -1;

                client.OnConnected       += delegate(string server, int port) { connected = true; OnConnectedThreadID = Thread.CurrentContext.ContextID; };
                client.OnUnhandledPacket += delegate(ServerPacket packet) { gotpacket = true; Packets.Add(packet); OnPacketThreadID = Thread.CurrentContext.ContextID; };

                client.ConnectToServer(IPAddress.Loopback.ToString(), echoserver.Port);

                WaitForTrue(ref connected);

                if (!connected)
                {
                    Assert.Inconclusive("Unable to connect to server.");
                }
                else
                {
                    byte LoginDeniedPacketID = 0x82;
                    LoginRejectReason LoginDeniedReasonCode1 = LoginRejectReason.BadPass;
                    LoginRejectReason LoginDeniedReasonCode2 = LoginRejectReason.Idle;

                    byte[] TwoLoginDeniedPackets = new byte[] { LoginDeniedPacketID, (byte)LoginDeniedReasonCode1, LoginDeniedPacketID, (byte)LoginDeniedReasonCode2 };
                    client.Send(TwoLoginDeniedPackets, 4);

                    Assert.IsTrue(Packets.Count == 0, "We should not have been able to receive a packet this fast, the packet pump may be running synchronously.");

                    WaitForTrue(ref gotpacket);

                    Assert.IsTrue(gotpacket);

                    Assert.IsTrue(Packets.Count > 0);
                    Assert.IsTrue(Packets[0] is LoginDeniedPacket);
                    Assert.AreEqual(LoginDeniedReasonCode1, ((LoginDeniedPacket)Packets[0]).Reason);

                    Assert.IsTrue(Packets.Count > 1);
                    Assert.IsTrue(Packets[1] is LoginDeniedPacket);
                    Assert.AreEqual(LoginDeniedReasonCode2, ((LoginDeniedPacket)Packets[1]).Reason);

                    Assert.AreEqual(ThisThreadID, OnConnectedThreadID, "OnConnected Executed on a different thread!");
                    Assert.AreEqual(ThisThreadID, OnPacketThreadID, "OnPacket Executed on a different thread!");
                }
            }
        }
示例#3
0
        public void ProcessSinglePacketSegmentedTest()
        {
            byte LoginDeniedPacketID = 0x82;
            LoginRejectReason LoginDeniedReasonCode = LoginRejectReason.CharTransfer;

            byte[] buffer = new byte[1];

            buffer[0] = LoginDeniedPacketID;

            int bufferLengthExpected = 1;

            ServerPacket packet;
            PacketBuffer reader = new PacketBuffer(20);

            using (MemoryStream ms = new MemoryStream(buffer))
            {
                reader.Read(ms);
                packet = handler.RecieveSinglePacketIfAvailable(reader);
            }

            Assert.AreEqual(bufferLengthExpected, reader.Length);
            Assert.IsNull(packet);

            buffer               = new byte[2];
            buffer[0]            = LoginDeniedPacketID;
            buffer[1]            = (byte)LoginDeniedReasonCode;
            bufferLengthExpected = 0;

            reader = new PacketBuffer(20);
            using (MemoryStream ms = new MemoryStream(buffer))
            {
                reader.Read(ms);
                packet = handler.RecieveSinglePacketIfAvailable(reader);
            }

            Assert.AreEqual(bufferLengthExpected, reader.Length);
            Assert.IsTrue(packet is LoginDeniedPacket);
            Assert.AreEqual(LoginDeniedReasonCode, ((LoginDeniedPacket)packet).Reason);
        }
示例#4
0
 public LoginDeniedPacket(LoginRejectReason reason)
 {
     Reason = reason;
 }