1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
// Copyright (C) 1995 The New York Group Theory Cooperative
// See magnus/doc/COPYRIGHT for the full notice.
//
// Contents: Declaration of class SessionManager
//
// Principal Author: Roger Needham
//
// Status: in progress
//
// Revision History:
//
#ifndef _SESSIONMANAGER_H_
#define _SESSIONMANAGER_H_
#include <iostream.h>
#include "ObjectSmith.h"
#include "OutMessages.h"
//---------------------------------------------------------------------------//
//------------------------- SessionManager ----------------------------------//
//---------------------------------------------------------------------------//
class SessionManager
{
public:
/////////////////////////////////////////////////////////////////////////
// //
// Constructors: //
// //
/////////////////////////////////////////////////////////////////////////
// No constructors for this static class.
/////////////////////////////////////////////////////////////////////////
// //
// Outgoing Messages: //
// //
/////////////////////////////////////////////////////////////////////////
static OID getObjectSmithOid( ) { return objectSmithOid; }
private:
/////////////////////////////////////////////////////////////////////////
// //
// Restricted Access: //
// //
/////////////////////////////////////////////////////////////////////////
friend int main(int argc, char* argv[]);
static void start( );
static void initializeFrontEnd( );
static bool areMessages( );
static void readMessages( );
static void readMessage(istream& istr);
static void takeControl( );
/////////////////////////////////////////////////////////////////////////
// //
// Data Members: //
// //
/////////////////////////////////////////////////////////////////////////
// SessionManager dispatches incoming messages.
// Generic message handling could be implemented with a class
// MessageHandler, which would provide `mailbox ids' and automatic
// registration for its derivates in the same way class SMObject
// provides object ids.
// But the recipient of a message can now only be a SMObject, or one
// of the special cases: SessionManager, ObjectSmith.
// So for now we assign `pseudo' object ids to the latter, and use
// ordinary object ids for the `mailbox ids'.
// Class SMObject provides a message reading interface.
static const int sessionManagerOid = -1;
static const int objectSmithOid = -2;
static const int databaseManagerOid = -3;
static const int randomDefnGeneratorOid = -4;
// Some messages are handled by SessionManager directly. These are
// the message tags:
enum MessageTag { QUIT, DELETE, SET_NAME };
static const long magicCookie;
// Will be used for low-rent message authentication.
static bool quitRequested;
};
#endif
|