Exemplo n.º 1
0
        internal RemoteFileWriteStream(RemoteStorage r, RemoteFile file)
        {
            remoteStorage = r;

            _handle = remoteStorage.native.FileWriteStreamOpen(file.FileName);
            _file   = file;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Attempt to attach a <see cref="RemoteStorage"/> file to the current user's leaderboard entry.
        /// Can be useful for storing replays along with scores.
        /// </summary>
        /// <returns>True if the file attachment process has started</returns>
        public bool AttachRemoteFile(RemoteFile file, AttachRemoteFileCallback onSuccess = null, FailureCallback onFailure = null)
        {
            if (!IsValid)
            {
                return(false);
            }

            if (file.IsShared)
            {
                var handle = client.native.userstats.AttachLeaderboardUGC(BoardId, file.UGCHandle, (result, error) =>
                {
                    if (!error && result.Result == Result.OK)
                    {
                        onSuccess?.Invoke();
                    }
                    else
                    {
                        onFailure?.Invoke(result.Result == 0 ? Callbacks.Result.IOFailure : (Callbacks.Result)result.Result);
                    }
                });

                return(handle.CallResultHandle != 0);
            }

            file.Share(() =>
            {
                if (!file.IsShared || !AttachRemoteFile(file, onSuccess, onFailure))
                {
                    onFailure?.Invoke(Callbacks.Result.Fail);
                }
            }, onFailure);
            return(true);
        }
Exemplo n.º 3
0
        internal void OnWrittenNewFile(RemoteFile file)
        {
            if (_files.Any(x => x.FileName == file.FileName))
            {
                return;
            }

            _files.Add(file);
            file.Exists = true;

            InvalidateFiles();
        }
Exemplo n.º 4
0
        private void UpdateFiles()
        {
            if (!_filesInvalid)
            {
                return;
            }
            _filesInvalid = false;

            foreach (var file in _files)
            {
                file.Exists = false;
            }

            var count = FileCount;

            for (var i = 0; i < count; ++i)
            {
                int size;
                var name      = NormalizePath(native.GetFileNameAndSize(i, out size));
                var timestamp = native.GetFileTimestamp(name);

                var existing = _files.FirstOrDefault(x => x.FileName == name);
                if (existing == null)
                {
                    existing = new RemoteFile(this, name, client.SteamId, size, timestamp);
                    _files.Add(existing);
                }
                else
                {
                    existing.SizeInBytes   = size;
                    existing.FileTimestamp = timestamp;
                }

                existing.Exists = true;
            }

            for (var i = _files.Count - 1; i >= 0; --i)
            {
                if (!_files[i].Exists)
                {
                    _files.RemoveAt(i);
                }
            }
        }