/// <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) { } } }
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); }
/// <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); } }
/// <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); } }