Keeper.h 3.26 KB
Newer Older
1 2
/**************************************************************************/
/*                                                                        */
3
/* Copyright (c) 2001, 2010 NoMachine, http://www.nomachine.com/.         */
4 5 6 7 8 9 10 11
/*                                                                        */
/* NXCOMP, NX protocol compression and NX extensions to this software     */
/* are copyright of NoMachine. Redistribution and use of the present      */
/* software is allowed according to terms specified in the file LICENSE   */
/* which comes in the source distribution.                                */
/*                                                                        */
/* Check http://www.nomachine.com/licensing.html for applicability.       */
/*                                                                        */
12
/* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
/*                                                                        */
/* All rights reserved.                                                   */
/*                                                                        */
/**************************************************************************/

#ifndef Keeper_H
#define Keeper_H

#include "Misc.h"
#include "Types.h"

//
// Set the verbosity level.
//

#define PANIC
#define WARNING
#undef  TEST
#undef  DEBUG

//
// Define this to check how many file
// nodes are allocated and deallocated.
//

#undef  REFERENCES

class Keeper;

class File
{
  friend class Keeper;

  public:

  File();

  ~File();

  //
  // Allow sort by time and size. If time
  // is the same, keep the bigger element.
  //

  bool compare(File *b) const;

  private:

  char *name_;

  int    size_;
  time_t time_;

  #ifdef REFERENCES

  static int references_;

  #endif
};

class Keeper
{
  public:

  Keeper(int caches, int images, const char *root,
             int sleep, int parent);

  ~Keeper();

  //
  // Call this just once.
  //

  int cleanupCaches();

  //
  // Call this at any given interval.
  //

  int cleanupImages();

  //
  // Call this if it's time to exit.
  //

  void setSignal(int signal)
  {
    signal_ = signal;
  }

  int getSignal()
  {
    return signal_;
  }

  int getParent()
  {
    return parent_;
  }

  private:

  //
  // Get a list of files in directory.
  //
  
  int collect(const char *path);

  //
  // Sort the collected files according to
  // last modification time and delete the
  // older ones until disk size is below
  // the threshold.
  //

  int cleanup(int threshold);

  //
  // Empty the files repository.
  //

  void empty();

  //
  // Size in bytes of total allowed
  // storage for persistent caches.
  //

  int caches_;

  //
  // Size in bytes of total allowed
  // storage for images cache.
  //

  int images_;

  //
  // Path of the NX root directory.
  //

  char *root_;

  //
  // The little delay to be introduced
  // before reading a new entry.
  //

  int sleep_;

  //
  // Total size of files in repository.
  //

  int total_;

  //
  // The parent process, so we can exit
  // if it is gone.
  //

  int parent_;

  //
  // Set if we need to give up because
  // of a signal.
  //

  int signal_;

  //
  // Repository where to collect files.
  //

  T_files *files_;
};

#endif /* Keeper_H */