Example #1
0
        /// <summary>
        /// 组装查询终端属性消息
        /// </summary>
        /// <param name="msgBodyProps"></param>
        /// <param name="phone"></param>
        /// <param name="flowId"></param>
        /// <returns></returns>
        public static byte[] rtnServerSelectRespMsg(int msgBodyProps, string phone, int flowId)
        {
            List <byte> byteSource = new List <byte>();

            // 1. 0x7e
            byte[] bt1 = ExplainUtils.integerTo1Bytes(pkg_delimiter);
            // 2. 消息ID word(16)
            byte[] bt2 = ExplainUtils.integerTo2Bytes(cmd_terminal_prop_query);
            // 3.消息体属性
            byte[] bt3 = ExplainUtils.integerTo2Bytes(msgBodyProps);
            // 4. 终端手机号 bcd[6]
            byte[] bt4 = ExplainUtils.string2Bcd(phone);
            // 5. 消息流水号 word(16),按发送顺序从 0 开始循环累加
            byte[] bt5 = ExplainUtils.integerTo2Bytes(flowId);

            byteSource.AddRange(bt1);
            byteSource.AddRange(bt2);
            byteSource.AddRange(bt3);
            byteSource.AddRange(bt4);
            byteSource.AddRange(bt5);

            // 6.校验码
            int checkSum = ExplainUtils.getCheckSum4JT808(byteSource.ToArray(), 1, (int)(byteSource.Count));

            byte[] bt9 = ExplainUtils.integerTo1Bytes(checkSum);
            byteSource.AddRange(bt9);
            // 7. 0x7e
            byteSource.AddRange(bt1);
            // 转义
            return(ExplainUtils.DoEscape4Send(byteSource.ToArray(), 1, byteSource.ToArray().Length - 1));
        }
Example #2
0
 /// <summary>
 /// 主动下发校时信息(定时任务)
 /// </summary>
 /// <param name="code"></param>
 public static void SendCheckTimerInfo(NewEnergySession session, string code)
 {
     //68 0C 0C 68 5C 12 12 00 08 09 17 10 12 13 23 28 90 16
     char[]   a      = code.ToCharArray();
     string[] strArr = ExplainUtils.str2StrArr(code);
     byte[]   msg    = new byte[18];
     msg[0] = 0x68;
     msg[1] = 0x0C;
     msg[2] = 0x0C;
     msg[3] = 0x68;
     msg[4] = 0x5C;
     msg[5] = ExplainUtils.strToToHexByte(strArr[0])[0];
     msg[6] = ExplainUtils.strToToHexByte(strArr[1])[0];
     msg[7] = ExplainUtils.strToToHexByte(strArr[2])[0];
     msg[8] = ExplainUtils.strToToHexByte(strArr[3])[0];
     msg[9] = 0x09;
     System.Timers.Timer timer = new System.Timers.Timer();
     timer.Interval = int.Parse(ConfigurationManager.AppSettings["interval"]);
     timer.Enabled  = true;
     timer.Elapsed += (obj, e) => {
         DateTime now     = DateTime.Now;
         string[] timeArr = now.ToString("yy-MM-dd-HH-mm-ss").Split('-');
         msg[10] = ExplainUtils.string2Bcd(timeArr[0])[0];
         msg[11] = ExplainUtils.string2Bcd(timeArr[1])[0];
         msg[12] = ExplainUtils.string2Bcd(timeArr[2])[0];
         msg[13] = ExplainUtils.string2Bcd(timeArr[3])[0];
         msg[14] = ExplainUtils.string2Bcd(timeArr[4])[0];
         msg[15] = ExplainUtils.string2Bcd(timeArr[5])[0];
         int    index  = Array.LastIndexOf(msg, (byte)0x68);
         int    len    = msg.Length - 2 - index;
         byte[] newArr = new byte[len];
         Buffer.BlockCopy(msg, index, newArr, 0, len);
         msg[msg.Length - 2] = ExplainUtils.makeCheckSum(newArr);
         msg[17]             = 0x16;
         String str = BitConverter.ToString(msg).Replace("-", " ");
         //Console.WriteLine("{0} 定时任务 >> 主动下发校时:{1}", DateTime.Now, str);
         logger.Info("<<" + code + ">>timer start,send checking time info to<<" + session.RemoteEndPoint + ">>:" + str);
         session.Send(msg, 0, msg.Length);
     };
     timer.Start();
     if (!timers.ContainsKey(code))
     {
         timers.TryAdd(code, timer);
     }
     else
     {
         timers[code] = timer;
     }
 }
Example #3
0
        /// <summary>
        /// 下发校时消息
        /// </summary>
        /// <param name="sendMsg"></param>
        /// <param name="session"></param>
        /// <param name="typeIndex"></param>
        /// <param name="index"></param>
        public static void SendCheckTimerInfo(byte[] sendMsg, NewEnergySession session, int typeIndex, int index)
        {
            DateTime now = DateTime.Now;

            string[] timeArr = now.ToString("yy-MM-dd-HH-mm-ss").Split('-');
            sendMsg[typeIndex + 1] = ExplainUtils.string2Bcd(timeArr[0])[0];
            sendMsg[typeIndex + 2] = ExplainUtils.string2Bcd(timeArr[1])[0];
            sendMsg[typeIndex + 3] = ExplainUtils.string2Bcd(timeArr[2])[0];
            sendMsg[typeIndex + 4] = ExplainUtils.string2Bcd(timeArr[3])[0];
            sendMsg[typeIndex + 5] = ExplainUtils.string2Bcd(timeArr[4])[0];
            sendMsg[typeIndex + 6] = ExplainUtils.string2Bcd(timeArr[5])[0];
            int len = sendMsg.Length - 2 - index;

            byte[] newArr = new byte[len];
            Buffer.BlockCopy(sendMsg, index, newArr, 0, len);
            sendMsg[sendMsg.Length - 2] = ExplainUtils.makeCheckSum(newArr);
            String reply = BitConverter.ToString(sendMsg).Replace("-", " ");

            logger.Info("checking time reply<<" + session.RemoteEndPoint + ">>: " + reply);
            Console.WriteLine("checking time reply<<{0}>>: {1}", session.RemoteEndPoint, reply);
            session.Send(sendMsg, 0, sendMsg.Length);//回复客户端
        }
Example #4
0
        //组装平台通用应答消息
        public static byte[] rtnServerCommonRespMsg(int msgBodyProps, string phone, int flowId, int msgId)
        {
            //7E
            //8001            消息ID
            //0005            消息体属性
            //018512345678    手机号
            //0015            消息流水号
            //0015            应答流水号
            //04              结果(00成功, 01失败, 02消息有误, 03不支持,04报警处理确认)
            //BA            鉴权码
            //7E

            MemoryStream ms         = new MemoryStream();
            List <byte>  byteSource = new List <byte>();

            // 1. 0x7e
            //ms.Write(ExplainUtils.integerTo1Bytes(pkg_delimiter), 0, 1);
            byte[] bt1 = ExplainUtils.integerTo1Bytes(pkg_delimiter);
            // 2. 消息ID word(16)
            //ms.Write(ExplainUtils.integerTo2Bytes(cmd_terminal_register_resp), 0, 2);
            byte[] bt2 = ExplainUtils.integerTo2Bytes(cmd_common_resp);
            // 3.消息体属性
            byte[] bt3 = ExplainUtils.integerTo2Bytes(msgBodyProps);
            // 4. 终端手机号 bcd[6]
            //ms.Write(ExplainUtils.string2Bcd(phone), 0, 6);
            byte[] bt4 = ExplainUtils.string2Bcd(phone);
            // 5. 消息流水号 word(16),按发送顺序从 0 开始循环累加
            //ms.Write(ExplainUtils.integerTo2Bytes(flowId), 0, 2);
            byte[] bt5 = ExplainUtils.integerTo2Bytes(flowId);
            // 6. 应答流水号
            //ms.Write(ExplainUtils.integerTo2Bytes(flowId), 0, 2);
            byte[] bt6 = ExplainUtils.integerTo2Bytes(flowId);
            // 7. 对应终端消息ID
            byte[] bt7 = ExplainUtils.integerTo2Bytes(msgId);

            // 8. 成功
            //ms.Write(ExplainUtils.integerTo1Bytes(0), 0, 1);
            byte[] bt8 = ExplainUtils.integerTo1Bytes(0);



            byteSource.AddRange(bt1);
            byteSource.AddRange(bt2);
            byteSource.AddRange(bt3);
            byteSource.AddRange(bt4);
            byteSource.AddRange(bt5);
            byteSource.AddRange(bt6);
            byteSource.AddRange(bt7);
            byteSource.AddRange(bt8);
            // 9. BA 校验码
            // 校验码
            int checkSum = ExplainUtils.getCheckSum4JT808(byteSource.ToArray(), 1, (int)(byteSource.Count));

            //ms.Write(ExplainUtils.integerTo1Bytes(checkSum), 0, 1);
            byte[] bt9 = ExplainUtils.integerTo1Bytes(checkSum);
            // 11. 0x7e
            //ms.Write(ExplainUtils.integerTo1Bytes(pkg_delimiter), 0, 1);
            byteSource.AddRange(bt9);
            byteSource.AddRange(bt1);

            // 转义
            return(ExplainUtils.DoEscape4Send(byteSource.ToArray(), 1, byteSource.ToArray().Length - 1));
        }
Example #5
0
        //组装终端应答消息
        public static byte[] rtnTerminalRespMsg(int msgBodyProps, string phone, int flowId)
        {
            //7E
            //8100            消息ID
            //0004            消息体属性
            //018512345678    手机号
            //0015            消息流水号
            //0015            应答流水号
            //04              结果(00成功, 01车辆已被注册, 02数据库中无该车辆, 03终端已被注册, 04数据库中无该终端)  无车辆与无终端有什么区别 ?
            //313C             鉴权码
            //7E

            MemoryStream ms         = new MemoryStream();
            List <byte>  byteSource = new List <byte>();

            // 1. 0x7e
            //ms.Write(ExplainUtils.integerTo1Bytes(pkg_delimiter), 0, 1);
            byte[] bt1 = ExplainUtils.integerTo1Bytes(pkg_delimiter);
            // 2. 消息ID word(16)
            //ms.Write(ExplainUtils.integerTo2Bytes(cmd_terminal_register_resp), 0, 2);
            byte[] bt2 = ExplainUtils.integerTo2Bytes(cmd_terminal_register_resp);
            // 3.消息体属性
            byte[] bt3 = ExplainUtils.integerTo2Bytes(msgBodyProps);
            // 4. 终端手机号 bcd[6]
            //ms.Write(ExplainUtils.string2Bcd(phone), 0, 6);
            byte[] bt4 = ExplainUtils.string2Bcd(phone);
            // 5. 消息流水号 word(16),按发送顺序从 0 开始循环累加
            //ms.Write(ExplainUtils.integerTo2Bytes(flowId), 0, 2);
            byte[] bt5 = ExplainUtils.integerTo2Bytes(flowId);
            // 6. 应答流水号
            //ms.Write(ExplainUtils.integerTo2Bytes(flowId), 0, 2);
            byte[] bt6 = ExplainUtils.integerTo2Bytes(flowId);
            // 7. 成功
            //ms.Write(ExplainUtils.integerTo1Bytes(0), 0, 1);
            byte[] bt7 = ExplainUtils.integerTo1Bytes(0);
            // 8. 鉴权码
            //ms.Write(System.Text.Encoding.GetEncoding(string_encoding).GetBytes(replyToken), 0, replyToken.Length);
            byte[] bt8 = System.Text.Encoding.GetEncoding(string_encoding).GetBytes(replyToken);


            byteSource.AddRange(bt1);
            byteSource.AddRange(bt2);
            byteSource.AddRange(bt3);
            byteSource.AddRange(bt4);
            byteSource.AddRange(bt5);
            byteSource.AddRange(bt6);
            byteSource.AddRange(bt7);
            byteSource.AddRange(bt8);
            // 9. BA 校验码
            // 校验码
            int checkSum = ExplainUtils.getCheckSum4JT808(byteSource.ToArray(), 1, (int)(byteSource.Count));

            //ms.Write(ExplainUtils.integerTo1Bytes(checkSum), 0, 1);
            byte[] bt9 = ExplainUtils.integerTo1Bytes(checkSum);
            // 11. 0x7e
            //ms.Write(ExplainUtils.integerTo1Bytes(pkg_delimiter), 0, 1);
            byteSource.AddRange(bt9);
            byteSource.AddRange(bt1);

            // 转义
            return(ExplainUtils.DoEscape4Send(byteSource.ToArray(), 1, byteSource.ToArray().Length - 1));
        }