Пример #1
0
bool
BankI::checkAllChips(const Ice::Current& current) const
{
    int playerTotal = 0;

    Casino::PlayerPrxSeq players = getPlayers(current);
    size_t i;
    for(i = 0; i < players.size(); ++i)
    {
        playerTotal += players[i]->getChips();
    }

    cout << "The players hold a total of " << playerTotal << " chips" << endl;

    int betTotal = 0;

    vector<CasinoStore::PersistentBetPrx> bets = getBets(current.adapter);
    for(i = 0; i < bets.size(); ++i)
    {
        betTotal += bets[i]->getChipsInPlay();
    }
    cout << "The bets hold a total of " << betTotal << " chips" << endl;
    cout << "players + bets chips == " << (playerTotal + betTotal) << endl;

    cout <<"The bank has " << outstandingChips << " outstanding chips" << endl;

    return (playerTotal + betTotal) == outstandingChips;
}
Пример #2
0
Casino::PlayerPrxSeq
BankI::getPlayers(const Ice::Current& current) const
{
    Casino::PlayerPrxSeq result;

    Freeze::EvictorIteratorPtr p = _playerEvictor->getIterator("", 10);

    while(p->hasNext())
    {
        Ice::Identity ident = p->next();
        result.push_back(Casino::PlayerPrx::uncheckedCast(current.adapter->createProxy(ident)));
    }

    return result;
}
Пример #3
0
void
CasinoClient::printBalances(Casino::PlayerPrxSeq& players) const
{
    for(size_t i = 0; i < players.size(); ++i)
    {
        Casino::PlayerPrx player = players[i];

        if(player != 0)
        {
            try
            {
                int chips = player->getChips();
                cout << player->ice_getIdentity().name << ": " << chips << " chips" << endl;
            }
            catch(const Ice::ObjectNotExistException&)
            {
                //
                // This player is gone
                //
                players[i] = 0;
            }
        }
    }
}
Пример #4
0
int
CasinoClient::run(int argc, char*[])
{
    if(argc > 1)
    {
        cerr << appName() << ": too many arguments" << endl;
        return EXIT_FAILURE;
    }

    //
    // Initialize pseudo-random number generator
    //
    srand((unsigned int)IceUtil::Time::now().toMicroSeconds());

    cout << "Retrieve bank and players... " << flush;

    Casino::BankPrx bank = Casino::BankPrx::uncheckedCast(communicator()->propertyToProxy("Bank.Proxy"));

    Casino::PlayerPrxSeq players = bank->getPlayers();
    cout << "ok" << endl;

    cout << "Starting balances" << endl;
    printBalances(players);

    cout << "Current bank earnings: " << bank->getEarnings() << " chips" << endl;

    cout << "All chips accounted for? " << (bank->checkAllChips() ? "yes" : "no") << endl;

    cout << "Each player buys 3,000 chips... " << flush;

    for(size_t i = 0; i < players.size(); ++i)
    {
        Casino::PlayerPrx player = players[i];
        if(player != 0)
        {
            if(!bank->buyChips(3000, player))
            {
                cout << "(" << player->ice_getIdentity().name << " is gone) " << flush;
                players[i] = 0;
            }
        }
    }
    cout << "ok" << endl;

    cout << "All chips accounted for? " << (bank->checkAllChips() ? "yes" : "no") << endl;

    cout << "Create " << betCount1 <<  " 10-chips bets... " << flush;

    int b;
    for(b = 0; b < betCount1; ++b)
    {
        Casino::BetPrx bet = bank->createBet(10, 200 + rand() % 4000);
        for(size_t i = 0; i < players.size(); ++i)
        {
            Casino::PlayerPrx player = players[i];
            if(player != 0)
            {
                try
                {
                    bet->accept(player);
                }
                catch(const Ice::ObjectNotExistException&)
                {
                    //
                    // Bet already resolved
                    //
                }
                catch(const Casino::OutOfChipsException&)
                {
                    cout << "(" << player->ice_getIdentity().name << " is out) " << flush;

                    players[i] = 0;
                }
            }
        }
    }
    cout << " ok" << endl;

    cout << "Live bets: " << bank->getLiveBetCount() << endl;

    int index = static_cast<int>(rand() % players.size());
    Casino::PlayerPrx gonner = players[index];
    players[index] = 0;

    if(gonner != 0)
    {
        cout << "Destroying " << gonner->ice_getIdentity().name + "... " << flush;
        try
        {
            gonner->destroy();
        }
        catch(const Ice::ObjectNotExistException&)
        {
            //
            // Ignored
            //
        }
        cout << "ok" << endl;
    }

    cout << "All chips accounted for? " << (bank->checkAllChips() ? "yes" : "no") << endl;

    cout << "Sleep for 2 seconds" << endl;
    IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(2));

    cout << "Live bets: " << bank->getLiveBetCount() << endl;

    cout << "Create " << betCount2 << " 10-chips bets... " << flush;

    for(b = 0; b < betCount2; ++b)
    {
        Casino::BetPrx bet = bank->createBet(10, 200 + rand() % 4000);
        for(size_t i = 0; i < players.size(); ++i)
        {
            Casino::PlayerPrx player = players[i];
            if(player != 0)
            {
                try
                {
                    bet->accept(player);
                }
                catch(const Ice::ObjectNotExistException&)
                {
                    //
                    // Bet already resolved
                    //
                }
                catch(const Casino::OutOfChipsException&)
                {
                    cout << "(" << player->ice_getIdentity().name << " is out) " << flush;

                    players[i] = 0;
                }
            }
        }
    }
    cout << " ok" << endl;

    cout << "Live bets: " << bank->getLiveBetCount() << endl;
    cout << "Sleep for 10 seconds" << endl;
    IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(10));
    cout << "Live bets: " << bank->getLiveBetCount() << endl;

    cout << "Ending balances" << endl;
    printBalances(players);

    cout << "Current bank earnings: " << bank->getEarnings() << " chips" << endl;

    cout << "All chips accounted for? " << (bank->checkAllChips() ? "yes" : "no") << endl;

    return 0;
}