예제 #1
0
        /// <summary>
        /// 创建文件上传
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="listFileItem">列表文件数据</param>
        /// <param name="index">起始位置</param>
        /// <param name="data">文件数据</param>
        /// <param name="onCreated">上传回调处理</param>
        public void CreateUpload(string path, ref ListFileItem listFileItem, long index, ref SubArray <byte> data, Func <ReturnValue <UploadFileIdentity>, bool> onCreated)
        {
            ServerUploadFile uploadFile = null;

            try
            {
                uploadFile = new ServerUploadFile(this, path, ref listFileItem, index, ref data, onCreated);
                Monitor.Enter(fileLock);
                try
                {
                    files.Add(uploadFile.Identity, uploadFile);
                }
                finally { Monitor.Exit(fileLock); }
                onCreated = null;
            }
            finally
            {
                if (onCreated == null)
                {
                    uploadFile.Start();
                }
                else
                {
                    onCreated(new UploadFileIdentity(SynchronousState.ServerException));
                }
            }
        }
예제 #2
0
 /// <summary>
 /// 上传文件
 /// </summary>
 /// <param name="server">文件同步服务端</param>
 /// <param name="path">文件路径</param>
 /// <param name="listFileItem">列表文件数据</param>
 /// <param name="index">当前写入位置</param>
 /// <param name="data">写入数据</param>
 /// <param name="onCreated">创建文件回调处理</param>
 internal ServerUploadFile(Server server, string path, ref ListFileItem listFileItem, long index, ref SubArray <byte> data, Func <ReturnValue <UploadFileIdentity>, bool> onCreated)
     : base(server, path, ref listFileItem, null)
 {
     this.onCreated = onCreated;
     this.index     = index;
     this.data      = data;
 }
예제 #3
0
 /// <summary>
 /// 服务端文件
 /// </summary>
 /// <param name="server">文件同步服务端</param>
 /// <param name="path">文件路径</param>
 /// <param name="listFileItem">列表文件数据</param>
 /// <param name="fileInfo">文件信息</param>
 internal ServerFile(Server server, string path, ref ListFileItem listFileItem, FileInfo fileInfo)
 {
     this.server         = server;
     this.path           = path;
     this.listFileItem   = listFileItem;
     this.fileInfo       = fileInfo ?? new FileInfo(Path.Combine(Path.Combine(server.Path, path), listFileItem.Name));
     IsUpload            = fileInfo == null;
     Identity            = Interlocked.Increment(ref identity);
     checkTimeoutSeconds = AutoCSer.Date.NowTime.CurrentSeconds;
 }
예제 #4
0
        /// <summary>
        /// 获取文件列表
        /// </summary>
        /// <param name="directory"></param>
        /// <returns></returns>
        private static ListFileItem[] getList(DirectoryInfo directory)
        {
            DirectoryInfo[] DirectoryArray = directory.GetDirectories();
            FileInfo[]      FileArray      = directory.GetFiles();
            ListFileItem[]  ListFileArray  = new ListFileItem[DirectoryArray.Length + FileArray.Length];
            int             Index          = 0;

            foreach (DirectoryInfo NextDirectory in DirectoryArray)
            {
                ListFileArray[Index++].Set(NextDirectory.Name, NextDirectory.LastWriteTimeUtc, long.MinValue);
            }
            foreach (FileInfo NextFile in FileArray)
            {
                ListFileArray[Index++].Set(NextFile.Name, NextFile.LastWriteTimeUtc, NextFile.Length);
            }
            return(ListFileArray);
        }
예제 #5
0
        /// <summary>
        /// 创建文件下载
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="listFileItem">列表文件数据</param>
        /// <param name="onCreated">下载回调处理</param>
        public void CreateDownload(string path, ref ListFileItem listFileItem, Func <ReturnValue <DownloadFileIdentity>, bool> onCreated)
        {
            ServerDownloadFile downloadFile = null;
            SynchronousState   state        = SynchronousState.ServerException;

            try
            {
                FileInfo fileInfo = new FileInfo(System.IO.Path.Combine(System.IO.Path.Combine(Path, path), listFileItem.Name));
                if (fileInfo.Exists)
                {
                    downloadFile = new ServerDownloadFile(this, path, ref listFileItem, fileInfo, onCreated);
                    Monitor.Enter(fileLock);
                    try
                    {
                        files.Add(downloadFile.Identity, downloadFile);
                    }
                    finally { Monitor.Exit(fileLock); }
                    onCreated = null;
                }
                else
                {
                    state = SynchronousState.NotExists;
                }
            }
            finally
            {
                if (onCreated == null)
                {
                    downloadFile.Start();
                }
                else
                {
                    onCreated(new DownloadFileIdentity(state));
                }
            }
        }
예제 #6
0
 /// <summary>
 /// 下载文件
 /// </summary>
 /// <param name="server">文件同步服务端</param>
 /// <param name="path">文件路径</param>
 /// <param name="listFileItem">列表文件数据</param>
 /// <param name="fileInfo">文件信息</param>
 /// <param name="onCreated">创建文件回调处理</param>
 internal ServerDownloadFile(Server server, string path, ref ListFileItem listFileItem, FileInfo fileInfo, Func <ReturnValue <DownloadFileIdentity>, bool> onCreated)
     : base(server, path, ref listFileItem, fileInfo)
 {
     this.onCreated = onCreated;
 }