#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;
TString mDomain;
GTime mStartTime;
GTime mLastMsgTime;
GTime mLastSrvIdTime;
Int_t mAvgSrvIdDelta;
Long64_t mPacketCount;
Long64_t mSeqIdFailCount;
ZLink<ZList> mPrevUsers;
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);
void DisconnectUser(XrdUser* user);
void RemovePrevUser(XrdUser* user);
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);
void RemoveFile(XrdFile* file);
XrdFile* FindFile(Int_t dict_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);
};
#endif