// ----------------------------------------------------------------- /// <summary> /// /// </summary> // ----------------------------------------------------------------- protected static bool OSDBaseType(OSDType type) { // Should be the list of base types for which AsString() returns // something useful if (type == OSDType.Boolean) { return(true); } if (type == OSDType.Integer) { return(true); } if (type == OSDType.Real) { return(true); } if (type == OSDType.String) { return(true); } if (type == OSDType.UUID) { return(true); } if (type == OSDType.Date) { return(true); } if (type == OSDType.URI) { return(true); } return(false); }
// ----------------------------------------------------------------- /// <summary> /// /// </summary> // ----------------------------------------------------------------- protected static bool OSDBaseType(OSDType type) { // Should be the list of base types for which AsString() returns // something useful if (type == OSDType.Boolean) return true; if (type == OSDType.Integer) return true; if (type == OSDType.Real) return true; if (type == OSDType.String) return true; if (type == OSDType.UUID) return true; if (type == OSDType.Date) return true; if (type == OSDType.URI) return true; return false; }
private static object ParseLLSDBlock(OSDMap blockData, Type blockType) { object block = Activator.CreateInstance(blockType); // Iterate over each field and set the value if a match was found in the LLSD foreach (FieldInfo field in blockType.GetFields()) { if (blockData.ContainsKey(field.Name)) { Type fieldType = field.FieldType; if (fieldType == typeof(ulong)) { // ulongs come in as a byte array, convert it manually here byte[] bytes = blockData[field.Name].AsBinary(); ulong value = Utils.BytesToUInt64(bytes); field.SetValue(block, value); } else if (fieldType == typeof(uint)) { // uints come in as a byte array, convert it manually here byte[] bytes = blockData[field.Name].AsBinary(); uint value = Utils.BytesToUInt(bytes); field.SetValue(block, value); } else if (fieldType == typeof(ushort)) { // Just need a bit of manual typecasting love here field.SetValue(block, (ushort)blockData[field.Name].AsInteger()); } else if (fieldType == typeof(byte)) { // Just need a bit of manual typecasting love here field.SetValue(block, (byte)blockData[field.Name].AsInteger()); } else if (fieldType == typeof(short)) { field.SetValue(block, (short)blockData[field.Name].AsInteger()); } else if (fieldType == typeof(string)) { field.SetValue(block, blockData[field.Name].AsString()); } else if (fieldType == typeof(bool)) { field.SetValue(block, blockData[field.Name].AsBoolean()); } else if (fieldType == typeof(float)) { field.SetValue(block, (float)blockData[field.Name].AsReal()); } else if (fieldType == typeof(double)) { field.SetValue(block, blockData[field.Name].AsReal()); } else if (fieldType == typeof(int)) { field.SetValue(block, blockData[field.Name].AsInteger()); } else if (fieldType == typeof(UUID)) { field.SetValue(block, blockData[field.Name].AsUUID()); } else if (fieldType == typeof(Vector3)) { Vector3 vec = ((OSDArray)blockData[field.Name]).AsVector3(); field.SetValue(block, vec); } else if (fieldType == typeof(Vector4)) { Vector4 vec = ((OSDArray)blockData[field.Name]).AsVector4(); field.SetValue(block, vec); } else if (fieldType == typeof(Quaternion)) { Quaternion quat = ((OSDArray)blockData[field.Name]).AsQuaternion(); field.SetValue(block, quat); } } } // Additional fields come as properties, Handle those as well. foreach (PropertyInfo property in blockType.GetProperties()) { if (blockData.ContainsKey(property.Name)) { OSDType proptype = blockData[property.Name].Type; MethodInfo set = property.GetSetMethod(); if (proptype.Equals(OSDType.Binary)) { set.Invoke(block, new object[] { blockData[property.Name].AsBinary() }); } else { set.Invoke(block, new object[] { Utils.StringToBytes(blockData[property.Name].AsString()) }); } } } return(block); }