ROOT logo
// $Id: ZSunQueen.h 2088 2008-11-23 20:26:46Z 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 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;       // X{gS} L{}

  ZLink<ZIdentity>		mSaturnGuestId; // X{gS} L{}
  ZLink<ZIdentity>		mEyeGuestId;    // X{gS} L{}

  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); // X{E} C{1} T{SunQueen::ID_Management}
  void DetachIdentity(ZIdentity* id); // X{E} C{1} T{SunQueen::ID_Management}

  virtual void IncarnateMoon(SaturnInfo* parent); // X{E} C{1}
  virtual void IncarnateEye(SaturnInfo* parent);  // X{E} C{1}
  virtual void CremateMoon(SaturnInfo* moon);     // X{E} C{1} T{SunQueen::SaturnConnections}
  virtual void CremateEye(EyeInfo* eye);	  // X{E} C{1} T{SunQueen::EyeConnections}


  /****************************************/
  // Handling of new connections
  /****************************************/
public:
  enum ConnReqResult_e { CRR_OK=0, CRR_ReqAuth, CRR_Denied };

private:
#ifndef __CINT__

  struct NCMData { // New Connection Master
    ZMirEmittingEntity*	fNewMEE;
    SaturnInfo*		fRequestor;

    NCMData(ZMirEmittingEntity* nmee, SaturnInfo* req) :
      fNewMEE(nmee), fRequestor(req) {}
  };

  struct NCSData { // New Connection Slave
    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;	//! Only needed on SunAbsolute
  ZMES_map<NCSData>	mNCSlaveData;	//! Needed on all Saturns

protected:

  void handle_mee_connection(ZMirEmittingEntity* mee, TSocket *socket);

  void initiate_saturn_connection(); // X{E} T{SunQueen::SaturnConnections}
  void initiate_eye_connection();    // X{E} T{SunQueen::EyeConnections}
  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); // X{E}
  void deny_mee_connection(UInt_t conn_id);                // X{E}

  ID_t incarnate_mee(UInt_t conn_id);

  // Identities

  void attach_primary_identity(ZMirEmittingEntity* mee);
  void detach_all_identities(ZMirEmittingEntity* mee);

#endif

public:
  // Authentication protocol
  static void HandleClientSideAuthentication(TSocket* socket, UInt_t conn_id,
					     TString& identity);

#include "ZSunQueen.h7"
  ClassDef(ZSunQueen, 1); // The first queen of the Sun Absolute; handles authentication, identities and MEEs
}; // endclass ZSunQueen


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