Beispiel #1
0
        public void Test_UnPack32()
        {
            /* Example table from documentation
             * Value	    NumHeader16	NumHeader32
             *  0	        "\x00"	    "\x00"
             *  127	        "\x7F"	    "\x7F"
             *  128	        "\x80\x80"	"\x80\x00\x00\x80"
             *  32767       "\xFF\FF"	"\x80\x00\x7F\xFF"
             *  32768	    "\x80\00"	"\x80\x00\x80\x00"
             *  32895	    "\x80\7F"	"\x80\x00\x80\x7F"
             *  2147483647	-	        "\xFF\xFF\xFF\xFF"
             */
            uint res = NumHeader.unpack32(new byte[] { 0x00 });

            Assert.IsTrue(res == 0);
            res = NumHeader.unpack32(new byte[] { 0x7F });
            Assert.IsTrue(res == 127);
            res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x00, 0x80 });
            Assert.IsTrue(res == 128);
            res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x7F, 0xFF });
            Assert.IsTrue(res == 32767);
            res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x80, 0x00 });
            Assert.IsTrue(res == 32768);
            res = NumHeader.unpack32(new byte[] { 0x80, 0x00, 0x80, 0x7F });
            Assert.IsTrue(res == 32895);
            res = NumHeader.unpack32(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF });
            Assert.IsTrue(res == 2147483647);
        }
Beispiel #2
0
 public void Test_Pack32()
 {
     /* Example table from documentation
      * Value	    NumHeader16	NumHeader32
      *  0	        "\x00"	    "\x00"
      *  127	        "\x7F"	    "\x7F"
      *  128	        "\x80\x80"	"\x80\x00\x00\x80"
      *  32767       "\xFF\FF"	"\x80\x00\x7F\xFF"
      *  32768	    "\x80\00"	"\x80\x00\x80\x00"
      *  32895	    "\x80\7F"	"\x80\x00\x80\x7F"
      *  2147483647	-	        "\xFF\xFF\xFF\xFF"
      */
     byte[] res = NumHeader.pack32(0x00);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0x00 }));
     res = NumHeader.pack32(127);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0x7F }));
     res = NumHeader.pack32(128);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x00, 0x80 }));
     res = NumHeader.pack32(32767);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x7F, 0xFF }));
     res = NumHeader.pack32(32768);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x00 }));
     res = NumHeader.pack32(32895);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x7F }));
     res = NumHeader.pack32(2147483647);
     Assert.IsTrue(res.SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }));
 }
 public void Test_decode_32()
 {
     NumHeader.decodeReturn ret = NumHeader.decode(new List <byte> {
         0x00
     }, 0, 32);
     Assert.AreEqual(ret.value, (uint)0x00);
     Assert.AreEqual(ret.bytesParsed, 1);
     ret = NumHeader.decode(new List <byte> {
         0x7F
     }, 0, 32);
     Assert.AreEqual(ret.value, (uint)0x7F);
     Assert.AreEqual(ret.bytesParsed, 1);
     ret = NumHeader.decode(new List <byte> {
         0x80, 0x00, 0x00, 0x80
     }, 0, 32);
     Assert.AreEqual(ret.value, (uint)0x80);
     Assert.AreEqual(ret.bytesParsed, 4);
     ret = NumHeader.decode(new List <byte> {
         0x80, 0x00, 0x7F, 0xFF
     }, 0, 32);
     Assert.AreEqual(ret.value, (uint)0x7FFF);
     Assert.AreEqual(ret.bytesParsed, 4);
     ret = NumHeader.decode(new List <byte> {
         0x80, 0x00, 0x80, 0x00
     }, 0, 32);
     Assert.AreEqual(ret.value, (uint)0x8000);
     Assert.AreEqual(ret.bytesParsed, 4);
     ret = NumHeader.decode(new List <byte> {
         0xFF, 0xFF, 0xFF, 0xFF
     }, 0, 32);
     Assert.AreEqual(ret.value, (uint)0x7FFFFFFF);
     Assert.AreEqual(ret.bytesParsed, 4);
 }
        public void Test_encode_32()
        {
            byte[] res = NumHeader.pack32(0x00);
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x00 }));
            res = NumHeader.pack32(127);
            //8b
            res = NumHeader.encode(0, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x00 }));
            res = NumHeader.encode(0x7F, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x7F }));
            // 32b

            /*
             * 32767	"\xFF\FF"	"\x80\x00\x7F\xFF"
             * 32768	"\x80\00"	"\x80\x00\x80\x00"
             * 32895	"\x80\7F"	"\x80\x00\x80\x7F"
             */
            res = NumHeader.encode(0x80, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x00, 0x80 }));
            res = NumHeader.encode(0x7FFF, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x7F, 0xFF }));
            res = NumHeader.encode(0x8000, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x00 }));
            res = NumHeader.encode(0x807F, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0x80, 0x00, 0x80, 0x7F }));
            res = NumHeader.encode(0x7FFFFFFF, 32).ToArray();
            Assert.IsTrue(res.SequenceEqual(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF }));
        }
Beispiel #5
0
        public int _parseMessage(List <byte> data, int iBegin)
        {
            NumHeader.decodeReturn ret = NumHeader.decode(data, iBegin, 32);
            int iNext;

            if (ret.bytesParsed < 0)
            {
                return(ret.bytesParsed);
            }
            else if (ret.bytesParsed == 0)
            {
                return(iBegin);
            }
            else
            {
                iNext = iBegin + (int)ret.bytesParsed;
                if (iNext + ret.value <= data.Count)
                {
                    List <byte> msg = data.GetRange(iNext, (int)ret.value);
                    if (isAcknowledgeSeen == false)
                    {
                        if (msg.Count == 8 && (msg.SequenceEqual(new byte[] { 0xbf, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00 })))
                        {
                            // We are connected
                            isAcknowledgeSeen = true;
                            receiveHandler.onConnected(this);
                            return(iNext + (int)ret.value);
                        }
                        else
                        {
                            throw new ArgumentException("expected acknowledge from apx_server but something else");
                        }
                    }
                    else if (receiveHandler != null)
                    {
                        receiveHandler.onMsgReceived(msg);
                        return(iNext + (int)ret.value);
                    }
                    else
                    {
                        throw new ArgumentException("receiveHandler is null");
                    }
                }
                else
                {
                    return(iBegin);
                }
            }
        }
Beispiel #6
0
        public override void send(List <byte> msg)
        {
            List <byte> data = NumHeader.encode((uint)msg.Count, 32);

            data.AddRange(msg);

            if (tcpStream != null && tcpStream.CanWrite)
            {
                tcpStream.Write(data.ToArray(), 0, data.Count);
                Console.WriteLine("sending: " + data.Count + " bytes");
            }
            else
            {
                Console.WriteLine("Sending rejected, tcpStream not available");
            }

            //Console.WriteLine("_Data_" + Encoding.Default.GetString(data.ToArray()) + "_End_");
        }