Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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));
        }
Пример #3
0
        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"]);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
 /// <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));
     }
 }
Пример #8
0
        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);
        }
Пример #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="cs"></param>
 public LocomInfoList(ClSet cs)
 {
     Init(cs);
 }
Пример #10
0
        /// <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);
        }
Пример #11
0
        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);
        }