public TCPImplement(MainForm mainForm, TextBox textBox, DynoParameter dynoParam, EmissionInfo emiInfoSim, ModelOracle dbOracle, Logger log) { this.m_mainForm = mainForm; this.m_textBox = textBox; this.m_log = log; this.m_dynoParam = dynoParam; this.m_emiInfoSim = emiInfoSim; this.m_dbOracle = dbOracle; this.m_listener = new TcpListener(IPAddress.Any, this.m_dynoParam.TCPPort); Task.Factory.StartNew(ListenForClients); }
private void HandleClientComm(object param) { TcpClient client = (TcpClient)param; NetworkStream clientStream = client.GetStream(); byte[] recv = new byte[BUFSIZE]; string strRecv; int bytesRead; while (true) { try { bytesRead = clientStream.Read(recv, 0, BUFSIZE); } catch (Exception ex) { m_log.TraceError("TCP client occur error: " + ex.Message); m_mainForm.Invoke((EventHandler) delegate { m_textBox.BackColor = Color.Red; m_textBox.ForeColor = Color.White; m_textBox.Text = "TCP client error: " + ex.Message; }); return; } if (bytesRead == 0) { break; } m_log.TraceInfo(">>>>>>>> Start to handle client request. Ver: " + MainFileVersion.AssemblyVersion + " <<<<<<<<"); strRecv = Encoding.UTF8.GetString(recv, 0, bytesRead); IPEndPoint remoteAddress = (IPEndPoint)client.Client.RemoteEndPoint; m_log.TraceInfo(string.Format("Received message[{0}], from {1}:{2}", strRecv, remoteAddress.Address, remoteAddress.Port)); byte[] sendMessage; string strVIN = ""; if (strRecv != null) { strVIN = strRecv.Split(',')[0].Trim(); } if (strVIN.Length == 17) { sendMessage = Encoding.UTF8.GetBytes("200"); m_log.TraceInfo("Received VIN is OK"); } else { sendMessage = Encoding.UTF8.GetBytes("400"); m_log.TraceError("Received VIN is Illegal"); m_mainForm.Invoke((EventHandler) delegate { m_textBox.BackColor = Color.Red; m_textBox.ForeColor = Color.White; m_textBox.Text = "VIN号长度不为17位"; }); } clientStream.Write(sendMessage, 0, sendMessage.Length); clientStream.Flush(); if (strVIN.Length == 17) { EmissionInfo ei = new EmissionInfo(); string errMsg = string.Empty; bool error = false; if (m_dynoParam.UseSimData) { ei = m_emiInfoSim; ei.VehicleInfo1.VIN = strVIN; ei.VehicleInfo2.VIN = strVIN; } else { try { m_dbOracle.GetEmissionInfo(strVIN, ei, out errMsg); } catch (Exception ex) { error = true; m_log.TraceError("GetEmissionInfo() error: " + ex.Message); m_mainForm.Invoke((EventHandler) delegate { m_textBox.BackColor = Color.Red; m_textBox.ForeColor = Color.White; m_textBox.Text = "GetEmissionInfo() error: " + ex.Message; }); } } if (!error) { if (errMsg.Length > 0 && errMsg != "null") { m_log.TraceError("USP_GET_ENVIRONMENT_DATA() return error: " + errMsg); m_mainForm.Invoke((EventHandler) delegate { m_textBox.BackColor = Color.Red; m_textBox.ForeColor = Color.White; m_textBox.Text = errMsg; }); } else { m_mainForm.Invoke((EventHandler) delegate { m_textBox.BackColor = Color.LightGreen; m_textBox.ForeColor = Color.Black; m_textBox.Text = "VIN[" + strVIN + "]测功机参数匹配成功"; }); } } string JsonFormatted = JsonConvert.SerializeObject(ei, Newtonsoft.Json.Formatting.Indented); m_log.TraceInfo("Send dyno information: " + Environment.NewLine + JsonFormatted); string strSend = JsonConvert.SerializeObject(ei); sendMessage = Encoding.UTF8.GetBytes(strSend); clientStream.Write(sendMessage, 0, sendMessage.Length); clientStream.Flush(); } } clientStream.Close(); client.Close(); }
public void GetEmissionInfo(string strVIN, EmissionInfo ei, out string errMsg) { DataTable dtDynoParam = new DataTable("DYNO_PARAM"); USP_GET_ENVIRONMENT_DATA(strVIN, dtDynoParam, out errMsg); if (dtDynoParam.Rows.Count > 0) { DataRow dr = dtDynoParam.Rows[dtDynoParam.Rows.Count - 1]; ei.VehicleInfo1.VIN = strVIN; ei.VehicleInfo1.VehicleType = dr["VEHICLE_KIND_S"].ToString(); ei.VehicleInfo1.ISQZ = dr["CAR_OR_TRUCK_S"].ToString(); ei.VehicleInfo1.CLXH = dr["VEHICLE_MODEL_S"].ToString(); ei.VehicleInfo1.FDJXH = dr["FDJXH_S"].ToString(); ei.VehicleInfo1.HasOBD = dr["IS_OBD_S"].ToString(); ei.VehicleInfo1.FuelType = dr["FUEL_TYPE_S"].ToString(); ei.VehicleInfo1.Standard = dr["CLPFJD_S"].ToString(); ei.VehicleInfo2.VIN = strVIN; ei.VehicleInfo2.VehicleKind = dr["VEHICLE_KIND_S"].ToString(); ei.VehicleInfo2.VehicleType = dr["VEHICLE_TYPE_S"].ToString(); ei.VehicleInfo2.Model = dr["FDJSB_S"].ToString(); ei.VehicleInfo2.GearBoxType = dr["BSQXSH_S"].ToString(); ei.VehicleInfo2.AdmissionMode = dr["AIR_INLET_S"].ToString(); ei.VehicleInfo2.Volume = dr["FDJPL_S"].ToString(); ei.VehicleInfo2.FuelType = dr["FUEL_TYPE_S"].ToString(); ei.VehicleInfo2.SupplyMode = dr["RYGJSYS_S"].ToString(); ei.VehicleInfo2.RatedRev = dr["EDZHS_S"].ToString(); ei.VehicleInfo2.RatedPower = dr["FDJEDGL_S"].ToString(); ei.VehicleInfo2.DriveMode = dr["DRIVE_MODE_S"].ToString(); ei.VehicleInfo2.MaxMass = dr["MAXSJZZHL_S"].ToString(); ei.VehicleInfo2.RefMass = dr["JZHZHL_S"].ToString(); ei.VehicleInfo2.HasODB = dr["IS_OBD_S"].ToString(); ei.VehicleInfo2.HasPurge = dr["IS_PURGE_S"].ToString(); ei.VehicleInfo2.IsEFI = dr["IS_EFI_S"].ToString(); ei.VehicleInfo2.MaxLoad = dr["NUM_OR_WEIGHT_S"].ToString(); ei.VehicleInfo2.CarOrTruck = dr["CAR_OR_TRUCK_S"].ToString(); ei.VehicleInfo2.Cylinder = dr["QGS_S"].ToString(); ei.VehicleInfo2.IsTransform = dr["IS_TRANSFORM_S"].ToString(); ei.VehicleInfo2.StandardID = dr["CLPFJD_S"].ToString(); ei.VehicleInfo2.IsAsm = dr["IS_ASM_S"].ToString(); ei.VehicleInfo2.QCZZCJ = dr["SCCMC_S"].ToString(); ei.VehicleInfo2.FDJZZC = dr["FDJSCQY_S"].ToString(); ei.VehicleInfo2.DDJXH = dr["DDJXH_S"].ToString(); ei.VehicleInfo2.XNZZXH = dr["CHNZHZHXH_S"].ToString(); ei.VehicleInfo2.CHZHQXH = dr["CHZHHQXH_S"].ToString(); ei.VehicleInfo2.SCR = dr["SCR_S"].ToString(); ei.VehicleInfo2.SCRXH = dr["SCRXH_S"].ToString(); ei.VehicleInfo2.DPF = dr["DPF_S"].ToString(); ei.VehicleInfo2.DPFXH = dr["DPFXH_S"].ToString(); ei.VehicleInfo2.DCRL = dr["DCHRL_S"].ToString(); // 处理检测方法字符串 string strTestMethod = dr["JCFF_S"].ToString(); if (strTestMethod.Contains("双怠速")) { strTestMethod = "双怠速法"; } else if (strTestMethod.Contains("稳态工况")) { strTestMethod = "稳态工况"; } else if (strTestMethod.Contains("简易瞬态")) { strTestMethod = "简易瞬态"; } else if (strTestMethod.Contains("加载减速")) { strTestMethod = "加载减速"; } else if (strTestMethod.Contains("自由加速")) { strTestMethod = "自由加速"; } else if (strTestMethod.Contains("林格曼")) { strTestMethod = "林格曼黑度"; } else if (strTestMethod.Contains("瞬态工况")) { strTestMethod = "瞬态工况"; } else if (strTestMethod.Contains("不透光")) { strTestMethod = "不透光法"; } else if (strTestMethod.Contains("滤纸式")) { strTestMethod = "滤纸式法"; } ei.VehicleInfo2.JCFF = strTestMethod; } }