Example #1
0
        static void Main(string[] args)
        {
            int port = 6066;

            if (args.Length >= 1)
            {
                port = Convert.ToInt32(args[0]);
            }
            Assembly        asm = Assembly.GetExecutingAssembly();
            FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(asm.Location);

            Log.InfoFormat("DAC.Receiver({0}) started, listening on {1}", fvi.FileVersion, port);
            TranDataReceiver r = new TranDataReceiver(new GprsDtuServer(port));

            r.Start();
            r.OnClientConnected += (IDtuConnection c, WorkingStatus s) =>
            {
                GprsDtuConnection c2 = (GprsDtuConnection)c;
                Log.InfoFormat("[Server] Client connected: {0}-ip={1},phone={2}", c2.DtuID, c2.IP, c2.PhoneNumber);
            };
            r.OnTranMsgReceived += (TranMsgType type, TranMsg msg) =>
            {
                TranMsg m2 = msg;
                Log.InfoFormat("[Server] Msg Received: id={3}, type={0},len={1}, pkg={2}", type, msg.LoadSize,
                               msg.PackageCount, msg.ID);
            };
            while (true)
            {
                string read = Console.ReadLine();
                if (read == "exit")
                {
                    break;
                }
            }
        }
Example #2
0
        public void TestNextPackageData()
        {
            int len;

            provider.HasMoreData();
            TranMsg[] msgs = provider.NextPackages(out len);
            Assert.AreEqual(5, msgs.Length);
            TranMsg msg1 = TranMsg.Combine(msgs);

            byte[] buff = msg1.Data;

            short fiLen = ValueHelper.GetShort(buff, 0);
            short fdLen = ValueHelper.GetShort(buff, 0 + 2 + fiLen);

            Assert.AreEqual(55, fiLen);
            Assert.AreEqual(4670, fdLen);

            byte[] fib = CompressHelper.Decompress(buff, 2, fiLen);
            byte[] fdb = CompressHelper.Decompress(buff, 4 + fiLen, fdLen);
            using (FileStream writer = new FileStream("vibi.data", FileMode.Create, FileAccess.Write))
            {
                writer.Write(fib, 0, fib.Length);
            }
            using (FileStream writer = new FileStream("vibd.data", FileMode.Create, FileAccess.Write))
            {
                writer.Write(fdb, 0, fdb.Length);
            }

            provider.OnPackageSent();

            Assert.AreEqual(1, provider.Remainder);
        }
Example #3
0
        public TranMsg[] Splite(byte[] buff, int len)
        {
            TranMsg msg = new TranMsg();

            msg.Data = new byte[len];
            Array.Copy(buff, msg.Data, len);
            msg.LoadSize     = (ushort)len;
            msg.PackageIndex = 0;
            msg.PackageCount = 1;
            msg.Type         = TranMsgType.Dac;
            return(new TranMsg[] { msg });
        }
Example #4
0
        public void TestUnmarshallerTranMsg()
        {
            string ack =
                @"FA 0A 0C 00 01 36 01 FF 00 00 02 63 00 39 30 38 56 7A 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 38 56 7A 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 B8 70 80 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 B8 70 80 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 60 BA 01 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 60 BA 01 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 00 28 1C 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 00 28 1C 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 30 13 B0 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 30 13 B0 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 81 AF";
            TranMsg msg = new TranMsg(ValueHelper.StrToToHexByte(ack));

            Assert.AreEqual(10, msg.ID);
            Assert.AreEqual(310, msg.LoadSize);
            Assert.AreEqual(1, msg.PackageCount);
            Assert.AreEqual(0, msg.PackageIndex);
            Assert.AreEqual(TranMsgType.Dac, msg.Type);
            Assert.AreEqual(310, msg.Data.Length);
        }
Example #5
0
        private void OnMsgSent(TranMsg req, TranMsg resp)
        {
            int remained = _dataSender.Remainder;

            if (_totalRemainder > 0)
            {
                this.progressBar1.Value = (int)(remained / _totalRemainder * 100.0);
            }
            else
            {
                this.progressBar1.Value = 0;
            }
            _totalRemainder = remained;
            Log.InfoFormat("Msg sent: {0} bytes.", req.LoadSize);
        }
Example #6
0
        [Timeout(10000)] // 10s
        public void TestReceiver()
        {
            DtuClient c = new DtuClient("127.0.0.1", 6066);

            TranDataReceiver r = new TranDataReceiver(new GprsDtuServer(6066));

            r.Start();

            c.Connect(20120049, "18900000000", "192.168.1.222");
            c.OnReceived = (buff, len) =>
            {
                Thread.Sleep(500);
                var msg =
                    @"FA 2A 0C 00 01 74 01 FF 00 00 02 63 00 39 30 38 56 7A 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 38 56 7A 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 B8 70 80 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 B8 70 80 28 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 60 BA 01 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 60 BA 01 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 00 28 1C 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 00 28 1C 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 30 13 B0 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 30 13 B0 29 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 C0 E3 30 2A 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 63 00 39 30 C0 E3 30 2A 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 16 AF";
                log.DebugFormat("[Client] Sending data...");
                c.Send(ValueHelper.StrToToHexByte(msg));
            };

            // heartbeat, 激励
            c.Send(new HeartBeatTranMsg(20120049, 0).Marshall());

            int receivedCnt = 0;

            r.OnTranMsgReceived += (TranMsgType type, TranMsg msg) =>
            {
                TranMsg m2 = msg;
                log.DebugFormat("[Server] Msg Received: id={3}, type={0},len={1}, pkg={2}", type, msg.LoadSize,
                                msg.PackageCount, msg.ID);
                if (msg.ID == 0)
                {
                    Assert.AreEqual(TranMsgType.HeartBeat, type);
                }
                else
                {
                    Assert.AreEqual(TranMsgType.Dac, type);
                }
                receivedCnt++;
            };
            while (receivedCnt <= 5)
            {
                Thread.Sleep(10);
            }
            c.Close();
            log.DebugFormat("Test Done.");
            Assert.IsTrue(true);
        }
        public TranMsg[] Splite(byte[] buff, int len)
        {
            int             packCnt  = (int)Math.Ceiling(len / (MAX_PACKAGE_SIZE * 1.0));
            IList <TranMsg> msgs     = new List <TranMsg>();
            int             restSize = len;

            for (int i = 0; i < packCnt; i++)
            {
                int     pLen = (i == packCnt - 1) ? restSize : MAX_PACKAGE_SIZE;
                TranMsg msg  = new TranMsg();
                msg.Data = new byte[pLen];
                Array.Copy(buff, i * 1014, msg.Data, 0, pLen);
                msg.LoadSize     = (ushort)pLen;
                msg.PackageIndex = (byte)i;
                msg.PackageCount = (byte)packCnt;
                msg.Type         = TranMsgType.Dac;
                msgs.Add(msg);
                restSize -= pLen;
            }
            return(msgs.ToArray());
        }
Example #8
0
        public void TestMarshallerTranMsg()
        {
            TranMsg msg = new TranMsg
            {
                PackageIndex = 1,
                PackageCount = 2,
                LoadSize     = 4,
                Data         = new byte[] { 1, 2, 3, 4 },
                Type         = TranMsgType.Vib
            };

            byte[] bs = msg.Marshall();
            // fa 00 0b 01 02 00 04 ff 01 02 03 04 e3 af
            string bss = ValueHelper.BytesToHexStr(bs);

            Assert.IsNotNull(bss);
            Console.WriteLine(bss);

            TranMsg msg2 = new TranMsg();

            msg2.Unmarshall(ValueHelper.StrToToHexByte("fb 00 0b 01 02 00 04 ff 01 02 03 04 e3 af"));
            Assert.AreEqual((int)Errors.ERR_INVALID_DATA, msg2.ErrorCode);
            msg2.Unmarshall(ValueHelper.StrToToHexByte("fa 00 0b 01 02 00 04 ff 01 02 03 04 e3 ef"));
            Assert.AreEqual((int)Errors.ERR_INVALID_DATA, msg2.ErrorCode);
            msg2.Unmarshall(ValueHelper.StrToToHexByte("fa 00 0b 01 02 00 04 ff 01 02 03 04 ef af"));
            Assert.AreEqual((int)Errors.ERR_INVALID_DATA, msg2.ErrorCode);
            msg2.Unmarshall(ValueHelper.StrToToHexByte("fa 00 Eb 01 02 00 04 ff 01 02 03 04 e3 af"));
            Assert.AreEqual((int)Errors.ERR_INVALID_DATA, msg2.ErrorCode);

            msg2.Unmarshall(ValueHelper.StrToToHexByte(bss));


            Assert.AreEqual(msg.PackageCount, msg2.PackageCount);
            Assert.AreEqual(msg.PackageIndex, msg2.PackageIndex);
            Assert.AreEqual(msg.LoadSize, msg2.LoadSize);
            Assert.AreEqual(msg.ID, msg2.ID);
            Assert.AreEqual(msg.Type, msg2.Type);
        }