示例#1
0
文件: Rules.cs 项目: DmT021/Urfunet
 public override void Eval(Client c, IFSObject obj)
 {
     base.Eval(c, obj);
     var srcFile = obj as BaseFile;
     c.Log(LogLevel.Info, "Отсылаю команду \"удалить файл {0}\"", srcFile.Name);
     c.Environment.SendToAll(new DeleteFSObjMessage(srcFile));
 }
示例#2
0
文件: Rules.cs 项目: DmT021/Urfunet
 public override void Eval(Client c, IFSObject obj)
 {
     base.Eval(c, obj);
     var srcFile = obj as BaseFile;
     if (c.GetFileReplics(srcFile).Contains(c))/// srcFile.InReplics(c.Id))
     {
         var owner = c.GetFileOwner(srcFile);
         c.Log(LogLevel.Info, "Получение реплики для {0}", srcFile.Name);
         if (owner != null && owner.IsRemote)
             (owner as RemoteClient).Send(new DownloadFileMessage(srcFile, null));
     }
 }
示例#3
0
文件: Rules.cs 项目: DmT021/Urfunet
        public override void Eval(Client c, IFSObject obj)
        {
            base.Eval(c, obj);
            var srcFile = obj as BaseFile;
            c.Log(LogLevel.Info, "становлюсь координатором {0}", srcFile.Name);
            srcFile.SetOwner(c.Id.ToString());

            lock (c.RemoteClients)
            {
                foreach (var r in c.GetRandomClients(2, c.RemoteClients))
                    srcFile.AddReplica(r.Id.ToString());

            }
            c.Log(LogLevel.Info, "Рассылаю обновленную метаинформацию", srcFile.Name);
            env.SendToAll(new NewFileMessage(srcFile));
        }
示例#4
0
文件: Rules.cs 项目: DmT021/Urfunet
 public virtual void Eval(Client c, IFSObject obj)
 {
     this.c = c;
 }
示例#5
0
        public IFSObject Delete(IFSObject iFSObject, FSObjectEvents eventtype)
        {
            //     if (ReadOnly) return null;

            lock (RootDir.FS)
            {
                ///check exists
                ///
                if (Find(iFSObject.RelativePath) == null)
                {
                    throw new Exception(string.Format("Cant found {0} ", iFSObject.Name));
                    return null;
                }

                if (iFSObject is BaseFile) (iFSObject as BaseFile).Delete();
                if (iFSObject is BaseFolder)
                {
                    var its = (iFSObject as BaseFolder).Items;
                    while (its.Count > 0)
                        Delete(its[0], eventtype);
                    (iFSObject as BaseFolder).Delete(eventtype);
                }

                //remove sourcelist fs
                if (iFSObject is BaseFile)
                {
                    var f = iFSObject as BaseFile;
                    f.ParentFolder.Files.Remove(f);
                }
                else if (iFSObject is BaseFolder)
                {
                    var f = iFSObject as BaseFolder;
                    (f.ParentFolder as BaseFolder).Folders.Remove(f);
                }

                if (iFSObject is BaseFile)
                    if (_OnFileEvent != null)
                        _OnFileEvent(iFSObject as BaseFile, eventtype);
                if (iFSObject is BaseFolder)
                    if (_OnFolderEvent != null)
                        _OnFolderEvent(iFSObject as BaseFolder, eventtype);

                return iFSObject;
            }
        }
示例#6
0
 public DeleteFSObjMessage(IFSObject obj)
 {
     RelativePath = obj.RelativePath;
 }