diff options
Diffstat (limited to 'cpp/demo/Freeze/casino/Server.cpp')
-rw-r--r-- | cpp/demo/Freeze/casino/Server.cpp | 95 |
1 files changed, 51 insertions, 44 deletions
diff --git a/cpp/demo/Freeze/casino/Server.cpp b/cpp/demo/Freeze/casino/Server.cpp index 5f78ebc6b5f..46138f8baf8 100644 --- a/cpp/demo/Freeze/casino/Server.cpp +++ b/cpp/demo/Freeze/casino/Server.cpp @@ -36,40 +36,39 @@ private: // public: #endif + CasinoStore::PersistentBankPrx _bankPrx; Freeze::TransactionalEvictorPtr _bankEvictor; Freeze::TransactionalEvictorPtr _playerEvictor; Freeze::TransactionalEvictorPtr _betEvictor; - BetResolver _betResolver; + BetResolver _betResolver; int _bankEdge; }; -int +int main(int argc, char* argv[]) { CasinoServer app("db"); return app.main(argc, argv, "config.server"); } - template<class T> class ObjectFactory : public Ice::ObjectFactory { public: - + virtual Ice::ObjectPtr create(const string& type) { return new T; } - + virtual void destroy() { } }; - int CasinoServer::run(int argc, char* argv[]) { @@ -92,7 +91,7 @@ CasinoServer::run(int argc, char* argv[]) _bankEdge = 1; } cout << "Bank edge is " << _bankEdge << endl; - + // // Create an object adapter // @@ -104,15 +103,15 @@ CasinoServer::run(int argc, char* argv[]) communicator()->addObjectFactory(new ObjectFactory<BankI>, CasinoStore::PersistentBank::ice_staticId()); communicator()->addObjectFactory(new ObjectFactory<PlayerI>, CasinoStore::PersistentPlayer::ice_staticId()); communicator()->addObjectFactory(new ObjectFactory<BetI>, CasinoStore::PersistentBet::ice_staticId()); - + // // Create evictors; each type gets its own type-specific evictor // - + // // Bank evictor // - + class BankInitializer : public Freeze::ServantInitializer { public: @@ -122,21 +121,24 @@ CasinoServer::run(int argc, char* argv[]) { } - virtual void - initialize(const Ice::ObjectAdapterPtr& adapter, const Ice::Identity& identity, const string& facet, const Ice::ObjectPtr& servant) + virtual void + initialize(const Ice::ObjectAdapterPtr& adapter, const Ice::Identity& identity, const string& facet, + const Ice::ObjectPtr& servant) { BankI* bank = dynamic_cast<BankI*>(servant.get()); - bank->init(_server._bankPrx, _server._bankEvictor, _server._playerEvictor, _server._betEvictor, _server._betResolver, _server._bankEdge); + bank->init(_server._bankPrx, _server._bankEvictor, _server._playerEvictor, _server._betEvictor, + _server._betResolver, _server._bankEdge); } + private: CasinoServer& _server; }; _bankEvictor = - Freeze::createTransactionalEvictor(adapter, _envName, "bank", + Freeze::createTransactionalEvictor(adapter, _envName, "bank", createTypeMap(CasinoStore::PersistentBank::ice_staticId()), new BankInitializer(*this)); - + int size = properties->getPropertyAsInt("Bank.EvictorSize"); if(size > 0) { @@ -145,7 +147,6 @@ CasinoServer::run(int argc, char* argv[]) adapter->addServantLocator(_bankEvictor, "bank"); - // // Player evictor // @@ -158,33 +159,34 @@ CasinoServer::run(int argc, char* argv[]) _server(server) { } - - virtual void - initialize(const Ice::ObjectAdapterPtr& adapter, const Ice::Identity& identity, const string& facet, const Ice::ObjectPtr& servant) + + virtual void + initialize(const Ice::ObjectAdapterPtr& adapter, const Ice::Identity& identity, const string& facet, + const Ice::ObjectPtr& servant) { - CasinoStore::PersistentPlayerPrx prx = + CasinoStore::PersistentPlayerPrx prx = CasinoStore::PersistentPlayerPrx::uncheckedCast(adapter->createProxy(identity)); - + PlayerI* player = dynamic_cast<PlayerI*>(servant.get()); player->init(prx, _server._playerEvictor, _server._bankPrx); } + private: CasinoServer& _server; }; - + _playerEvictor = - Freeze::createTransactionalEvictor(adapter, _envName, "player", + Freeze::createTransactionalEvictor(adapter, _envName, "player", createTypeMap(CasinoStore::PersistentPlayer::ice_staticId()), new PlayerInitializer(*this)); - + size = properties->getPropertyAsInt("Player.EvictorSize"); if(size > 0) { _playerEvictor->setSize(size); } - - adapter->addServantLocator(_playerEvictor, "player"); + adapter->addServantLocator(_playerEvictor, "player"); // // Bet evictor @@ -198,19 +200,21 @@ CasinoServer::run(int argc, char* argv[]) _server(server) { } - - virtual void - initialize(const Ice::ObjectAdapterPtr& adapter, const Ice::Identity& identity, const string& facet, const Ice::ObjectPtr& servant) - { + + virtual void + initialize(const Ice::ObjectAdapterPtr& adapter, const Ice::Identity& identity, const string& facet, + const Ice::ObjectPtr& servant) + { BetI* bet = dynamic_cast<BetI*>(servant.get()); bet->init(_server._betEvictor, _server._bankEdge); } + private: CasinoServer& _server; }; _betEvictor = - Freeze::createTransactionalEvictor(adapter, _envName, "bet", + Freeze::createTransactionalEvictor(adapter, _envName, "bet", createTypeMap(CasinoStore::PersistentBet::ice_staticId()), new BetInitializer(*this)); size = properties->getPropertyAsInt("Bet.EvictorSize"); @@ -220,7 +224,6 @@ CasinoServer::run(int argc, char* argv[]) } adapter->addServantLocator(_betEvictor, "bet"); - // // Prepare startup @@ -233,27 +236,31 @@ CasinoServer::run(int argc, char* argv[]) // // Retrieve / create the bank // - + Ice::Identity bankId = communicator()->stringToIdentity("bank/Montecito"); _bankPrx = CasinoStore::PersistentBankPrx::uncheckedCast(adapter->createProxy(bankId)); - + if(!_bankEvictor->hasObject(bankId)) { - _bankEvictor->add(new BankI(_bankPrx, _bankEvictor, _playerEvictor, _betEvictor, _betResolver, _bankEdge), bankId); + _bankEvictor->add(new BankI(_bankPrx, _bankEvictor, _playerEvictor, _betEvictor, _betResolver, _bankEdge), + bankId); } - + // // reload existing bets into the bet resolver // - + _bankPrx->reloadBets(); - + // // Create players / recreate missing players // - const string players[] = { "al", "bob", "charlie", "dave", "ed", "fred", "gene", "herb", "irvin", "joe", "ken", "lance" }; - + const string players[] = + { + "al", "bob", "charlie", "dave", "ed", "fred", "gene", "herb", "irvin", "joe", "ken", "lance" + }; + for(size_t i = 0; i < 12; ++i) { #if defined(_MSC_VER) && (_MSC_VER < 1300) @@ -267,16 +274,16 @@ CasinoServer::run(int argc, char* argv[]) { _playerEvictor->add(new PlayerI, ident); } - } - + } + // // Everything is ready, activate // adapter->activate(); - + shutdownOnInterrupt(); communicator()->waitForShutdown(); - + _betResolver.destroy(); } catch(...) |