#ifndef GledCore_ZSunQueen_H
#define GledCore_ZSunQueen_H
#include <Glasses/ZQueen.h>
#include <Glasses/SaturnInfo.h>
#include <Stones/ZMirExchangeSession.h>
class ZSunQueen : public ZQueen
{
MAC_RNR_FRIENDS(ZSunQueen);
friend class Gled;
friend class Saturn;
friend class ZKing;
private:
void _init();
protected:
ZLink<SaturnInfo> mSunInfo;
ZLink<ZIdentity> mSaturnGuestId;
ZLink<ZIdentity> mEyeGuestId;
virtual ID_t incarnate_moon(SaturnInfo* parent, SaturnInfo* moon);
virtual ID_t incarnate_eye(SaturnInfo* parent, EyeInfo* eye);
virtual void bootstrap();
public:
ZSunQueen(const Text_t* n="ZSunQueen", const Text_t* t=0) : ZQueen(n,t)
{ _init(); }
ZSunQueen(ID_t span, const Text_t* n="ZSunQueen", const Text_t* t=0) :
ZQueen(span,n,t) { _init(); }
virtual ~ZSunQueen();
virtual void AdEnlightenment();
ZIdentity* GetOrImportIdentity(const char* ident);
void AttachIdentity(ZIdentity* id);
void DetachIdentity(ZIdentity* id);
virtual void IncarnateMoon(SaturnInfo* parent);
virtual void IncarnateEye(SaturnInfo* parent);
virtual void CremateMoon(SaturnInfo* moon);
virtual void CremateEye(EyeInfo* eye);
public:
enum ConnReqResult_e { CRR_OK=0, CRR_ReqAuth, CRR_Denied };
private:
#ifndef __CINT__
struct NCMData {
ZMirEmittingEntity* fNewMEE;
SaturnInfo* fRequestor;
NCMData(ZMirEmittingEntity* nmee, SaturnInfo* req) :
fNewMEE(nmee), fRequestor(req) {}
};
struct NCSData {
GCondition* fCond;
ConnReqResult_e fState;
ID_t fMeeID;
NCSData(GCondition* c, ConnReqResult_e s=CRR_ReqAuth) :
fCond(c), fState(s), fMeeID(0) {}
};
ZMES_map<NCMData> mNCMasterData;
ZMES_map<NCSData> mNCSlaveData;
protected:
void handle_mee_connection(ZMirEmittingEntity* mee, TSocket *socket);
void initiate_saturn_connection();
void initiate_eye_connection();
void initiate_mee_connection();
void handle_mee_authentication(UInt_t conn_id, TSocket* socket);
void accept_mee_connection(UInt_t conn_id, ID_t mee_id);
void deny_mee_connection(UInt_t conn_id);
ID_t incarnate_mee(UInt_t conn_id);
void attach_primary_identity(ZMirEmittingEntity* mee);
void detach_all_identities(ZMirEmittingEntity* mee);
#endif
public:
static void HandleClientSideAuthentication(TSocket* socket, UInt_t conn_id,
TString& identity);
#include "ZSunQueen.h7"
ClassDef(ZSunQueen, 1);
};
#endif