コード例 #1
0
        private void download(fastCSharp.net.tcp.commandServer.socket client, listName listName, Stream fileStream
                              , Func <returnValue <listName>, bool> onDownload)
        {
            listName listNameState = new listName {
                Length = (long)(byte)fileState.NoPermission, LastWriteTime = DateTime.MinValue
            };

            try
            {
                if (verify(client))
                {
                    FileInfo file = new FileInfo(listName.Name);
                    listName.Set(file.FullName);
                    if (verify(client, listName.LowerName, permissionType.Read))
                    {
                        if (file.Exists)
                        {
                            fastCSharp.threading.threadPool.TinyPool.Start(downloader.GetDownload(onDownload, listName, fileStream));
                            return;
                        }
                        listNameState.Length = (long)(byte)fileState.FileNotFound;
                    }
                }
            }
            catch (Exception error)
            {
                listNameState.Length = (long)(byte)fileState.Exception;
                log.Error.Add(error, null, false);
            }
            pub.Dispose(ref fileStream);
            onDownload(listNameState);
        }
コード例 #2
0
        private fileState upload(fastCSharp.net.tcp.commandServer.socket client, listName listName, byte[] data, int backupIdentity, bool isTimeVersion)
        {
            fileState fileState = fileState.NoPermission;

            try
            {
                if (verify(client))
                {
                    FileInfo file = new FileInfo(listName.Name);
                    listName.Set(file.FullName);
                    permission permission = getPermission(client, listName.LowerName);
                    if (verify(permission, permissionType.Write))
                    {
                        bool isFile = file.Exists;
                        if (isFile && isTimeVersion && file.LastWriteTimeUtc > listName.LastWriteTime)
                        {
                            return(server.fileState.TimeVersionError);
                        }
                        if (!isFile || file.LastWriteTimeUtc != listName.LastWriteTime || listName.Length != file.Length)
                        {
                            if (isFile)
                            {
                                permission.Backup(file, backupIdentity);
                            }
                            File.WriteAllBytes(listName.Name, data);
                            new FileInfo(listName.Name).LastWriteTimeUtc = listName.LastWriteTime;
                        }
                        fileState = fileState.Success;
                    }
                }
            }
            catch (Exception error)
            {
                fileState = fileState.Exception;
                log.Error.Add(error, listName.Name, false);
            }
            return(fileState);
        }
コード例 #3
0
        private void upload(fastCSharp.net.tcp.commandServer.socket client, listName listName, Stream fileStream, int backupIdentity, bool isTimeVersion
                            , Func <returnValue <fileState>, bool> onUpload)
        {
            fileState fileState = fileState.NoPermission;

            try
            {
                if (verify(client))
                {
                    FileInfo file = new FileInfo(listName.Name);
                    listName.Set(file.FullName);
                    permission permission = getPermission(client, listName.LowerName);
                    if (verify(permission, permissionType.Write))
                    {
                        DirectoryInfo directory = file.Directory;
                        if (!directory.Exists)
                        {
                            directory.Create();
                        }
                        Action upload = uploader.GetUpload(permission, onUpload, listName, fileStream, backupIdentity, isTimeVersion);
                        onUpload   = null;
                        fileStream = null;
                        fastCSharp.threading.threadPool.TinyPool.Start(upload);
                    }
                }
            }
            catch (Exception error)
            {
                fileState = fileState.Exception;
                log.Error.Add(error, listName.Name, false);
            }
            pub.Dispose(ref fileStream);
            if (onUpload != null)
            {
                onUpload(fileState);
            }
        }
コード例 #4
0
            /// <summary>
            /// 下载文件
            /// </summary>
            private void download()
            {
                listName listNameState = new listName {
                    Length = (long)(byte)fileState.Exception, LastWriteTime = DateTime.MinValue
                };
                FileStream readStream = null;

                try
                {
                    FileInfo fileInfo = new FileInfo(listName.Name);
                    if (fileInfo.LastWriteTimeUtc != listName.LastWriteTime || fileInfo.Length != listName.Length)
                    {
                        listNameState.Set(string.Empty, fileInfo.LastWriteTimeUtc, fileInfo.Length);
                    }
                    else
                    {
                        long position = fileStream.Position;
                        readStream = new FileStream(listName.Name, FileMode.Open, FileAccess.Read, FileShare.Read);
                        long length = readStream.Length;
                        if (position < length)
                        {
                            if (position != 0)
                            {
                                readStream.Seek(position, SeekOrigin.Begin);
                            }
                            while (position < length)
                            {
                                int read = readStream.Read(buffer, 0, buffer.Length);
                                if (read > 0)
                                {
                                    fileStream.Write(buffer, 0, read);
                                    position += read;
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        if (position == length)
                        {
                            listNameState.Set(fileInfo.Name, fileInfo.LastWriteTimeUtc, length);
                        }
                        else
                        {
                            listNameState.Length = (long)(byte)fileState.LengthError;
                        }
                    }
                }
                catch (Exception error)
                {
                    listNameState.Length = (long)(byte)fileState.Exception;
                    log.Error.Add(error, null, false);
                }
                Exception exception = null;

                pub.Dispose(ref readStream, ref exception);
                if (exception != null)
                {
                    log.Error.Add(exception, null, false);
                    if (listNameState.Name != null)
                    {
                        listNameState.Length = (long)(byte)fileState.Exception;
                        listNameState.Set(null);
                    }
                }
                push(listNameState);
            }