/// <summary> /// 反序列化 /// </summary> /// <param name="b">字节流</param> /// <returns>数据集</returns> protected ClSet Deserialize(byte[] b) { int off = 0; string s = CIPS.Express.ConvertDat.Tools.GetUnicodeString(b, ref off); string tp = null; if (s.StartsWith(typeof(CIPS.ClientCommand).FullName + "\n")) { string[] ss = s.Split('\n'); if (ss.Length == 2) { tp = ss[1]; } } //if (tp != GetType().FullName) // return null; //byte[] head = System.Text.Encoding.Default.GetBytes(cmdhead); //if (!IsCipsClientCmd(b)) // return null; ClSet cs = new ClSet(b, off); ClTable ct = cs.Tables["CmdInfo"]; if (ct != null) { if (ct.Rows.Count > 0) { CmdType = ct.Rows[0][0].ToString(); } if (ct.Rows.Count > 1) { Cmd = ct.Rows[1][0].ToString(); } if (ct.Rows.Count > 2) { StationCode = ct.Rows[2][0].ToString(); } if (ct.Rows.Count > 3) { PostName = ct.Rows[3][0].ToString(); } if (ct.Rows.Count > 4) { Operator = ct.Rows[4][0].ToString(); } if (ct.Rows.Count > 5) { Ip = ct.Rows[5][0].ToString(); } if (ct.Rows.Count > 6) { Note = ct.Rows[6][0].ToString(); } if (ct.Rows.Count > 7) { PackageID = Convert.ToInt64(ct.Rows[7][0]); } } return(cs); }
/// <summary> /// 序列化 /// </summary> /// <returns></returns> public byte[] Serialize() { ClSet cs = new ClSet(); ClTable ct = new ClTable("System"); ct.AddColumn("INFO", typeof(int)); cs.Tables.Add(ct); ClRow _cr = ct.NewRow(); _cr[0] = sysstate; ct.Rows.Add(_cr); int idna = 0, idsna = 1, idsp = 2, idlo = 3, idst = 4; ct = new ClTable("Locoms"); ct.AddColumn("NAME", typeof(string)); ct.AddColumn("SECTIONNA", typeof(string)); ct.AddColumn("SPEED", typeof(short)); ct.AddColumn("LOCATION", typeof(byte)); ct.AddColumn("STATE", typeof(byte)); cs.Tables.Add(ct); foreach (Locom l in this) { ClRow cr = ct.NewRow(); cr[idna] = l.name; cr[idsna] = l.sectionname; cr[idsp] = l.speed; cr[idlo] = l.location; cr[idst] = l.state; ct.Rows.Add(cr); } return(cs.Serialize(2)); }
private void Init(ClSet cs) { ClTable ct = cs.Tables["Locoms"]; if (ct == null) { return; } int idna = 0, idsna = 1, idsp = 2, idlo = 3, idst = 4; foreach (ClRow cr in ct.Rows) { Locom l = new Locom(); l.LocomName = cr[idna].ToString(); l.sectionname = cr[idsna].ToString(); l.speed = Convert.ToInt16(cr[idsp]); l.location = Convert.ToByte(cr[idlo]); l.state = Convert.ToByte(cr[idst]); Add(l); } ct = cs.Tables["System"]; ClRow _cr = ct.Rows[0]; sysstate = (byte)Convert.ToInt32(_cr["INFO"]); }
static TrainWnd[] DeserializeFromClSet(byte[] b, out byte color) { color = 0; ClSet cs = new ClSet(b, 2); ClTable ct1 = cs.Tables["Infomations"], ct2 = cs.Tables["CarStream"]; if (ct1 == null || ct2 == null) { return(new TrainWnd[0]); } TrainWnd[] wnds = new TrainWnd[ct1.Rows.Count]; ClRow[] crs; int col_carcnt = ct1.GetColumnIndex("I_CAR_CNT"); int col_flag = ct1.GetColumnIndex("B_FLAG"); int col_len = ct1.GetColumnIndex("F_LEN"); int col_wegh = ct1.GetColumnIndex("F_WEGH"); int col_tranum = ct1.GetColumnIndex("C_TRA_NUM"); int col_line = ct1.GetColumnIndex("I_LINE_ID"); int col_note = ct1.GetColumnIndex("C_NOTE"); int col_locomtype = ct1.GetColumnIndex("B_LOCOM_TYPE"); int col_grocnt = ct2.GetColumnIndex("I_CAR_CNT"); int col_groid = ct2.GetColumnIndex("I_GRO_ID"); for (int i = 0; i < wnds.Length; i++) { wnds[i] = new TrainWnd(); wnds[i].cnt = Convert.ToInt16(ct1.Rows[i][col_carcnt]); wnds[i].flag = Convert.ToByte(ct1.Rows[i][col_flag]); wnds[i].length = Convert.ToInt16(ct1.Rows[i][col_len]) / 10f; wnds[i].lineID = Convert.ToInt16(ct1.Rows[i][col_line]); wnds[i].weight = Convert.ToSingle(ct1.Rows[i][col_wegh]); wnds[i].trainnum = Convert.ToString(ct1.Rows[i][col_tranum]); wnds[i].infomation = ct1.Rows[i][col_note].ToString(); if (col_locomtype >= 0) { wnds[i].LocomType = Convert.ToByte(ct1.Rows[i][col_locomtype]); } crs = ct2["I_LINE_ID", "=", wnds[i].lineID]; foreach (ClRow cr in crs) { CarInfomation inf = new CarInfomation(); inf.cnt = Convert.ToInt16(cr[col_grocnt]); inf.dir = Convert.ToInt16(cr[col_groid]); wnds[i].infomations.Add(inf); } } try { ct1 = cs.Tables["SYSCOLOR"]; if (ct1 != null && ct1.Rows.Count > 0) { color = Convert.ToByte(ct1.Rows[0][0]); } } catch { } return(wnds); }
/// <summary> /// 序列化 /// </summary> /// <param name="wnds">车次窗</param> /// <param name="color">颜色</param> /// <returns>字节流</returns> public static byte[] Serialize(TrainWnd[] wnds, byte color) { ClSet cs = new ClSet(); ClTable ct1 = new ClTable("Infomations"); ct1.AddColumn("I_LINE_ID", typeof(short)); ct1.AddColumn("C_TRA_NUM", typeof(string)); ct1.AddColumn("F_WEGH", typeof(float)); ct1.AddColumn("F_LEN", typeof(short)); ct1.AddColumn("I_CAR_CNT", typeof(short)); ct1.AddColumn("B_FLAG", typeof(byte)); ct1.AddColumn("C_NOTE", typeof(string)); ct1.AddColumn("B_LOCOM_TYPE", typeof(byte)); ClTable ct2 = new ClTable("CarStream"); ct2.AddColumn("I_LINE_ID", typeof(short)); ct2.AddColumn("I_GRO_ID", typeof(short)); ct2.AddColumn("I_CAR_CNT", typeof(short)); foreach (TrainWnd w in wnds) { ClRow cr = ct1.NewRow(); cr["I_LINE_ID"] = w.lineID; cr["F_WEGH"] = w.weight; cr["F_LEN"] = (short)(w.length * 10 + .5); cr["I_CAR_CNT"] = w.cnt; cr["C_TRA_NUM"] = w.trainnum; cr["B_FLAG"] = w.flag; cr["C_NOTE"] = w.infomation; cr["B_LOCOM_TYPE"] = w.LocomType; ct1.Rows.Add(cr); foreach (CarInfomation inf in w.infomations) { if (inf.cnt > 0) { cr = ct2.NewRow(); cr["I_LINE_ID"] = w.lineID; cr["I_GRO_ID"] = inf.dir; cr["I_CAR_CNT"] = inf.cnt; ct2.Rows.Add(cr); } } } cs.Tables.Add(ct1); cs.Tables.Add(ct2); if (color != 0) { ct2 = new ClTable("SYSCOLOR"); ct2.AddColumn("COLOR", typeof(byte)); ClRow _cr = ct2.NewRow(); _cr[0] = color; ct2.Rows.Add(_cr); cs.Tables.Add(ct2); } byte[] b = cs.Serialize(2); b[0] = 0x33; return(b); }
/// <summary> /// 序列化 /// </summary> /// <param name="cs">数据集</param> /// <returns>字节流</returns> protected byte[] Serialize(ClSet cs) { string s; s = typeof(CIPS.ClientCommand).FullName + "\n" + GetType().FullName + "\0"; ToClTable(cs); byte[] head = System.Text.Encoding.Unicode.GetBytes(s); byte[] b = cs.Serialize(head.Length); head.CopyTo(b, 0); return(b); }
/// <summary> /// 反序列化 /// </summary> /// <param name="b">字节流</param> /// <param name="color">报警颜色</param> /// <returns>车次窗</returns> public static TrainWnd[] Deserialize(byte[] b, out byte color) { color = 0; if (b == null || b.Length < 4 || b[0] != 0x33) { return(new TrainWnd[0]); } if (ClSet.isClSet(b, 2)) { return(DeserializeFromClSet(b, out color)); } else { return(DeserializeFromStruct(b)); } }
private void ToClTable(ClSet cs) { ClTable ct = cs.Tables["CmdInfo"]; if (ct == null) { ct = new ClTable("CmdInfo"); cs.Tables.Add(ct); } else { ct.Rows.Clear(); } ct.AddColumn("DATA", typeof(string)); ClRow cr; cr = ct.NewRow(); cr[0] = CmdType; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = Cmd; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = StationCode; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = PostName; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = Operator; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = Ip; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = Note; ct.Rows.Add(cr); cr = ct.NewRow(); cr[0] = PackageID.ToString(); ct.Rows.Add(cr); }
/// <summary> /// /// </summary> /// <param name="cs"></param> public LocomInfoList(ClSet cs) { Init(cs); }
/// <summary> /// 到发确报目录表-》CLTABLE /// </summary> /// <param name="ds"></param> /// <param name="tdcsmode"></param> /// <param name="dsdict"></param> /// <returns></returns> public static ClSet ConsTable2ClSet(DataSet ds, byte tdcsmode, DataSet dsdict) { string[] tn = { "C_TRA_NUM_ARR", "C_TRA_NUM_DEP" }; string[] id = { "I_CONS_ID", "I_CONS_ID" }; string[] st = { "E_ST_CONS", "E_ST_DEPCONS" }; string[] tm = { "D_TRA_DEP", "D_TRA_DEP" }; string[] lid = { "I_LINE_ID", "I_LINE_ID" }; string[] ccnt = { "I_CAR_NUM", "I_CAR_NUM" }; string[] len = { "F_LEN_TRA", "F_LEN_TRA" }; string[] weig = { "F_WEGH_TRA", "F_WEGH_TRA" }; string[] sta = { "C_STA_CO_ARR", "C_STA_CO_DEP" }; string[] bstat = { "B_SYM_CHECK", "B_SYM_CHECK" }; string[] locom1 = { "C_LOCOM_CO1", "C_LOCOM_CO1" }; string[] locom2 = { "C_LOCOM_CO2", "C_LOCOM_CO2" }; ClTable ctarr, ctdep; ctarr = CreateTable("ARRCONS"); ctdep = CreateTable("DEPCONS"); ClTable ct; DataRow[] drs; ct = ctarr; drs = ds.Tables["DM_TD_ARRCONSLIST"].Select("E_ST_CONS < " + CIPS.DB.E_ST_CONS.SHIFT, "E_ST_CONS DESC, D_TRA_DEP, I_LINE_ID", DataViewRowState.CurrentRows); for (int i = 0; i < 2; i++) { short n = 1; foreach (DataRow dr in drs) { if ((Convert.ToInt32(dr["B_SYM_CHECK"]) & CIPS.DB.B_SYM_CHECK.STOP) != 0) { continue; } ClRow cr = ct.NewRow(); cr["I_CONS_ID"] = dr[id[i]]; cr["E_ST_CONS"] = dr[st[i]]; cr["C_TRA_NUM"] = dr[tn[i]]; cr["D_TRA"] = dr[tm[i]]; cr["I_LINE_ID_ARRDEP"] = dr[lid[i]]; cr["I_CAR_NUM"] = dr[ccnt[i]]; cr["F_LEN_TRA"] = dr[len[i]]; cr["F_WEGH_TRA"] = dr[weig[i]]; cr["B_SYM_CHECK"] = dr[bstat[i]]; cr["I_CONS_ORDER"] = n; cr["C_LOCOM_CO1"] = dr[locom1[i]]; cr["C_LOCOM_CO2"] = dr[locom2[i]]; cr["C_STA_CO"] = ""; cr["I_STATION_ID"] = 0; DataRow[] _drs = dsdict.Tables["DC_TD_STA"].Select("C_STA_CO = '" + dr[sta[i]].ToString().Trim() + "'"); if (_drs.Length > 0) { _drs = dsdict.Tables["DC_TD_GRO"].Select("I_GRO_ID =" + _drs[0]["I_GRO_ID"].ToString().Trim()); if (_drs.Length > 0) { cr["C_STA_CO"] = _drs[0]["C_GRO_FORSH"].ToString().Trim(); } } _drs = dsdict.Tables["DC_RA_YARD"].Select("C_RANGE_FORSH = '" + dr[sta[i]].ToString().Trim() + "' and E_RANGE_LEVEL = " + CIPS.DB.E_RANGE_LEVEL.STATION.ToString()); if (_drs.Length > 0) { cr["I_STATION_ID"] = Convert.ToInt16(_drs[0]["I_RANGE_ID"]); } n++; ct.Rows.Add(cr); } ct = ctdep; drs = ds.Tables["DM_TD_DEPCONSLIST"].Select("E_ST_DEPCONS < " + CIPS.DB.E_ST_DEPCONS.SHIFT, "E_ST_DEPCONS DESC, D_TRA_DEP, I_LINE_ID", DataViewRowState.CurrentRows); } ClSet cs = new ClSet(); cs.Tables.Add(ctarr); cs.Tables.Add(ctdep); cs.Tables.Add(CreateInfoTable(tdcsmode)); return(cs); }
public static ClSet TrainTable2ClSet(DataTable dt, DataTable dtTrainText, bool bExpressMode, DataRow[] arrconsrows, DataRow[] depconsrows) { ClTable ctarr, ctdep; string selcmd; ctarr = CreateTable("ARRCONS"); ctdep = CreateTable("DEPCONS"); int stationid = 0; selcmd = "E_SYM_ARRDEP <> " + CIPS.DB.E_PL_TYPE.ARR_LIGHTLOCOM.ToString() + " and E_PL_TYPE <> " + CIPS.DB.E_PL_TYPE.DEP_LIGHTLOCOM.ToString() + " and E_PL_STATE < " + CIPS.DB.E_PL_STATE.SHIFT.ToString() + " and E_TRA_CHARA <> " + CIPS.DB.E_TRA_CHARA.TRA_CAR.ToString() + " and E_RECORD_U<>" + CIPS.DB.E_RECORD_U.STOP.ToString() + " and E_RECORD_U<>" + CIPS.DB.E_RECORD_U.STA_ADD.ToString(); DataRow[] drs = dt.Select(selcmd, "E_PL_STATE DESC,B_SYM_CHECK DESC, E_CONS_STATE DESC, I_LINE_ID_ARRDEP", System.Data.DataViewRowState.CurrentRows); short n1 = 1, n2 = 1; foreach (DataRow dr in drs) { int arrdep = Convert.ToInt16(dr["E_SYM_ARRDEP"]); ClRow cr = ctarr.NewRow(); if (arrdep == CIPS.DB.E_SYM_ARRDEP.END_ARR) { cr["E_ST_CONS"] = GetArrConsST(dr, dtTrainText, out stationid); cr["I_CONS_ORDER"] = n1; n1++; ctarr.Rows.Add(cr); } else if (arrdep == CIPS.DB.E_SYM_ARRDEP.START_DEP) { cr["E_ST_CONS"] = GetDepConsST(dr, dtTrainText, out stationid); cr["I_CONS_ORDER"] = n2; n2++; ctdep.Rows.Add(cr); } else { continue; } if (bExpressMode) { cr["I_CONS_ID"] = dr["I_CONS_ID"]; } else { cr["I_CONS_ID"] = dr["I_TRA_ID"]; } cr["C_TRA_NUM"] = dr["C_TRA_NUM"]; cr["D_TRA"] = dr["D_TRA_TIME"]; cr["I_LINE_ID_ARRDEP"] = dr["I_LINE_ID_ARRDEP"]; cr["I_CAR_NUM"] = dr["I_CAR_NUM"]; cr["F_LEN_TRA"] = dr["F_LEN"]; cr["F_WEGH_TRA"] = dr["F_WEGH"]; cr["B_SYM_CHECK"] = dr["B_SYM_CHECK"]; cr["C_STA_CO"] = ""; cr["I_STATION_ID"] = stationid; } foreach (DataRow dr in arrconsrows) { if ((Convert.ToInt32(dr["B_SYM_CHECK"]) & CIPS.DB.B_SYM_CHECK.STOP) != 0) { continue; } ClRow cr = ctarr.NewRow(); cr["E_ST_CONS"] = dr["E_ST_CONS"]; cr["I_CONS_ORDER"] = n1; n1++; ctarr.Rows.Add(cr); cr["I_CONS_ID"] = dr["I_CONS_ID"]; cr["C_TRA_NUM"] = dr["C_TRA_NUM_ARR"]; cr["D_TRA"] = dr["D_TRA_DEP"]; cr["I_LINE_ID_ARRDEP"] = dr["I_LINE_ID"]; cr["I_CAR_NUM"] = dr["I_CAR_NUM"]; cr["F_LEN_TRA"] = dr["F_LEN_TRA"]; cr["F_WEGH_TRA"] = dr["F_WEGH_TRA"]; cr["B_SYM_CHECK"] = dr["B_SYM_CHECK"]; cr["C_STA_CO"] = dr["C_STA_CO_ARR"]; } foreach (DataRow dr in depconsrows) { if ((Convert.ToInt32(dr["B_SYM_CHECK"]) & CIPS.DB.B_SYM_CHECK.STOP) != 0) { continue; } ClRow cr = ctdep.NewRow(); cr["E_ST_CONS"] = dr["E_ST_DEPCONS"]; cr["I_CONS_ORDER"] = n2; n2++; ctdep.Rows.Add(cr); cr["I_CONS_ID"] = dr["I_CONS_ID"]; cr["C_TRA_NUM"] = dr["C_TRA_NUM_DEP"]; cr["D_TRA"] = dr["D_TRA_DEP"]; cr["I_LINE_ID_ARRDEP"] = dr["I_LINE_ID"]; cr["I_CAR_NUM"] = dr["I_CAR_NUM"]; cr["F_LEN_TRA"] = dr["F_LEN_TRA"]; cr["F_WEGH_TRA"] = dr["F_WEGH_TRA"]; cr["B_SYM_CHECK"] = dr["B_SYM_CHECK"]; cr["C_STA_CO"] = dr["C_STA_CO_DEP"]; } ClSet cs = new ClSet(); cs.Tables.Add(ctarr); cs.Tables.Add(ctdep); cs.Tables.Add(CreateInfoTable(0)); return(cs); }