예제 #1
0
 /// <summary>
 /// 客户端文件
 /// </summary>
 /// <param name="client">文件同步客户端</param>
 /// <param name="path">文件路径</param>
 /// <param name="name">文件名称</param>
 /// <param name="fileNameKey">文件名称关键字</param>
 /// <param name="onCompleted">文件同步完成处理委托</param>
 /// <param name="isUpload">是否上传,否则为下载</param>
 internal ClientFile(Client client, string path, string name, ref FileNameKey fileNameKey, Action <ClientFile, SynchronousState> onCompleted, bool isUpload)
 {
     this.client      = client;
     this.path        = path;
     this.name        = name;
     this.FileNameKey = fileNameKey;
     this.onCompleted = onCompleted;
     this.IsUpload    = isUpload;
     fileInfo         = new FileInfo(Path.Combine(path, name));
 }
예제 #2
0
        /// <summary>
        /// 增加同步文件
        /// </summary>
        /// <param name="synchronousFile">客户端文件</param>
        /// <param name="fileNameKey">文件名称关键字</param>
        /// <returns>文件同步状态</returns>
        private SynchronousState synchronous(ClientFile synchronousFile, ref FileNameKey fileNameKey)
        {
            ClientFile clientFile;

            Monitor.Enter(fileLock);
            try
            {
                if (files.TryGetValue(fileNameKey, out clientFile))
                {
                    return(clientFile.IsUpload ? SynchronousState.Uploading : SynchronousState.Downloading);
                }
                files.Add(fileNameKey, synchronousFile);
            }
            finally { Monitor.Exit(fileLock); }
            return(SynchronousState.Success);
        }
예제 #3
0
        /// <summary>
        /// 文件上传
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="name">文件名称</param>
        /// <param name="onCompleted">文件同步完成处理委托</param>
        /// <returns>文件同步状态</returns>
        public SynchronousState Upload(string path, string name, Action <ClientFile, SynchronousState> onCompleted)
        {
            SynchronousState state = SynchronousState.Unknown;

            try
            {
                FileNameKey      fileNameKey = new FileNameKey(path.FileNameToLower(), name.FileNameToLower());
                ClientUploadFile uploadFile  = new ClientUploadFile(this, path, name, ref fileNameKey, onCompleted);
                state = synchronous(uploadFile, ref fileNameKey);
                if (state == SynchronousState.Success)
                {
                    onCompleted = null;
                    return(uploadFile.Upload());
                }
                return(state);
            }
            finally
            {
                if (onCompleted != null)
                {
                    onCompleted(null, state);
                }
            }
        }
예제 #4
0
 /// <summary>
 /// 上传文件
 /// </summary>
 /// <param name="client">文件同步客户端</param>
 /// <param name="path">文件路径</param>
 /// <param name="name">文件名称</param>
 /// <param name="fileNameKey">文件名称关键字</param>
 /// <param name="onCompleted">文件同步完成处理委托</param>
 internal ClientUploadFile(Client client, string path, string name, ref FileNameKey fileNameKey, Action <ClientFile, SynchronousState> onCompleted)
     : base(client, path, name, ref fileNameKey, onCompleted, true)
 {
 }
예제 #5
0
 /// <summary>
 /// 删除同步文件
 /// </summary>
 /// <param name="fileNameKey"></param>
 internal void Remove(ref FileNameKey fileNameKey)
 {
     Monitor.Enter(fileLock);
     files.Remove(fileNameKey);
     Monitor.Exit(fileLock);
 }