Ejemplo n.º 1
0
 public virtual bool Load(T defaultValue)
 {
     App.Logger.Log($"[XDATA] - Loading {FileName}!");
     if (File.Exists(FileName))
     {
         App.Logger.Log($"[XDATA] - Converting from XML...");
         using (FileStream fs = new FileStream(FileName, FileMode.Open))
             using (XmlReader reader = XmlReader.Create(fs))
             {
                 if (_serializer.CanDeserialize(reader))
                 {
                     data = (T)_serializer.Deserialize(reader);
                     App.Logger.Log($"[XDATA] - Loaded");
                     OnDataLoaded?.Invoke();
                     return(true);
                 }
                 else
                 {
                     App.Logger.Log($"[XDATA] - Could not load {FileName}. Reverting to default value...");
                     data = defaultValue;
                     Save();
                     return(false);
                 }
             }
     }
     else
     {
         App.Logger.Log($"[XDATA] - {FileName} does not exist. Creating one with default value...");
         data = defaultValue;
         Save();
         return(false);
     }
 }
Ejemplo n.º 2
0
 public override bool Load(NPCProject defaultValue)
 {
     App.Logger.Log($"[XDATA] - Loading {FileName}!");
     if (File.Exists(FileName))
     {
         App.Logger.Log($"[XDATA] - Converting from XML...");
         using (FileStream fs = new FileStream(FileName, FileMode.Open))
             using (XmlReader reader = XmlReader.Create(fs))
             {
                 if (_serializer.CanDeserialize(reader))
                 {
                     data = (NPCProject)_serializer.Deserialize(reader);
                     App.Logger.Log($"[XDATA] - Loaded");
                     OnDataLoaded?.Invoke();
                     return(true);
                 }
                 else
                 {
                     App.Logger.Log($"[XDATA] - Could not load {FileName}. Ignoring...");
                     return(false);
                 }
             }
     }
     else
     {
         App.Logger.Log($"[XDATA] - {FileName} does not exist. Ignoring...");
         return(false);
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        ///     导出Excel
        /// </summary>
        /// <param name="sheet">导入所在的工作表</param>
        /// <param name="lambda">查询条件</param>
        /// <returns>数据</returns>
        public void ExportExcel(ISheet sheet, Expression <Func <TData, bool> > lambda)
        {
            var datas = Access.All(lambda);

            OnDataLoaded?.Invoke(datas);
            WriteToSheet(sheet, datas);
        }
Ejemplo n.º 4
0
 public virtual bool Load(T defaultValue)
 {
     App.Logger.Log($"[JDATA] - Loading {FileName}");
     if (File.Exists(FileName))
     {
         try
         {
             App.Logger.Log($"[JDATA] - Converting from JSON...");
             string content = File.ReadAllText(FileName);
             data = JsonConvert.DeserializeObject <T>(content);
             App.Logger.Log($"[JDATA] - Loaded");
             OnDataLoaded?.Invoke();
             return(true);
         }
         catch
         {
             App.Logger.Log($"[JDATA] - Could not load {FileName}. Reverting to default value...", Logging.ELogLevel.WARNING);
             data = defaultValue;
             Save();
             return(false);
         }
     }
     else
     {
         App.Logger.Log($"[JDATA] - {FileName} does not exist. Creating one with default value...", Logging.ELogLevel.WARNING);
         data = defaultValue;
         Save();
         return(false);
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        ///     导出Excel
        /// </summary>
        /// <param name="sheet">导入所在的工作表</param>
        /// <param name="lambda">查询条件</param>
        /// <returns>数据</returns>
        public void ExportExcel(ISheet sheet, LambdaItem <TData> lambda)
        {
            var datas = Access.All(lambda);

            OnDataLoaded?.Invoke(datas);
            WriteToSheet(sheet, datas);
        }
Ejemplo n.º 6
0
    void LoadData()
    {
        if (File.Exists(m_mainFilePath))
        {
            SaveFileDto saveFile = null;
            try
            {
                string json = File.ReadAllText(m_mainFilePath);
                saveFile = JsonConvert.DeserializeObject <SaveFileDto>(json);
            }
            catch (Exception e)
            {
                Debug.LogError(string.Format("Exception occured when attempting to load Save File. {0}StackTrace - {1}", Environment.NewLine, e.ToString()));
            }
            finally
            {
                m_currentData = saveFile;
            }

            if (saveFile == null)
            {
                Debug.LogError("Unable to load save filefile");
                return;
            }

            m_vehicles = LoadCustom <List <ISellVehicle> >(m_vehiclesSavePath, new VehicleConverter());
            m_research = LoadCustom <List <IResearch> >(m_researchSavePath, new ResearchJsonConverter(m_researchManager));
            m_houses   = LoadCustom <List <IHouse> >(m_housesSavePath, new HouseJsonConverter());
        }

        if (OnDataLoaded != null)
        {
            OnDataLoaded.Invoke(m_currentData, m_research, m_vehicles, m_houses);
        }
    }
Ejemplo n.º 7
0
        public void LoadLenguageData()
        {
            translations = data.DataToDictionary();

            loaded = true;
            OnDataLoaded?.Invoke();
        }
Ejemplo n.º 8
0
 internal static void LoadDevicesData()
 {
     QuickLogger.Info("Loading Save Data...");
     ModUtils.LoadSaveData <Dictionary <string, string> >(SaveDataFilename, GetSaveFileDirectory(), (data) =>
     {
         QuickLogger.Info("Save Data Loaded");
         OnDataLoaded?.Invoke(data);
     });
 }
Ejemplo n.º 9
0
 public static void LoadSaveData()
 {
     Logger.Log("Loading Save Data...");
     ModUtils.LoadSaveData <SaveData>(SaveDataFilename, (data) => {
         saveData = data;
         Logger.Log("Save Data Loaded");
         OnDataLoaded?.Invoke(saveData);
     });
 }
Ejemplo n.º 10
0
 public void Init(OnDataLoaded onDataLoaded, OnSetCompValue onSetAvaliableComp,
                  OnSetAvailableDrawable onSetAvailableDrawable, OnSetAnchor onSetAnchor, OnRefreshXML onRefreshXML)
 {
     _onDataLoaded           = onDataLoaded;
     _onSetAvaliableComp     = onSetAvaliableComp;
     _onSetAvailableDrawable = onSetAvailableDrawable;
     _onSetAnchor            = onSetAnchor;
     _onRefreshXML           = onRefreshXML;
 }
Ejemplo n.º 11
0
    private void SubcribeOnEvents()
    {
        localizationLoader.OnDataLoaded += (data) =>
        {
            PopulateLocalizedText(data);
            OnDataLoaded?.Invoke();
        };

        OnLanguageChange += () => LoadLocalizedText();
    }
Ejemplo n.º 12
0
 internal static void LoadData()
 {
     QuickLogger.Info("Loading Save Data...");
     ModUtils.LoadSaveData <SaveData>(SaveDataFilename, GetSaveFileDirectory(), (data) =>
     {
         _saveData = data;
         QuickLogger.Info("Save Data Loaded");
         OnDataLoaded?.Invoke(_saveData);
     });
 }
Ejemplo n.º 13
0
 public void Init(OnDataLoaded onDataLoaded, OnSetCompValue onSetCompValue, OnSetAvailableDrawable onSetAvailableDrawable,
                  OnAddAnchor onAddAnchor, OnAddAnchorProperty onAddAnchorProperty, OnRefreshXML onRefreshXML)
 {
     _onDataLoaded           = onDataLoaded;
     _onSetCompValue         = onSetCompValue;
     _onSetAvailableDrawable = onSetAvailableDrawable;
     _onAddAnchor            = onAddAnchor;
     _onAddAnchorProperty    = onAddAnchorProperty;
     _onRefreshXML           = onRefreshXML;
 }
    public void Load(string fileName)
    {
        string filePath = Path.Combine(Application.streamingAssetsPath, fileName);

        if (File.Exists(filePath))
        {
            OnDataLoaded?.Invoke(File.ReadAllText(filePath));
        }
        else
        {
            Debug.LogWarning("Cannot find " + fileName + " localization file");
        }
    }
Ejemplo n.º 15
0
    public void LoadData()
    {
        print("Entra a load data");
        //Load configuration settings
        ConfigurationSettings settings = settingsPath.LoadDataPlayerPrefs <ConfigurationSettings>();

        ConfigurationManager.settings = SaveLoadDataExtensions.CheckData(settings);

        //Load players record
        ScoreData record = scorePath.LoadDataPlayerPrefs <ScoreData>();

        ScoreManager.record = SaveLoadDataExtensions.CheckData(record);

        //data is loaded
        dataLoaded = true;
        OnDataLoaded?.Invoke();
    }
Ejemplo n.º 16
0
        public void GenerateData()
        {
            var txt      = File.ReadAllText("/.../");
            var dataItem = JsonConvert.DeserializeObject <DataItem>(txt);

            if (dataItem.Status == 1)
            {
                Items  = (List <WordItem>)(dataItem.Data);
                Status = 1;
            }
            else
            {
                Status       = 0;
                ErrorMessage = (string)(dataItem.Data);
            }
            OnDataLoaded?.Invoke();
        }
    public IEnumerator LocalizationGetRequest(string filePath)
    {
        UnityWebRequest request             = UnityWebRequest.Get(filePath);
        UnityWebRequestAsyncOperation async = request.SendWebRequest();

        while (!async.isDone)
        {
            yield return(null);
        }

        if (request.isNetworkError || request.isHttpError)
        {
            OnDataLoaded?.Invoke(request.error);
        }
        else
        {
            OnDataLoaded?.Invoke(request.downloadHandler.text);
        }
    }
Ejemplo n.º 18
0
        /// <summary>
        /// 加载 <see cref="DataSourceProvider"/> 绑定方法的数据。
        /// </summary>
        public async Task LoadData()
        {
            ShowLoading();

            var dataSource = await Task.Run(() => DataSourceProvider());

            if (!(dataSource is IEnumerable data))
            {
                throw new InvalidOperationException($"{nameof(DataSourceProvider)} 返回的对象不是 {nameof(IEnumerable)} 的实例");
            }
            await OnDataLoading.InvokeAsync(null);

            Data = data.Cast <object>().ToList();
            await OnDataLoaded.InvokeAsync(Data);

            HideLoading();

            InitializeRowCss();
        }
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var view = inflater.Inflate(Resource.Layout.fragment, container, false);

            Cheeseknife.Inject(this, view);

            _list    = App.Container.Resolve <IApiService>().GetAllEvents();
            _adapter = new EventAdapter(_list);

            _adapter.OnItemClicked += Adapter_OnItemClicked;
            _recyclerView.SetAdapter(_adapter);
            _recyclerView.HasFixedSize = true;
            _recyclerView.SetLayoutManager(new LinearLayoutManager(Activity));

            OnDataLoaded?.Invoke(this, null);

            _refresher.Refresh += Refresher_OnRefresh;
            _floatingActionButton.Visibility = ViewStates.Visible;
            return(view);
        }
Ejemplo n.º 20
0
        internal static void LoadData()
        {
            if (_saveData != null)
            {
                return;
            }
            QuickLogger.Info("Loading Save Data...");
            ModUtils.LoadSaveData <SaveData>(SaveDataFilename, GetSaveFileDirectory(), (data) =>
            {
                _saveData = data;
                Servers   = data.Servers;

                foreach (KeyValuePair <string, ServerData> objServer in data.Servers)
                {
                    QuickLogger.Debug($"Server Data: S={objServer.Value.Server?.Count} || F={objServer.Value.ServerFilters?.Count}");
                }

                QuickLogger.Info("Save Data Loaded");
                OnDataLoaded?.Invoke(_saveData);
            });
        }
Ejemplo n.º 21
0
        public void LoadData(int dataSize, int numberOfThreads, TaskCreationOptions taskCreationOptions)
        {
            if (numberOfThreads > MAX_THREAD_POOL || numberOfThreads < 1)
            {
                throw new Exception($"MIN THREAD POOL ALLOWED: 1 Threads || MAX THREAD POOL ALLOWED: {MAX_THREAD_POOL} Threads");
            }

            ConcurrentBag <ComplexObject> concurrentListCollectionObject = new ConcurrentBag <ComplexObject>();

            List <Task> taskList  = new List <Task>();
            int         batchSize = dataSize / numberOfThreads;

            for (int i = 1; i <= numberOfThreads; ++i)
            {
                taskList.Add(Task.Factory.StartNew(() =>
                {
                    int numberOfThread = GetThreadNumber();
                    ComplexObjectBuilder complexObjectBuilder = new ComplexObjectBuilder();

                    for (int itemsProcessed = 1; itemsProcessed <= batchSize; ++itemsProcessed)
                    {
                        //Notify the numbers of items processed
                        if (OnStatusProgress != null && (itemsProcessed % REFRESH_FRECUENCY == 0 || itemsProcessed == batchSize))
                        {
                            NotifyUtilities.Notify(OnStatusProgress, numberOfThread, Thread.CurrentThread.ManagedThreadId, itemsProcessed);
                        }

                        //Add generated items to collection
                        concurrentListCollectionObject.Add(complexObjectBuilder.GenerateRandomDefaultModel());
                    }
                }, taskCreationOptions));
            }

            //Wait for finish
            Task.WaitAll(taskList.ToArray());

            collectionObjects = new List <ComplexObject>(concurrentListCollectionObject);

            OnDataLoaded?.Invoke(this, null);
        }
Ejemplo n.º 22
0
        public void OnLoadData()
        {
            LogUtils.DoLog($"LOADING DATA {GetType()}");
            instance.Instances = new Dictionary <Type, IDataExtension>();
            List <Type> instancesExt      = ReflectionUtils.GetInterfaceImplementations(typeof(IDataExtension), GetType());
            var         instancesLegacies = ReflectionUtils.GetSubtypesRecursive(typeof(DataExtensionLegacyBase <>), GetType()).ToDictionary(x => x.BaseType.GetGenericArguments()[0], x => x);

            LogUtils.DoLog($"SUBTYPE COUNT: {instancesExt.Count}; LEGACY COUNT: {instancesLegacies.Count}");
            foreach (Type type in instancesExt)
            {
                LogUtils.DoLog($"LOADING DATA TYPE {type}");
                if (type.IsGenericType)
                {
                    try
                    {
                        var targetParameters = type.Assembly.GetTypes().Where(x => !x.IsAbstract && !x.IsInterface && !x.IsGenericType && ReflectionUtils.CanMakeGenericTypeVia(type.GetGenericArguments()[0], x)).ToArray();
                        LogUtils.DoLog($"PARAMETER PARAMS FOR {type.GetGenericArguments()[0]} FOUND: [{string.Join(",", targetParameters.Select(x => x.ToString()).ToArray())}]");
                        foreach (var param in targetParameters)
                        {
                            var targetType = type.MakeGenericType(param);
                            ProcessExtension(instancesLegacies, targetType);
                        }
                    }
                    catch (Exception e)
                    {
                        LogUtils.DoErrorLog($"FAILED CREATING GENERIC PARAM EXTENSOR: {e}");
                    }
                }
                else
                {
                    ProcessExtension(instancesLegacies, type);
                }
            }

            ThreadHelper.dispatcher.Dispatch(() =>
            {
                OnDataLoaded?.Invoke();
                OnDataLoaded = null;
            });
        }
Ejemplo n.º 23
0
        protected virtual async Task LoadData()
        {
            if (!loaded && has_id)
            {
                isLoading = true;
                _Loading.Show();
                var response = await _api.Get($"{url}{id}");

                if (response != null)
                {
                    if (response.Status == 200)
                    {
                        current_id = id;
                        model      = response.Data;
                        await OnDataLoaded.InvokeAsync(model);
                    }
                    else
                    {
                        _toastService.ShowWarning(response.Message, "Failed");
                    }
                }
                else
                {
                    _toastService.ShowError($"Fial to get: {id}", "Failed");
                }


                loaded    = true;
                isLoading = false;
                _Loading.Hide();
            }
            else if (id == "0" || id == Guid.Empty.ToString())
            {
                if ((!has_id || model == null) && !loaded)
                {
                    model = Activator.CreateInstance <T>();
                }
            }
        }
Ejemplo n.º 24
0
    private IEnumerator InitLayers()
    {
        if (dataLayers == null)
        {
            CloseProgressDialog();
            yield break;
        }

#if !UNITY_WEBGL
        if (!Directory.Exists(Paths.Sites))
        {
            Debug.LogError("Data path '" + Paths.Sites + "' doesn't exist. Trying to create it.");
            CloseProgressDialog();
            Directory.CreateDirectory(Paths.Sites);
            yield break;
        }
#endif


#if UNITY_WEBGL
        // Show progress message
        progressDialog.SetMessage(Translator.Get("Downloading data") + "...");
        progressDialog.SetProgress(0);

        yield return(PatchDataIO.StartReadingHeaders());

        progressDialog.SetProgress(0.5f);
        yield return(null);

        var paths = new List <string>();
        yield return(FileRequest.GetText(Paths.DataWebDBPatches, (tr) =>
        {
            string line;
            while ((line = tr.ReadLine()) != null)
            {
                paths.Add(line);
            }
        }));
#else
        // Find valid data directories
        var paths = GetDataDirectories();
#endif

        // Show progress message
        progressDialog.SetMessage(Translator.Get("Loading") + " ...");
        progressDialog.SetProgress(0);

        yield return(null);

        // Count the layers
        int layerCount = 0;
        foreach (var group in groups)
        {
            foreach (var layer in group.layers)
            {
                layerCount++;
            }
        }

        // Rebuild the UI
        dataLayers.Show(false);

        // Create the patches/sites for each layer
        float index         = 0;
        float time          = 0;
        float invLayerCount = 1f / layerCount;
        var   bounds        = map.MapCoordBounds;
        foreach (var group in groups)
        {
            var groupController = dataLayers.AddLayerGroup(group.name);
            foreach (var layer in group.layers)
            {
                dataLayers.AddLayer(layer, groupController);

                List <string> patchFiles = null;
                var           filesIt    = layer.GetPatchFiles(paths, (pf) => patchFiles = pf);
                if (filesIt.MoveNext())
                {
                    do
                    {
                        yield return(null);
                    } while (filesIt.MoveNext());
                    time = Time.realtimeSinceStartup + MaxProcessingTimePerFrame;
                }
#if UNITY_EDITOR
                if (findUnusedLayers && patchFiles.Count == 0)
                {
                    Debug.LogWarning("Layer " + layer.Name + " doesn't have any files.");
                }
#endif

                if (patchFiles.Count > 0)
                {
                    int   patchCount    = 0;
                    float invPatchCount = 1f / patchFiles.Count;
                    var   patches       = layer.CreatePatches(patchFiles);
                    while (patches.MoveNext())
                    {
                        patchCount++;
                        progressDialog.SetProgress((index + (patchCount * invPatchCount)) * invLayerCount);
                        if (patches.RunThruChildren())
                        {
                            do
                            {
                                if (Time.realtimeSinceStartup > time)
                                {
                                    yield return(null);

                                    time = Time.realtimeSinceStartup + MaxProcessingTimePerFrame;
                                }
                            }while (patches.RunThru());
                        }
                        else if (Time.realtimeSinceStartup > time)
                        {
                            yield return(null);

                            time = Time.realtimeSinceStartup + MaxProcessingTimePerFrame;
                        }
                    }
                }
                else if (Time.realtimeSinceStartup > time)
                {
                    yield return(null);

                    time = Time.realtimeSinceStartup + MaxProcessingTimePerFrame;
                }
                index++;
            }
        }

        PatchDataIO.StopParsingThread();

#if UNITY_EDITOR && !UNITY_WEBGL
        if (findUnusedPatches)
        {
            var extensions = new string[] { "*.csv", "*.bin" };
            var dirs       = GetDataDirectories();
            foreach (var dir in dirs)
            {
                foreach (var ext in extensions)
                {
                    var files = Directory.GetFiles(dir, ext);
                    foreach (var file in files)
                    {
                        if (Path.GetFileName(file).StartsWith("_"))
                        {
                            continue;
                        }
                        var layerName = Patch.GetFileNameLayer(file);
                        if (!dataLayers.HasLayer(layerName))
                        {
                            Debug.LogWarning("Patch is being ignored: " + file);
                        }
                    }
                }
            }
        }
#endif

        dataLayers.Show(true);
        yield return(null);

        // Update DataLayers UI (activate those layers that have sites/patches within view bounds)
        dataLayers.UpdateLayers();

        // Hide Message
        CloseProgressDialog();

        // Clean up
#if UNITY_WEBGL
        PatchDataIO.FinishReadingHeaders();
#endif

        OnDataLoaded?.Invoke();
    }
Ejemplo n.º 25
0
 private void _InvokeDataLoaded(ELoadingState LoadingState, Exception Exception = null)
 {
     OnDataLoaded?.Invoke(this, new LoadingEventArgs <IEnumerable <ISQLServer> >(LoadingState, this, Exception));
 }
        protected void InvokeDataLoaded(ELoadingState LoadingState, Exception Exception = null)
        {
            LoadingEventArgs <IEnumerable <T> > LEA = new LoadingEventArgs <IEnumerable <T> >(LoadingState, this, Exception);

            OnDataLoaded?.Invoke(this, LEA);
        }
Ejemplo n.º 27
0
        public void OnLoadData()
        {
            LogUtils.DoLog($"LOADING DATA {GetType()}");
            instance.Instances = new Dictionary <Type, IDataExtensor>();
            List <Type> instancesExt      = ReflectionUtils.GetInterfaceImplementations(typeof(IDataExtensor), GetType());
            var         instancesLegacies = ReflectionUtils.GetSubtypesRecursive(typeof(DataExtensorLegacyBase <>), GetType()).ToDictionary(x => x.BaseType.GetGenericArguments()[0], x => x);

            LogUtils.DoLog($"SUBTYPE COUNT: {instancesExt.Count}; LEGACY COUNT: {instancesLegacies.Count}");
            foreach (Type type in instancesExt)
            {
                LogUtils.DoLog($"LOADING DATA TYPE {type}");
                var basicInstance = (IDataExtensor)type.GetConstructor(new Type[0]).Invoke(new Type[0]);
                if (!SerializableDataManager.EnumerateData().Contains(basicInstance.SaveId))
                {
                    LogUtils.DoLog($"SEARCHING FOR LEGACY {type}");
                    if (instancesLegacies.ContainsKey(type))
                    {
                        var basicInstanceLegacy = (IDataExtensorLegacy)instancesLegacies[type].GetConstructor(new Type[0]).Invoke(new Type[0]);
                        if (!SerializableDataManager.EnumerateData().Contains(basicInstanceLegacy.SaveId))
                        {
                            byte[] storage2 = MemoryStreamToArray(basicInstanceLegacy.SaveId);
                            try
                            {
                                instance.Instances[type] = basicInstanceLegacy.Deserialize(storage2) ?? basicInstance;
                                if (CommonProperties.DebugMode)
                                {
                                    string content = System.Text.Encoding.UTF8.GetString(storage2);
                                    LogUtils.DoLog($"{type} DATA LEGACY {storage2.Length}b => {content}");
                                }
                                continue;
                            }
                            catch (Exception e)
                            {
                                string content = System.Text.Encoding.UTF8.GetString(storage2);
                                LogUtils.DoLog($"{type} CORRUPTED DATA! => \nException: {e.Message}\n{e.StackTrace}\nData  {storage2.Length}b:\n{content}");
                            }
                        }
                    }
                    LogUtils.DoLog($"NO DATA TYPE {type} & NO LEGACY");
                    instance.Instances[type] = basicInstance;
                    basicInstance.LoadDefaults();
                    continue;
                }
                using var memoryStream = new MemoryStream(SerializableDataManager.LoadData(basicInstance.SaveId));
                byte[] storage = memoryStream.ToArray();
                try
                {
                    instance.Instances[type] = basicInstance.Deserialize(type, storage) ?? basicInstance;
                    if (CommonProperties.DebugMode)
                    {
                        string content = System.Text.Encoding.UTF8.GetString(storage);
                        LogUtils.DoLog($"{type} DATA {storage.Length}b => {content}");
                    }
                }
                catch (Exception e)
                {
                    string content = System.Text.Encoding.UTF8.GetString(storage);
                    LogUtils.DoLog($"{type} CORRUPTED DATA! => \nException: {e.Message}\n{e.StackTrace}\nData  {storage.Length}b:\n{content}");
                    instance.Instances[type] = null;
                }
            }

            ThreadHelper.dispatcher.Dispatch(() =>
            {
                OnDataLoaded?.Invoke();
                OnDataLoaded = null;
            });
        }
Ejemplo n.º 28
0
        private static async Task <Element> DeserializeAsync(Stream stream, CancellationToken cancellationToken)
        {
            Element root   = new Element();
            Element parent = root;
            Element node   = root;

            while (stream.Position < stream.Length)
            {
                byte controlByte = (byte)stream.ReadByte();

                switch (controlByte & (byte)Directions.Mask)
                {
                case (byte)Directions.New:
                    node = AddNewNode(parent);
                    break;

                case (byte)Directions.Down:
                    parent = node;
                    node   = AddNewNode(parent);
                    break;

                case (byte)Directions.Up:
                    parent = parent.Parent;
                    node   = AddNewNode(parent);
                    break;

                case (byte)Directions.Append:
                    break;
                }

                int chunkSize = GetChunkSize(controlByte);

                if (((controlByte & (byte)Directions.Mask) == (byte)Directions.Append) && (chunkSize == 0))
                {
                    break;
                }

                byte[] buffer = new byte[chunkSize];
                await stream.ReadAsync(buffer, 0, chunkSize, cancellationToken).ConfigureAwait(false);

                if (IsDataChunk(controlByte))
                {
                    if (node != null && chunkSize > 0)
                    {
                        if (node.Data == null)
                        {
                            node.Data = new MemoryStream();
                        }

                        #region Fireing event
                        OnDataLoading?.Invoke(node, new PromptuariumLoadingEventArgs());
                        #endregion

                        await node.Data.WriteAsync(buffer, 0, chunkSize, cancellationToken).ConfigureAwait(false);

                        #region Fireing event
                        OnDataLoaded?.Invoke(node, new PromptuariumLoadedEventArgs());
                        #endregion
                    }
                }
                else
                {
                    if (node != null && chunkSize > 0)
                    {
                        if (node.MetaData == null)
                        {
                            node.MetaData = new MemoryStream();
                        }

                        #region Fireing event
                        OnMetaDataLoading?.Invoke(node, new PromptuariumLoadingEventArgs());
                        #endregion

                        await node.MetaData.WriteAsync(buffer, 0, chunkSize, cancellationToken).ConfigureAwait(false);

                        #region Fireing event
                        OnMetaDataLoaded?.Invoke(node, new PromptuariumLoadedEventArgs());
                        #endregion
                    }
                }
            }

            PurgeEmptyNodes(root);

            if (root.children.Count > 0)
            {
                return(root.children[0]);
            }
            else
            {
                return(new Element());
            }
        }