ROOT logo
// $Id: XrdServer.h 2729 2012-04-16 06:37:59Z 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_XrdServer_H
#define XrdMon_XrdServer_H

#include <Glasses/ZNameMap.h>
#include <Stones/SXrdServerId.h>
#include <Gled/GTime.h>

class XrdMonSucker;
class XrdUser;
class XrdFile;


class XrdServer : public ZNameMap
{
  MAC_RNR_FRIENDS(XrdServer);
  friend class XrdMonSucker;

private:
  SXrdServerId m_server_id; //!

  void _init();

protected:
  TString           mHost;        // X{GR}   7 TextOut()
  TString           mDomain;      // X{GR}   7 TextOut()
  GTime             mStartTime;   // X{GR}   7 TimeOut()
  GTime             mLastMsgTime; // X{GRSQ} 7 TimeOut()

  // Add method to update these two values
  // + check in XrdMonSuck::CleanupOldServers()
  // + var saying how many deltas to wait before cleaning it up.
  // Have MaxDelta instead of MinDelta?
  GTime             mLastSrvIdTime;   //! X{GRSQ} 7 TimeOut()
  Int_t             mAvgSrvIdDelta;   //! X{G}    7 ValOut()

  Long64_t          mPacketCount;     //! X{G}    7 ValOut()
  Long64_t          mSeqIdFailCount;  //! X{G}    7 ValOut()

  ZLink<ZList>      mPrevUsers;   // X{GS} L{}

  typedef map<Int_t, XrdUser*>    mDict2User_t;
  typedef mDict2User_t::iterator  mDict2User_i;
  typedef map<Int_t, XrdFile*>    mDict2File_t;
  typedef mDict2File_t::iterator  mDict2File_i;

  mDict2User_t      mUserMap;      //!
  mDict2File_t      mFileMap;      //!
  GMutex            mUserMapMutex; //!
  GMutex            mFileMapMutex; //!

  UChar_t           mSrvSeq;       //!
  Bool_t            bSrvSeqInited; //!

public:
  XrdServer(const TString& n="XrdServer", const TString& t="");
  XrdServer(const TString& n, const TString& t, const TString& h, const TString& d, const GTime& st);
  virtual ~XrdServer();

  virtual void AdEnlightenment();

  TString  GetFqhn() const;

  void     UpdateSrvIdTime(const GTime& t);

  void     IncPacketCount();
  void     IncSeqIdFailCount();

  Bool_t   ExistsUserDictId(Int_t dict_id);
  void     AddUser(XrdUser* user, Int_t dict_id); // X{E} C{1}
  void     DisconnectUser(XrdUser* user);         // X{E} C{1}
  void     RemovePrevUser(XrdUser* user);         // X{E} C{1}
  XrdUser* FindUser(const TString& name);
  XrdUser* FindUser(Int_t dict_id);

  Bool_t   ExistsFileDictId(Int_t dict_id);
  void     AddFile(XrdFile* file, Int_t dict_id); // X{E} C{1}
  void     RemoveFile(XrdFile* file);             // X{E} C{1}
  XrdFile* FindFile(Int_t dict_id);

  // Only called from XrdMonSucker to initialize / check message sequence id.
  void    InitSrvSeq(UChar_t seq) { mSrvSeq = seq; bSrvSeqInited = true; }
  UChar_t IncAndGetSrvSeq()       { return bSrvSeqInited ? ++mSrvSeq : 0; }
  Bool_t  IsSrvSeqInited() const  { return bSrvSeqInited; }
  void    ResetSrvSeq()           { mSrvSeq = 0; bSrvSeqInited = false; }

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

#endif
 XrdServer.h:1
 XrdServer.h:2
 XrdServer.h:3
 XrdServer.h:4
 XrdServer.h:5
 XrdServer.h:6
 XrdServer.h:7
 XrdServer.h:8
 XrdServer.h:9
 XrdServer.h:10
 XrdServer.h:11
 XrdServer.h:12
 XrdServer.h:13
 XrdServer.h:14
 XrdServer.h:15
 XrdServer.h:16
 XrdServer.h:17
 XrdServer.h:18
 XrdServer.h:19
 XrdServer.h:20
 XrdServer.h:21
 XrdServer.h:22
 XrdServer.h:23
 XrdServer.h:24
 XrdServer.h:25
 XrdServer.h:26
 XrdServer.h:27
 XrdServer.h:28
 XrdServer.h:29
 XrdServer.h:30
 XrdServer.h:31
 XrdServer.h:32
 XrdServer.h:33
 XrdServer.h:34
 XrdServer.h:35
 XrdServer.h:36
 XrdServer.h:37
 XrdServer.h:38
 XrdServer.h:39
 XrdServer.h:40
 XrdServer.h:41
 XrdServer.h:42
 XrdServer.h:43
 XrdServer.h:44
 XrdServer.h:45
 XrdServer.h:46
 XrdServer.h:47
 XrdServer.h:48
 XrdServer.h:49
 XrdServer.h:50
 XrdServer.h:51
 XrdServer.h:52
 XrdServer.h:53
 XrdServer.h:54
 XrdServer.h:55
 XrdServer.h:56
 XrdServer.h:57
 XrdServer.h:58
 XrdServer.h:59
 XrdServer.h:60
 XrdServer.h:61
 XrdServer.h:62
 XrdServer.h:63
 XrdServer.h:64
 XrdServer.h:65
 XrdServer.h:66
 XrdServer.h:67
 XrdServer.h:68
 XrdServer.h:69
 XrdServer.h:70
 XrdServer.h:71
 XrdServer.h:72
 XrdServer.h:73
 XrdServer.h:74
 XrdServer.h:75
 XrdServer.h:76
 XrdServer.h:77
 XrdServer.h:78
 XrdServer.h:79
 XrdServer.h:80
 XrdServer.h:81
 XrdServer.h:82
 XrdServer.h:83
 XrdServer.h:84
 XrdServer.h:85
 XrdServer.h:86
 XrdServer.h:87
 XrdServer.h:88
 XrdServer.h:89
 XrdServer.h:90
 XrdServer.h:91
 XrdServer.h:92
 XrdServer.h:93
 XrdServer.h:94
 XrdServer.h:95
 XrdServer.h:96