ROOT logo
// $Id: XrdFileCloseReporter.h 2819 2012-07-13 02:56:44Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#ifndef XrdMon_XrdFileCloseReporter_H
#define XrdMon_XrdFileCloseReporter_H

#include "Glasses/ZGlass.h"
#include "Gled/GCondition.h"

class XrdFile;
class XrdUser;
class XrdServer;
class ZLog;

class GThread;


class XrdFileCloseReporter : public ZGlass
{
  MAC_RNR_FRIENDS(XrdFileCloseReporter);

public:
  struct FileUserServer
  {
    XrdFile   *fFile;
    XrdUser   *fUser;
    XrdServer *fServer;

    FileUserServer() :
      fFile(0), fUser(0), fServer (0) {}
    FileUserServer(XrdFile* f, XrdUser* u, XrdServer* s) :
      fFile(f), fUser(u), fServer (s) {}
  };

private:
  void _init();

protected:
  ZLink<ZLog>           mLog;             // X{GS} L{}

  Int_t                 mCondWaitSec;     // X{GS} 7 Value(-range=>[0, 10000, 1])

  Int_t                 mNProcessed;      //! X{G} 7 ValOut()
  Int_t                 mNQueued;         //! X{G} 7 ValOut()
  Bool_t                bRunning;         //! X{G} 7 BoolOut()

  GThread              *mReporterThread;  //!
  GCondition            mReporterCond;    //!
  list<FileUserServer>  mReporterQueue;   //!

  static void* tl_ReportLoop(XrdFileCloseReporter* r);
  static void  cu_ReportLoop(XrdFileCloseReporter* r);
  void ReportLoop();
  void DrainQueue();

  virtual void ReportLoopInit();
  virtual void ReportFileClosed(FileUserServer& fus);
  virtual void ReportCondWaitTimeout();
  virtual void ReportLoopFinalize();

public:
  XrdFileCloseReporter(const Text_t* n="XrdFileCloseReporter", const Text_t* t=0);
  virtual ~XrdFileCloseReporter();

  void FileClosed(XrdFile* file, XrdUser* user, XrdServer* server);

  void StartReporter(); // X{Ed} 7 MButt()
  void StopReporter();  // X{Ed} 7 MButt()

#include "XrdFileCloseReporter.h7"
  ClassDef(XrdFileCloseReporter, 1);
}; // endclass XrdFileCloseReporter

#endif
 XrdFileCloseReporter.h:1
 XrdFileCloseReporter.h:2
 XrdFileCloseReporter.h:3
 XrdFileCloseReporter.h:4
 XrdFileCloseReporter.h:5
 XrdFileCloseReporter.h:6
 XrdFileCloseReporter.h:7
 XrdFileCloseReporter.h:8
 XrdFileCloseReporter.h:9
 XrdFileCloseReporter.h:10
 XrdFileCloseReporter.h:11
 XrdFileCloseReporter.h:12
 XrdFileCloseReporter.h:13
 XrdFileCloseReporter.h:14
 XrdFileCloseReporter.h:15
 XrdFileCloseReporter.h:16
 XrdFileCloseReporter.h:17
 XrdFileCloseReporter.h:18
 XrdFileCloseReporter.h:19
 XrdFileCloseReporter.h:20
 XrdFileCloseReporter.h:21
 XrdFileCloseReporter.h:22
 XrdFileCloseReporter.h:23
 XrdFileCloseReporter.h:24
 XrdFileCloseReporter.h:25
 XrdFileCloseReporter.h:26
 XrdFileCloseReporter.h:27
 XrdFileCloseReporter.h:28
 XrdFileCloseReporter.h:29
 XrdFileCloseReporter.h:30
 XrdFileCloseReporter.h:31
 XrdFileCloseReporter.h:32
 XrdFileCloseReporter.h:33
 XrdFileCloseReporter.h:34
 XrdFileCloseReporter.h:35
 XrdFileCloseReporter.h:36
 XrdFileCloseReporter.h:37
 XrdFileCloseReporter.h:38
 XrdFileCloseReporter.h:39
 XrdFileCloseReporter.h:40
 XrdFileCloseReporter.h:41
 XrdFileCloseReporter.h:42
 XrdFileCloseReporter.h:43
 XrdFileCloseReporter.h:44
 XrdFileCloseReporter.h:45
 XrdFileCloseReporter.h:46
 XrdFileCloseReporter.h:47
 XrdFileCloseReporter.h:48
 XrdFileCloseReporter.h:49
 XrdFileCloseReporter.h:50
 XrdFileCloseReporter.h:51
 XrdFileCloseReporter.h:52
 XrdFileCloseReporter.h:53
 XrdFileCloseReporter.h:54
 XrdFileCloseReporter.h:55
 XrdFileCloseReporter.h:56
 XrdFileCloseReporter.h:57
 XrdFileCloseReporter.h:58
 XrdFileCloseReporter.h:59
 XrdFileCloseReporter.h:60
 XrdFileCloseReporter.h:61
 XrdFileCloseReporter.h:62
 XrdFileCloseReporter.h:63
 XrdFileCloseReporter.h:64
 XrdFileCloseReporter.h:65
 XrdFileCloseReporter.h:66
 XrdFileCloseReporter.h:67
 XrdFileCloseReporter.h:68
 XrdFileCloseReporter.h:69
 XrdFileCloseReporter.h:70
 XrdFileCloseReporter.h:71
 XrdFileCloseReporter.h:72
 XrdFileCloseReporter.h:73
 XrdFileCloseReporter.h:74
 XrdFileCloseReporter.h:75
 XrdFileCloseReporter.h:76
 XrdFileCloseReporter.h:77