Beispiel #1
0
        /// <summary>
        /// 根据相应产品协议解析接收的数据
        /// </summary>
        /// <param name="pkg"></param>
        private void ParseRecvData(RecvPkg pkg)
        {
            SqlInfo sqltext;

            switch (Svc.GetProdName(pkg.connId))
            {
            case "KS95T":
            {
                sqltext = ks95t.GetSqlText(Svc.GetDevId(pkg.connId), pkg.data);
            }
            break;

            default:
                return;
            }
            if (sqltext.IsValid)
            {
                try
                {
                    dbHelper.ExecuteNonQuery(sqltext.Command, sqltext.Param);
                }
                catch (Exception)
                {
                }
            }
        }
Beispiel #2
0
        private HandleResult server_OnReceive(IServer sender, IntPtr connId, int length)
        {
            //string recievedStr = Encoding.Default.GetString(data);
            byte[] data;
            server.Fetch(connId, length, out data);
            RecvPkg pkg = new RecvPkg((uint)connId, data);

            receiveThreadPool.Submit(AnalyseReciveData, pkg, -1);

#if DEBUG
            Console.WriteLine(string.Format("收到连接ID:{0} 的信息,长度:{1},内容:{2}", connId, length, BitConverter.ToString(data)));
#endif
            return(HandleResult.Ok);
        }
Beispiel #3
0
        /// <summary>
        /// 用于分析和处理接收的数据
        /// </summary>
        /// <param name="obj"></param>
        private void AnalyseReciveData(object obj)
        {
            RecvPkg pkg = (RecvPkg)obj;
            DevInfo tmp;

            if (Svc.UpdateActiveTime(pkg.connId))  //查询到连接,更新活跃时间
            {
                ParseRecvData(pkg);
            }
            else if (ParseLoginPkg(pkg, out tmp)) //未查询到该连接,但解析登录包正确,则进行登录操作
            {
                Svc.Login(tmp);
            }
            else //登录不成功,把设备踢下线
            {
                server.Disconnect(new IntPtr(pkg.connId), true);
            }
        }
Beispiel #4
0
        /// <summary>
        /// 解析登录包
        /// </summary>
        /// <param name="data"></param>
        /// <param name="info"></param>
        /// <returns>登录是否成功</returns>
        private bool ParseLoginPkg(RecvPkg pkg, out DevInfo info)
        {
            info                = new DevInfo();
            info.ConnId         = pkg.connId;
            info.IsOnline       = true;
            info.ConnTime       = DateTime.Now;
            info.LastActiveTime = DateTime.Now;

            int i;

            for (i = 0; i < pkg.data.Length; i++)
            {
                if (pkg.data[i] == '#')
                {
                    break;
                }
            }
            if (pkg.data.First() == '*' && pkg.data.Last() == '*' && i > 0)
            {
                string s = Encoding.Default.GetString(pkg.data);
                try
                {
                    info.ProdName = s.Substring(1, i - 1);
                    info.DevId    = Convert.ToUInt32(s.Substring(i + 1, s.Length - i - 2));
                    return(true);
                }
                catch (Exception)
                {
                    info = null;
                    return(false);
                }
            }
            else
            {
                info = null;
                return(false);
            }
        }