//解析一个网络协议 // 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); }
/// <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); }
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); } }
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); } }
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); } }
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); }
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>()))); } }
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); }
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); }
/// <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); }
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); }
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); }
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); } }
/// <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); }