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; } } }
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); }
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 }); }
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); }
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); }
[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()); }
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); }