Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="tid"></param>
        /// <returns></returns>
        private static long ReadTagIndex(this DataFileSeriserbase datafile, int tid, out long offset, out short len)
        {
            len = datafile.ReadShort(0);
            var vsize = datafile.ReadInt(2);

            offset = vsize;

            lock (TagHeadOffsetManager.manager.LogHeadOffsets)
            {
                if (!TagHeadOffsetManager.manager.Contains(datafile.FileName))
                {
                    var data = datafile.Read(6, vsize);
                    MarshalVarintCodeMemory vcm = new MarshalVarintCodeMemory(data.StartMemory, vsize);
                    var         ltmp            = vcm.ToLongList();
                    int         addroffset      = (ltmp.Count - 1) / 2;
                    List <int>  ids             = new List <int>();
                    List <long> addrs           = new List <long>();

                    long lp = ltmp[1];
                    for (int i = 1; i < ltmp[0]; i++)
                    {
                        var lp2 = ltmp[i + 1] + lp;
                        ids.Add((int)lp2);
                        lp = lp2;
                    }

                    lp = ltmp[1 + addroffset];
                    for (int i = 1; i < ltmp[0]; i++)
                    {
                        var lp2 = ltmp[i + 1 + addroffset] + lp;
                        addrs.Add(lp2);
                        lp = lp2;
                    }

                    Dictionary <int, long> idaddrs = new Dictionary <int, long>();
                    for (int i = 0; i < ids.Count; i++)
                    {
                        idaddrs.Add(ids[i], addrs[i]);
                    }

                    TagHeadOffsetManager.manager.AddLogHead(datafile.FileName, idaddrs);

                    if (idaddrs.ContainsKey(tid))
                    {
                        return(idaddrs[tid]);
                    }
                }
                else
                {
                    var idaddrs = TagHeadOffsetManager.manager.Get(datafile.FileName);
                    if (idaddrs.ContainsKey(tid))
                    {
                        return(idaddrs[tid]);
                    }
                }
            }

            return(-1);
        }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="tid"></param>
        /// <returns></returns>
        private static AddressAndSize ReadTagIndex(this DataFileSeriserbase datafile, int tid, out long offset, out short len)
        {
            len = datafile.ReadShort(0); //读取时长
            var vsize = datafile.ReadInt(10);

            offset = vsize + 6;

            if (vsize > 7)
            {
                lock (TagHeadOffsetManager.manager.LogHeadOffsets)
                {
                    if (!TagHeadOffsetManager.manager.Contains(datafile.FileName))
                    {
                        Dictionary <int, AddressAndSize> dtmps = new Dictionary <int, AddressAndSize>();
                        var  idandaddress = datafile.Read(14, vsize);
                        int  id           = idandaddress.ReadInt(0);
                        long address      = idandaddress.ReadLong(4);
                        int  size         = 0;
                        long ltmp;
                        int  nid = 0;
                        for (int i = 1; i < vsize / 12; i++)
                        {
                            nid  = idandaddress.ReadInt(i * 12);
                            ltmp = idandaddress.ReadLong(i * 12 + 4);
                            size = (int)(ltmp - address);
                            dtmps.Add(id, new AddressAndSize()
                            {
                                Address = address, Size = size
                            });
                            address = ltmp;
                            id      = nid;
                        }

                        dtmps.Add(id, new AddressAndSize()
                        {
                            Address = address, Size = (int)(datafile.Length - address)
                        });

                        TagHeadOffsetManager.manager.AddLogHead(datafile.FileName, dtmps);
                        if (dtmps.ContainsKey(tid))
                        {
                            return(dtmps[tid]);
                        }
                    }
                    else
                    {
                        var idaddrs = TagHeadOffsetManager.manager.GetLog(datafile.FileName);
                        if (idaddrs.ContainsKey(tid))
                        {
                            return(idaddrs[tid]);
                        }
                    }
                }
            }
            return(AddressAndSize.Empty);
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="datafile"></param>
        /// <param name="offset"></param>
        /// <param name="timeraddr"></param>
        /// <param name="starttime"></param>
        /// <param name="endtime"></param>
        /// <returns></returns>
        private static Dictionary <int, DateTime> ReadTimeIndex(this DataFileSeriserbase datafile, long offset, long timeraddr, DateTime starttime, DateTime endtime, DateTime time, int count)
        {
            Dictionary <int, DateTime> re = new Dictionary <int, DateTime>();

            for (int i = 0; i < count; i++)
            {
                var vf = time.AddMilliseconds(datafile.ReadShort(offset + timeraddr + i * 2) * 100);
                if (vf >= starttime && vf < endtime)
                {
                    if (vf != time || i == 0)
                    {
                        re.Add(i, vf);
                    }
                }
            }
            return(re);
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="datafile"></param>
        /// <param name="offset"></param>
        /// <param name="timeraddr"></param>
        /// <param name="time"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        private static Dictionary <int, Tuple <DateTime, bool> > ReadTimeIndex(this DataFileSeriserbase datafile, long offset, long timeraddr, DateTime time, int count)
        {
            Dictionary <int, Tuple <DateTime, bool> > re = new Dictionary <int, Tuple <DateTime, bool> >();

            for (int i = 0; i < count; i++)
            {
                var vf = time.AddMilliseconds(datafile.ReadShort(offset + timeraddr + i * 2) * 100);
                if (vf != time || i == 0)
                {
                    re.Add(i, new Tuple <DateTime, bool>(vf, true));
                }
                else
                {
                    re.Add(i, new Tuple <DateTime, bool>(vf, false));
                }
            }
            return(re);
        }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="datafile"></param>
        /// <param name="valIndex"></param>
        /// <param name="offset"></param>
        /// <param name="valueaddr"></param>
        /// <param name="result"></param>
        private static List <object> ReadValueInner <T>(this DataFileSeriserbase datafile, List <int> valIndex, long offset, long valueaddr, out int datasize)
        {
            List <object> re = new List <object>();

            string tname = typeof(T).Name;

            switch (tname)
            {
            case "Boolean":
                foreach (var vv in valIndex)
                {
                    re.Add(Convert.ToBoolean(datafile.ReadByte(offset + valueaddr + vv)));
                }
                datasize = 1;
                break;

            case "Byte":
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadByte(offset + valueaddr + vv));
                }
                datasize = 1;
                break;

            case "Int16":
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadShort(offset + valueaddr + vv * 2));
                }
                datasize = 2;
                break;

            case "UInt16":
                foreach (var vv in valIndex)
                {
                    re.Add((ushort)datafile.ReadShort(offset + valueaddr + vv * 2));
                }
                datasize = 2;
                break;

            case "Int32":
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadInt(offset + valueaddr + vv * 4));
                }
                datasize = 4;
                break;

            case "UInt32":
                foreach (var vv in valIndex)
                {
                    re.Add((uint)datafile.ReadInt(offset + valueaddr + vv * 4));
                }
                datasize = 4;
                break;

            case "Int64":
                foreach (var vv in valIndex)
                {
                    re.Add((long)datafile.ReadLong(offset + valueaddr + vv * 8));
                }
                datasize = 8;
                break;

            case "UInt64":
                foreach (var vv in valIndex)
                {
                    re.Add((ulong)datafile.ReadLong(offset + valueaddr + vv * 8));
                }
                datasize = 8;
                break;

            case "Double":
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadDouble(offset + valueaddr + vv * 8));
                }
                datasize = 8;
                break;

            case "Single":
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadFloat(offset + valueaddr + vv * 4));
                }
                datasize = 4;
                break;

            case "String":
                foreach (var vv in valIndex)
                {
                    var str = Encoding.Unicode.GetString(datafile.ReadBytes(offset + valueaddr + vv * Const.StringSize, Const.StringSize));
                    re.Add(str);
                }
                datasize = Const.StringSize;
                break;

            case "DateTime":
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadDateTime(offset + valueaddr + vv * 8));
                }
                datasize = 8;
                break;

            case "IntPointData":
                foreach (var vv in valIndex)
                {
                    var x = datafile.ReadInt(offset + valueaddr + vv * 8);
                    var y = datafile.ReadInt(offset + valueaddr + vv * 8 + 4);
                    re.Add(new IntPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 8;
                break;

            case "UIntPointData":
                foreach (var vv in valIndex)
                {
                    var x = (uint)datafile.ReadInt(offset + valueaddr + vv * 8);
                    var y = (uint)datafile.ReadInt(offset + valueaddr + vv * 8 + 4);
                    re.Add(new UIntPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 8;
                break;

            case "LongPointData":
                foreach (var vv in valIndex)
                {
                    var x = (long)datafile.ReadLong(offset + valueaddr + vv * 16);
                    var y = (long)datafile.ReadLong(offset + valueaddr + vv * 16 + 8);
                    re.Add(new LongPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 16;
                break;

            case "ULongPointData":
                foreach (var vv in valIndex)
                {
                    var x = (ulong)datafile.ReadLong(offset + valueaddr + vv * 16);
                    var y = (ulong)datafile.ReadLong(offset + valueaddr + vv * 16 + 8);
                    re.Add(new ULongPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 16;
                break;

            case "IntPoint3Data":
                foreach (var vv in valIndex)
                {
                    var x = datafile.ReadInt(offset + valueaddr + vv * 12);
                    var y = datafile.ReadInt(offset + valueaddr + vv * 12 + 4);
                    var z = datafile.ReadInt(offset + valueaddr + vv * 12 + 8);
                    re.Add(new IntPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 12;
                break;

            case "UIntPoint3Data":
                foreach (var vv in valIndex)
                {
                    var x = (uint)datafile.ReadInt(offset + valueaddr + vv * 12);
                    var y = (uint)datafile.ReadInt(offset + valueaddr + vv * 12 + 4);
                    var z = (uint)datafile.ReadInt(offset + valueaddr + vv * 12 + 8);
                    re.Add(new UIntPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 12;
                break;

            case "LongPoint3Data":
                foreach (var vv in valIndex)
                {
                    var x = (long)datafile.ReadLong(offset + valueaddr + vv * 24);
                    var y = (long)datafile.ReadLong(offset + valueaddr + vv * 24 + 8);
                    var z = (long)datafile.ReadLong(offset + valueaddr + vv * 24 + 168);
                    re.Add(new LongPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 24;
                break;

            case "ULongPoint3Data":
                foreach (var vv in valIndex)
                {
                    var x = (ulong)datafile.ReadLong(offset + valueaddr + vv * 24);
                    var y = (ulong)datafile.ReadLong(offset + valueaddr + vv * 24 + 8);
                    var z = (ulong)datafile.ReadLong(offset + valueaddr + vv * 24 + 168);
                    re.Add(new ULongPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 24;
                break;

            default:
                datasize = 0;
                break;
            }
            return(re);
        }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="datafile"></param>
        /// <param name="valIndex"></param>
        /// <param name="offset"></param>
        /// <param name="valueaddr"></param>
        /// <param name="result"></param>
        private static List <object> ReadValueInner <T>(this DataFileSeriserbase datafile, List <int> valIndex, long offset, long valueaddr, out int datasize)
        {
            List <object> re = new List <object>();

            if (typeof(T) == typeof(bool))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(Convert.ToBoolean(datafile.ReadByte(offset + valueaddr + vv)));
                }
                datasize = 1;
            }
            else if (typeof(T) == typeof(byte))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadByte(offset + valueaddr + vv));
                }
                datasize = 1;
            }
            else if (typeof(T) == typeof(short))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadShort(offset + valueaddr + vv * 2));
                }
                datasize = 2;
            }
            else if (typeof(T) == typeof(ushort))
            {
                foreach (var vv in valIndex)
                {
                    re.Add((ushort)datafile.ReadShort(offset + valueaddr + vv * 2));
                }
                datasize = 2;
            }
            else if (typeof(T) == typeof(int))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadInt(offset + valueaddr + vv * 4));
                }
                datasize = 4;
            }
            else if (typeof(T) == typeof(uint))
            {
                foreach (var vv in valIndex)
                {
                    re.Add((uint)datafile.ReadInt(offset + valueaddr + vv * 4));
                }
                datasize = 4;
            }
            else if (typeof(T) == typeof(long))
            {
                foreach (var vv in valIndex)
                {
                    re.Add((long)datafile.ReadLong(offset + valueaddr + vv * 8));
                }
                datasize = 8;
            }
            else if (typeof(T) == typeof(ulong))
            {
                foreach (var vv in valIndex)
                {
                    re.Add((ulong)datafile.ReadLong(offset + valueaddr + vv * 8));
                }
                datasize = 8;
            }
            else if (typeof(T) == typeof(double))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadDouble(offset + valueaddr + vv * 8));
                }
                datasize = 8;
            }
            else if (typeof(T) == typeof(float))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadFloat(offset + valueaddr + vv * 4));
                }
                datasize = 4;
            }
            else if (typeof(T) == typeof(string))
            {
                foreach (var vv in valIndex)
                {
                    var str = Encoding.Unicode.GetString(datafile.ReadBytes(offset + valueaddr + vv * Const.StringSize, Const.StringSize));
                    re.Add(str);
                }
                datasize = Const.StringSize;
            }
            else if (typeof(T) == typeof(DateTime))
            {
                foreach (var vv in valIndex)
                {
                    re.Add(datafile.ReadDateTime(offset + valueaddr + vv * 8));
                }
                datasize = 8;
            }
            else if (typeof(T) == typeof(IntPointData))
            {
                foreach (var vv in valIndex)
                {
                    var x = datafile.ReadInt(offset + valueaddr + vv * 8);
                    var y = datafile.ReadInt(offset + valueaddr + vv * 8 + 4);
                    re.Add(new IntPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 8;
            }
            else if (typeof(T) == typeof(UIntPointData))
            {
                foreach (var vv in valIndex)
                {
                    var x = (uint)datafile.ReadInt(offset + valueaddr + vv * 8);
                    var y = (uint)datafile.ReadInt(offset + valueaddr + vv * 8 + 4);
                    re.Add(new UIntPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 8;
            }
            else if (typeof(T) == typeof(LongPointData))
            {
                foreach (var vv in valIndex)
                {
                    var x = (long)datafile.ReadLong(offset + valueaddr + vv * 16);
                    var y = (long)datafile.ReadLong(offset + valueaddr + vv * 16 + 8);
                    re.Add(new LongPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 16;
            }
            else if (typeof(T) == typeof(ULongPointData))
            {
                foreach (var vv in valIndex)
                {
                    var x = (ulong)datafile.ReadLong(offset + valueaddr + vv * 16);
                    var y = (ulong)datafile.ReadLong(offset + valueaddr + vv * 16 + 8);
                    re.Add(new ULongPointData()
                    {
                        X = x, Y = y
                    });
                }
                datasize = 16;
            }
            else if (typeof(T) == typeof(IntPoint3Data))
            {
                foreach (var vv in valIndex)
                {
                    var x = datafile.ReadInt(offset + valueaddr + vv * 12);
                    var y = datafile.ReadInt(offset + valueaddr + vv * 12 + 4);
                    var z = datafile.ReadInt(offset + valueaddr + vv * 12 + 8);
                    re.Add(new IntPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 12;
            }
            else if (typeof(T) == typeof(UIntPoint3Data))
            {
                foreach (var vv in valIndex)
                {
                    var x = (uint)datafile.ReadInt(offset + valueaddr + vv * 12);
                    var y = (uint)datafile.ReadInt(offset + valueaddr + vv * 12 + 4);
                    var z = (uint)datafile.ReadInt(offset + valueaddr + vv * 12 + 8);
                    re.Add(new UIntPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 12;
            }
            else if (typeof(T) == typeof(LongPoint3Data))
            {
                foreach (var vv in valIndex)
                {
                    var x = (long)datafile.ReadLong(offset + valueaddr + vv * 24);
                    var y = (long)datafile.ReadLong(offset + valueaddr + vv * 24 + 8);
                    var z = (long)datafile.ReadLong(offset + valueaddr + vv * 24 + 168);
                    re.Add(new LongPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 24;
            }
            else if (typeof(T) == typeof(ULongPoint3Data))
            {
                foreach (var vv in valIndex)
                {
                    var x = (ulong)datafile.ReadLong(offset + valueaddr + vv * 24);
                    var y = (ulong)datafile.ReadLong(offset + valueaddr + vv * 24 + 8);
                    var z = (ulong)datafile.ReadLong(offset + valueaddr + vv * 24 + 168);
                    re.Add(new ULongPoint3Data()
                    {
                        X = x, Y = y, Z = z
                    });
                }
                datasize = 24;
            }
            datasize = 0;
            return(re);
        }