예제 #1
0
    public override MelDBLoadRequest LoadIndexAsync()
    {
        var request = new MelDBLoadRequest();

        coroutineHolder.StartCoroutine(LoadIndexInner(request));
        return(request);
    }
예제 #2
0
    private IEnumerator LoadIndexInner(MelDBLoadRequest request)
    {
        var assetRequest = Resources.LoadAsync <TextAsset>(IndexFilename);

        while (!assetRequest.isDone)
        {
            yield return(null);
        }
        var dataAsset = assetRequest.asset as TextAsset;

        if (dataAsset == null)
        {
            throw new Exception("Failed to load from Resources: " + IndexFilename);
        }
        var bytes = dataAsset.bytes;

        lock (_initLock)
        {
            var thread = new System.Threading.Thread(() => {
                request.result = LoadIndexFromBytes(bytes);
                request.isDone = request.result != null;
            });
            thread.IsBackground = true;
            thread.Start();
        }
    }
예제 #3
0
    public override MelDBLoadRequest LoadIndexAsync()
    {
        lock (_initLock)
        {
            var indexPath = GetIndexPath();

            if (!File.Exists(indexPath))
            {
                throw new Exception("file was not found: " + indexPath);
            }

            var request = new MelDBLoadRequest();
            var thread  = new System.Threading.Thread(() => {
                XmlSerializer serializer = new XmlSerializer(typeof(MelDB));
                var reader = new FileStream(indexPath, FileMode.Open);
                var db     = serializer.Deserialize(reader) as MelDB;
                reader.Dispose();
                request.result = db;
                request.isDone = true;
            });
            thread.IsBackground = true;
            thread.Start();
            return(request);
        }
    }