Ejemplo n.º 1
0
        //解析一个网络协议
        // public static ScriptTable Deserialize(Script script, byte[] data, string layoutTableName) {
        //     return Read(script, new ScorpioReader(data), null, "", layoutTableName, true);
        // }

        /// <summary>
        /// 脚本 读取excel文件数据内容
        /// </summary>
        /// <param name="script"></param>
        /// <param name="fileName"></param>
        /// <param name="reader"></param>
        /// <param name="dataArray"></param>
        /// <param name="layoutTableName"></param>
        /// <param name="keyName"></param>
        /// <param name="MD5"></param>
        /// <returns></returns>
        public static ScriptTable ReadDatas(Script script, string fileName, IScorpioReader reader, ScriptTable dataArray, string layoutTableName, string keyName, string MD5)
        {
            var iRow = TableUtil.ReadHead(reader, fileName, MD5);

            for (var i = 0; i < iRow; ++i)
            {
                var data = Read(script, reader, layoutTableName, false);
                data.SetValue("ID", data.GetValue(keyName));
                var key = data.GetValue(keyName).ObjectValue;
                if (dataArray.HasValue(key))
                {
                    var value = dataArray.GetValue(key) as ScriptTable;
                    var itor  = data.GetIterator();
                    while (itor.MoveNext())
                    {
                        value.SetValue(itor.Current.Key, itor.Current.Value);
                    }
                }
                else
                {
                    dataArray.SetValue(key, data);
                }
            }
            return(dataArray);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 读取一个网络协议或者一行table数据
        /// </summary>
        /// <param name="script">脚本引擎对象</param>
        /// <param name="reader">读取类</param>
        /// <param name="tableManager">tableManager类</param>
        /// <param name="fileName">table用文件名字</param>
        /// <param name="layout">数据结构</param>
        private static ScriptMap Read(Script script, IScorpioReader reader, ScriptArray layout)
        {
            var table = script.CreateMap();                             //返回的具体数据

            for (int i = 0; i < layout.Length(); ++i)
            {
                var config = layout.GetValue(i);                        //单个数据的定义
                var name   = config.GetValue(Name).ToString();          //字段名字
                var type   = config.GetValue(Type).ToString();          //字段类型
                var array  = config.GetValue(Array).IsTrue;             //是否是数组
                if (array)
                {
                    var count = reader.ReadInt32();                     //读取元素个数
                    var value = script.CreateArray();
                    for (var j = 0; j < count; ++j)
                    {
                        value.Add(ReadObject(script, reader, type));
                    }
                    table.SetValue(name, new ScriptValue(value));
                }
                else
                {
                    table.SetValue(name, ReadObject(script, reader, type));
                }
            }
            return(table);
        }
Ejemplo n.º 3
0
        private static object ReadField(IScorpioReader reader, string type)
        {
            switch (type.ToLower())
            {
            case BoolType: return(reader.ReadBool());

            case Int8Type: return(reader.ReadInt8());

            case Int16Type: return(reader.ReadInt16());

            case Int32Type: return(reader.ReadInt32());

            case Int64Type: return(reader.ReadInt64());

            case FloatType: return(reader.ReadFloat());

            case DoubleType: return(reader.ReadDouble());

            case StringType: return(reader.ReadString());

            case DateTimeType: return(reader.ReadDateTime());

            case BytesType: return(reader.ReadBytes());

            default: return(null);
            }
        }
Ejemplo n.º 4
0
        const string Language  = "Language";    //该字段是否有多国语言



        //解析一个网络协议
        // public static ScriptTable Deserialize(Script script, byte[] data, string layoutTableName) {
        //     return Read(script, new ScorpioReader(data), null, "", layoutTableName, true);
        // }

        /// <summary>
        /// 脚本 读取excel文件数据内容
        /// </summary>
        /// <param name="script">脚本引擎</param>
        /// <param name="fileName">文件名字</param>
        /// <param name="reader">文件读取</param>
        /// <param name="dataArray">数据集合</param>
        /// <param name="layoutTableName">布局</param>
        /// <param name="keyName">主key名字</param>
        /// <param name="MD5">文件结构MD5</param>
        /// <returns></returns>
        public static ScriptMap ReadDatas(string fileName, IScorpioReader reader, ScriptMap dataArray, string layoutTableName, string keyName, string MD5)
        {
            using (reader) {
                var script = dataArray.getScript();
                var iRow   = TableUtil.ReadHead(reader, fileName, MD5);                     //数据行数
                var layout = script.Global.GetValue(layoutTableName).Get <ScriptArray>();   //数据结构
                for (var i = 0; i < iRow; ++i)
                {
                    var data     = Read(script, reader, layout); //读取一行数据
                    var keyValue = data.GetValue(keyName);       //获取key值
                    data.SetValue("ID", keyValue);
                    var key = keyValue.Value;
                    if (dataArray.ContainsKey(key))
                    {
                        var value = dataArray.GetValue(key).Get <ScriptMap>();
                        foreach (var pair in data)
                        {
                            value.SetValue(pair.Key, pair.Value);
                        }
                    }
                    else
                    {
                        dataArray.SetValue(key, new ScriptValue(data));
                    }
                }
                return(dataArray);
            }
        }
Ejemplo n.º 5
0
        private static object ReadField(IScorpioReader reader, string type)
        {
            switch (type.ToLower())
            {
            case TypeBool: return(reader.ReadBool());

            case TypeInt8: return(reader.ReadInt8());

            case TypeUInt8: return(reader.ReadUInt8());

            case TypeInt16: return(reader.ReadInt16());

            case TypeUInt16: return(reader.ReadUInt16());

            case TypeInt32: return(reader.ReadInt32());

            case TypeUInt32: return(reader.ReadUInt32());

            case TypeInt64: return(reader.ReadInt64());

            case TypeUInt64: return(reader.ReadUInt64());

            case TypeFloat: return(reader.ReadFloat());

            case TypeDouble: return(reader.ReadDouble());

            case TypeString: return(reader.ReadString());

            case TypeDateTime: return(reader.ReadDateTime());

            case TypeBytes: return(reader.ReadBytes());

            default: return(null);
            }
        }
Ejemplo n.º 6
0
        public static Int2 Read(string fileName, IScorpioReader reader)
        {
            var ret = new Int2();

            ret._Value1     = reader.ReadInt32();
            ret._Value2     = reader.ReadInt32();
            ret.m_IsInvalid = ret.CheckInvalid();
            return(ret);
        }
Ejemplo n.º 7
0
        private static ScriptValue ReadObject(Script script, IScorpioReader reader, string type)
        {
            object value = ReadField(reader, type);

            if (value != null)
            {
                return(ScriptValue.CreateObject(value));
            }
            else
            {
                return(new ScriptValue(Read(script, reader, script.Global.GetValue(type).Get <ScriptArray>())));
            }
        }
Ejemplo n.º 8
0
        public static DataSpawn Read(string fileName, IScorpioReader reader)
        {
            var ret = new DataSpawn();

            ret._ID           = reader.ReadInt32();
            ret._TestInt      = reader.ReadInt32();
            ret._TestString   = reader.ReadString();
            ret._TestLanguage = reader.ReadString();
            ret._TestBool     = reader.ReadBool();
            ret._TestInt2     = Int2.Read(fileName, reader);
            ret._TestEnumName = (TestEnum)reader.ReadInt32();
            ret.m_IsInvalid   = ret.CheckInvalid();
            return(ret);
        }
Ejemplo n.º 9
0
        public static Int3 Read(string fileName, IScorpioReader reader)
        {
            var ret = new Int3();

            {
                List <Int2> list   = new List <Int2>();
                int         number = reader.ReadInt32();
                for (int i = 0; i < number; ++i)
                {
                    list.Add(Int2.Read(fileName, reader));
                }
                ret._Value1 = list.AsReadOnly();
            }
            ret._Value2     = reader.ReadInt32();
            ret.m_IsInvalid = ret.CheckInvalid();
            return(ret);
        }
Ejemplo n.º 10
0
        /// <summary> 读取Excel文件头结构 </summary>
        public static int ReadHead(IScorpioReader reader, string fileName, string MD5)
        {
            int iRow = reader.ReadInt32();          //行数

            if (reader.ReadString() != MD5)         //验证文件MD5(检测结构是否改变)
            {
                throw new System.Exception("文件[" + fileName + "]版本验证失败");
            }
            {
                var number = reader.ReadInt32();        //字段数量
                for (var i = 0; i < number; ++i)
                {
                    if (reader.ReadInt8() == 0) //基础类型
                    {
                        reader.ReadInt8();      //基础类型索引
                    }
                    else                        //自定义类
                    {
                        reader.ReadString();    //自定义类名称
                    }
                    reader.ReadBool();          //是否是数组
                }
            }
            {
                var customNumber = reader.ReadInt32();  //自定义类数量
                for (var i = 0; i < customNumber; ++i)
                {
                    reader.ReadString();                //读取自定义类名字
                    var number = reader.ReadInt32();    //字段数量
                    for (var j = 0; j < number; ++j)
                    {
                        if (reader.ReadInt8() == 0) //基础类型
                        {
                            reader.ReadInt8();      //基础类型索引
                        }
                        else                        //自定义类
                        {
                            reader.ReadString();    //自定义类名称
                        }
                        reader.ReadBool();          //是否是数组
                    }
                }
            }

            return(iRow);
        }
Ejemplo n.º 11
0
        public static DataTest Read(string fileName, IScorpioReader reader)
        {
            var ret = new DataTest();

            ret._TestID   = reader.ReadInt32();
            ret._testEnum = (TestEnum)reader.ReadInt32();
            {
                List <Int3> list   = new List <Int3>();
                int         number = reader.ReadInt32();
                for (int i = 0; i < number; ++i)
                {
                    list.Add(Int3.Read(fileName, reader));
                }
                ret._TestDate = list.AsReadOnly();
            }
            ret.m_IsInvalid = ret.CheckInvalid();
            return(ret);
        }
Ejemplo n.º 12
0
        public TableTest Initialize(string fileName, IScorpioReader reader)
        {
            var iRow = TableUtil.ReadHead(reader, fileName, FILE_MD5_CODE);

            for (var i = 0; i < iRow; ++i)
            {
                var pData = DataTest.Read(fileName, reader);
                if (m_dataArray.ContainsKey(pData.ID()))
                {
                    m_dataArray[pData.ID()].Set(pData);
                }
                else
                {
                    m_dataArray.Add(pData.ID(), pData);
                }
            }
            m_count = m_dataArray.Count;
            return(this);
        }
Ejemplo n.º 13
0
        private static ScriptObject ReadObject(Script script, IScorpioReader reader, string type, bool message, Invalid invalid)
        {
            object value = ReadField(reader, type);

            if (value != null)
            {
                invalid.value = TableUtil.IsInvalid(value);
                return(script.CreateObject(value));
            }
            else
            {
                var ret = Read(script, reader, type, message);
                if (!message)
                {
                    invalid.value = ret.GetValue("IsInvalid").LogicOperation();
                }
                return(ret);
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 读取一个网络协议或者一行table数据
        /// </summary>
        /// <param name="script">脚本引擎对象</param>
        /// <param name="reader">读取类</param>
        /// <param name="tableManager">tableManager类</param>
        /// <param name="fileName">table用文件名字</param>
        /// <param name="layoutTableName">结构名字</param>
        /// <param name="message">是否有标识</param>
        private static ScriptTable Read(Script script, IScorpioReader reader, string layoutTableName, bool message)
        {
            var table     = script.CreateTable();                           //返回的具体数据
            var layout    = (ScriptArray)script.GetValue(layoutTableName);  //数据结构
            var sign      = message ? reader.ReadInt32() : 0;
            var isInvalid = true;

            //string id = null;
            for (int i = 0; i < layout.Count(); ++i)
            {
                var config = layout.GetValue(i);        //单个数据的定义
                if (message && !ScorpioUtil.HasSign(sign, ScorpioUtil.ToInt32(config.GetValue(Index).ObjectValue)))
                {
                    continue;
                }
                var name    = config.GetValue(Name).ToString();          //字段名字
                var type    = config.GetValue(Type).ToString();          //字段类型
                var array   = config.GetValue(Array).LogicOperation();   //是否是数组
                var invalid = new Invalid();                             //本行是否是无效行
                if (array)
                {
                    var count = reader.ReadInt32();                      //读取元素个数
                    var value = script.CreateArray();
                    for (var j = 0; j < count; ++j)
                    {
                        value.Add(ReadObject(script, reader, type, message, invalid));
                    }
                    table.SetValue(name, value);
                    if (count > 0)
                    {
                        isInvalid = false;
                    }
                }
                else
                {
                    if (message)
                    {
                        table.SetValue(name, ReadObject(script, reader, type, message, invalid));
                    }
                    else
                    {
                        //var attribute = config.GetValue(Attribute) as ScriptTable;
                        //if (attribute.Count() == 0) {
                        table.SetValue(name, ReadObject(script, reader, type, message, invalid));
                        if (!invalid.value)
                        {
                            isInvalid = false;
                        }
                        //if (string.IsNullOrEmpty(id)) {
                        //    id = ScorpioUtil.ToInt32(obj.ObjectValue).ToString();
                        //}
                        //} else {
                        //    ReadObject(script, reader, tableManager, fileName, type, message, invalid);     //先读取一个值  如果是多国语言 生成数据的时候会写入一个空字符串
                        //    table.SetValue(name, script.CreateObject(tableManager.GetValue("getValue").call(attribute, fileName, name, id)));
                        //}
                    }
                }
            }
            if (!message)
            {
                table.SetValue("IsInvalid", script.CreateBool(isInvalid));
            }
            return(table);
        }