コード例 #1
0
        public void Load(string projectPath, string[] assetPaths, Type[] types, StorageEventHandler <PersistentObject[]> callback)
        {
            QueueUserWorkItem(() =>
            {
                PersistentObject[] result = new PersistentObject[assetPaths.Length];
                for (int i = 0; i < assetPaths.Length; ++i)
                {
                    string assetPath       = assetPaths[i];
                    assetPath              = FullPath(projectPath) + assetPath;
                    ISerializer serializer = IOC.Resolve <ISerializer>();
                    try
                    {
                        if (File.Exists(assetPath))
                        {
                            if (types[i] == typeof(PersistentRuntimeTextAsset))
                            {
                                PersistentRuntimeTextAsset textAsset = new PersistentRuntimeTextAsset();
                                textAsset.name = Path.GetFileName(assetPath);
                                textAsset.Text = File.ReadAllText(assetPath);
                                textAsset.Ext  = Path.GetExtension(assetPath);
                                result[i]      = textAsset;
                            }
                            else if (types[i] == typeof(PersistentRuntimeBinaryAsset))
                            {
                                PersistentRuntimeBinaryAsset binAsset = new PersistentRuntimeBinaryAsset();
                                binAsset.name = Path.GetFileName(assetPath);
                                binAsset.Data = File.ReadAllBytes(assetPath);
                                binAsset.Ext  = Path.GetExtension(assetPath);
                                result[i]     = binAsset;
                            }
                            else
                            {
                                using (FileStream fs = File.OpenRead(assetPath))
                                {
                                    result[i] = (PersistentObject)serializer.Deserialize(fs, types[i]);
                                }
                            }
                        }
                        else
                        {
                            Callback(() => callback(new Error(Error.E_NotFound), new PersistentObject[0]));
                            return;
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogErrorFormat("Unable to load asset: {0} -> got exception: {1} ", assetPath, e.ToString());
                        Callback(() => callback(new Error(Error.E_Exception)
                        {
                            ErrorText = e.ToString()
                        }, new PersistentObject[0]));
                        return;
                    }
                }

                Callback(() => callback(new Error(Error.OK), result));
            });
        }
コード例 #2
0
        public void GetValue(string projectPath, string key, Type type, StorageEventHandler <PersistentObject> callback)
        {
            string fullPath = FullPath(projectPath);
            string path     = fullPath + "/" + KeyValueStorage;

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            path = path + "/" + key;
            if (File.Exists(path))
            {
                object result = null;
                if (type == typeof(PersistentRuntimeTextAsset))
                {
                    PersistentRuntimeTextAsset textAsset = new PersistentRuntimeTextAsset();
                    textAsset.name = Path.GetFileName(path);
                    textAsset.Text = File.ReadAllText(path);
                    textAsset.Ext  = Path.GetExtension(path);
                    result         = textAsset;
                }
                else if (type == typeof(PersistentRuntimeBinaryAsset))
                {
                    PersistentRuntimeBinaryAsset binaryAsset = new PersistentRuntimeBinaryAsset();
                    binaryAsset.name = Path.GetFileName(path);
                    binaryAsset.Data = File.ReadAllBytes(path);
                    binaryAsset.Ext  = Path.GetExtension(path);
                    result           = binaryAsset;
                }
                else
                {
                    ISerializer serializer = IOC.Resolve <ISerializer>();
                    using (FileStream fs = File.OpenRead(path))
                    {
                        result = serializer.Deserialize(fs, type);
                    }
                }

                callback(new Error(Error.OK), (PersistentObject)result);
            }
            else
            {
                callback(new Error(Error.E_NotFound), null);
                return;
            }
        }
コード例 #3
0
        public void GetValues(string projectPath, string searchPattern, Type type, StorageEventHandler <PersistentObject[]> callback)
        {
            QueueUserWorkItem(() =>
            {
                string fullPath = FullPath(projectPath);
                string path     = fullPath + "/" + KeyValueStorage;
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                string[] files            = Directory.GetFiles(path, searchPattern);
                PersistentObject[] result = new PersistentObject[files.Length];

                ISerializer serializer = IOC.Resolve <ISerializer>();
                for (int i = 0; i < files.Length; ++i)
                {
                    if (type == typeof(PersistentRuntimeTextAsset))
                    {
                        PersistentRuntimeTextAsset textAsset = new PersistentRuntimeTextAsset();
                        textAsset.name = Path.GetFileName(files[i]);
                        textAsset.Text = File.ReadAllText(files[i]);
                        textAsset.Ext  = Path.GetExtension(files[i]);
                        result[i]      = textAsset;
                    }
                    else if (type == typeof(PersistentRuntimeBinaryAsset))
                    {
                        PersistentRuntimeBinaryAsset binaryAsset = new PersistentRuntimeBinaryAsset();
                        binaryAsset.name = Path.GetFileName(files[i]);
                        binaryAsset.Data = File.ReadAllBytes(files[i]);
                        binaryAsset.Ext  = Path.GetExtension(files[i]);
                        result[i]        = binaryAsset;
                    }
                    else
                    {
                        using (FileStream fs = File.OpenRead(files[i]))
                        {
                            result[i] = (PersistentObject)serializer.Deserialize(fs, type);
                        }
                    }
                }

                Callback(() => callback(Error.NoError, result));
            });
        }
コード例 #4
0
        public void SetValue(string projectPath, string key, PersistentObject persistentObject, StorageEventHandler callback)
        {
            string fullPath = FullPath(projectPath);
            string path     = fullPath + "/" + KeyValueStorage;

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            path = path + "/" + key;
            if (File.Exists(path))
            {
                File.Delete(path);
            }

            if (persistentObject is PersistentRuntimeTextAsset)
            {
                PersistentRuntimeTextAsset textAsset = (PersistentRuntimeTextAsset)persistentObject;
                File.WriteAllText(path, textAsset.Text);
            }
            else if (persistentObject is PersistentRuntimeBinaryAsset)
            {
                PersistentRuntimeBinaryAsset binaryAsset = (PersistentRuntimeBinaryAsset)persistentObject;
                File.WriteAllBytes(path, binaryAsset.Data);
            }
            else
            {
                ISerializer serializer = IOC.Resolve <ISerializer>();
                using (FileStream fs = File.Create(path))
                {
                    serializer.Serialize(persistentObject, fs);
                }
                serializer.Serialize(persistentObject);
            }

            callback(new Error(Error.OK));
        }
コード例 #5
0
        public void Save(string projectPath, string[] folderPaths, AssetItem[] assetItems, PersistentObject[] persistentObjects, ProjectInfo projectInfo, bool previewOnly, StorageEventHandler callback)
        {
            QueueUserWorkItem(() =>
            {
                if (!previewOnly)
                {
                    if (assetItems.Length != persistentObjects.Length)
                    {
                        throw new ArgumentException("assetItems");
                    }
                }

                if (assetItems.Length > folderPaths.Length)
                {
                    int l = folderPaths.Length;
                    Array.Resize(ref folderPaths, assetItems.Length);
                    for (int i = l; i < folderPaths.Length; ++i)
                    {
                        folderPaths[i] = folderPaths[l - 1];
                    }
                }

                projectPath = FullPath(projectPath);
                if (!Directory.Exists(projectPath))
                {
                    Directory.CreateDirectory(projectPath);
                }

                string projectInfoPath = projectPath + "/Project.rtmeta";
                ISerializer serializer = IOC.Resolve <ISerializer>();
                Error error            = new Error(Error.OK);
                for (int i = 0; i < assetItems.Length; ++i)
                {
                    string folderPath   = folderPaths[i];
                    AssetItem assetItem = assetItems[i];

                    try
                    {
                        string path = projectPath + folderPath;
                        if (!Directory.Exists(path))
                        {
                            Directory.CreateDirectory(path);
                        }

                        string previewPath = path + "/" + assetItem.NameExt + PreviewExt;
                        if (assetItem.Preview == null)
                        {
                            File.Delete(previewPath);
                        }
                        else
                        {
                            File.Delete(previewPath);
                            using (FileStream fs = File.Create(previewPath))
                            {
                                serializer.Serialize(assetItem.Preview, fs);
                            }
                        }

                        if (!previewOnly)
                        {
                            PersistentObject persistentObject = persistentObjects[i];
                            File.Delete(path + "/" + assetItem.NameExt + MetaExt);
                            using (FileStream fs = File.Create(path + "/" + assetItem.NameExt + MetaExt))
                            {
                                serializer.Serialize(assetItem, fs);
                            }

                            File.Delete(path + "/" + assetItem.NameExt);

                            if (persistentObject is PersistentRuntimeTextAsset)
                            {
                                PersistentRuntimeTextAsset textAsset = (PersistentRuntimeTextAsset)persistentObject;
                                File.WriteAllText(path + "/" + assetItem.NameExt, textAsset.Text);
                            }
                            else if (persistentObject is PersistentRuntimeBinaryAsset)
                            {
                                PersistentRuntimeBinaryAsset binAsset = (PersistentRuntimeBinaryAsset)persistentObject;
                                File.WriteAllBytes(path + "/" + assetItem.NameExt, binAsset.Data);
                            }
                            else
                            {
                                using (FileStream fs = File.Create(path + "/" + assetItem.NameExt))
                                {
                                    serializer.Serialize(persistentObject, fs);
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogErrorFormat("Unable to create asset: {0} -> got exception: {1} ", assetItem.NameExt, e.ToString());
                        error.ErrorCode = Error.E_Exception;
                        error.ErrorText = e.ToString();
                        break;
                    }
                }

                File.Delete(projectInfoPath);
                using (FileStream fs = File.Create(projectInfoPath))
                {
                    serializer.Serialize(projectInfo, fs);
                }

                Callback(() => callback(error));
            });
        }
コード例 #6
0
        public void Load(string projectPath, AssetItem[] assetItems, Type[] types, StorageEventHandler <PersistentObject <TID>[]> callback)
        {
            string[] assetPaths        = assetItems.Select(item => item.ToString()).ToArray();
            long[]   customDataOffsets = assetItems.Select(item => item.CustomDataOffset).ToArray();
            QueueUserWorkItem(() =>
            {
                PersistentObject <TID>[] result = new PersistentObject <TID> [assetPaths.Length];
                for (int i = 0; i < assetPaths.Length; ++i)
                {
                    string assetPath       = assetPaths[i];
                    assetPath              = FullPath(projectPath) + assetPath;
                    ISerializer serializer = IOC.Resolve <ISerializer>();
                    try
                    {
                        if (File.Exists(assetPath))
                        {
                            if (types[i] == typeof(PersistentRuntimeTextAsset <TID>))
                            {
                                PersistentRuntimeTextAsset <TID> textAsset = new PersistentRuntimeTextAsset <TID>();
                                textAsset.name = Path.GetFileName(assetPath);
                                textAsset.Text = File.ReadAllText(assetPath);
                                textAsset.Ext  = Path.GetExtension(assetPath);
                                result[i]      = textAsset;
                            }
                            else if (types[i] == typeof(PersistentRuntimeBinaryAsset <TID>))
                            {
                                PersistentRuntimeBinaryAsset <TID> binAsset = new PersistentRuntimeBinaryAsset <TID>();
                                binAsset.name = Path.GetFileName(assetPath);
                                binAsset.Data = File.ReadAllBytes(assetPath);
                                binAsset.Ext  = Path.GetExtension(assetPath);
                                result[i]     = binAsset;
                            }
                            else
                            {
                                using (FileStream fs = File.OpenRead(assetPath))
                                {
                                    long customDataOffset = customDataOffsets[i];
                                    if (customDataOffset == -1)
                                    {
                                        result[i] = (PersistentObject <TID>)serializer.Deserialize(fs, types[i]);
                                    }
                                    else
                                    {
                                        if (customDataOffset > 0)
                                        {
                                            result[i] = (PersistentObject <TID>)serializer.Deserialize(fs, types[i], customDataOffset);
                                        }
                                        else
                                        {
                                            result[i] = (PersistentObject <TID>)Activator.CreateInstance(types[i]);
                                        }

                                        if (fs.Position < fs.Length)
                                        {
                                            using (BinaryReader reader = new BinaryReader(fs))
                                            {
                                                CustomSerializationHeader header = reader.ReadHeader();
                                                if (header.IsValid)
                                                {
                                                    ICustomSerialization customSerialization = (ICustomSerialization)result[i];
                                                    customSerialization.Deserialize(fs, reader);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            Callback(() => callback(new Error(Error.E_NotFound), new PersistentObject <TID> [0]));
                            return;
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.LogErrorFormat("Unable to load asset: {0} -> got exception: {1} ", assetPath, e.ToString());
                        Callback(() => callback(new Error(Error.E_Exception)
                        {
                            ErrorText = e.ToString()
                        }, new PersistentObject <TID> [0]));
                        return;
                    }
                }

                Callback(() => callback(new Error(Error.OK), result));
            });
        }