blob: 0140153749a5dde7043c5c9d922d4721b5c62672 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
/**
* @file FwkBBClient.cpp
* @since 1.0
* @version 1.0
* @see
*/
// ----------------------------------------------------------------------------
#include "FwkBBClient.hpp"
#include "FwkLog.hpp"
#include "FwkStrCvt.hpp"
#include "ace/Synch.h"
#include "ace/OS.h"
using namespace gemfire;
using namespace gemfire::testframework;
// ----------------------------------------------------------------------------
void FwkBBClient::sendToServer( FwkBBMessage & message )
{
message.setId( FwkStrCvt( getNewMessageId() ).toString() );
std::string msg = message.toMessageStream();
if ( msg.empty() ) {
FWKEXCEPTION( "Empty message in FwkBBClient::sendToServer" );
}
int32_t tries = 5;
bool done = false;
ACE_Time_Value timeout( CLIENT_WAIT_TIME_FOR_REPLY );
int32_t sCnt = 0;
int32_t rCnt = 0;
int32_t nrCnt = 0;
int32_t eCnt = 0;
while ( !done && ( tries-- > 0 ) ) {
try {
UDPMessage udpMsg( msg );
udpMsg.setSender( m_client.getServer() );
if ( !udpMsg.send( m_client.getConn() ) ) {
sCnt++;
FWKEXCEPTION( "Send failed in FwkBBClient::sendToServer" );
}
if ( !udpMsg.receiveFrom( m_client.getConn(), &timeout ) ) {
rCnt++;
FWKEXCEPTION( "Receive failed in FwkBBClient::sendToServer" );
}
if ( udpMsg.length() == 0 ) {
nrCnt++;
FWKEXCEPTION( "No Reply from server in FwkBBClient::sendToServer" );
}
message.fromMessageStream( udpMsg.getMessage() );
m_result.clear();
m_result = message.getResult();
done = true;
} catch( FwkException & /* ex */ ) {
eCnt++;
//FWKSEVERE( "Caught exception in FwkBBClient::sendToServer: " << ex.getMessage() << ", tried to send: " << msg.substr( 0, 50 ) );
}
}
if ( !done ) {
FWKSEVERE( "FwkBBClient::sendToServer: FAILED, ( " << eCnt <<
", " << sCnt << ", " << rCnt << ", " << nrCnt <<
" ) tried to send: " << msg.substr( 0, 50 ) );
}
}
// ----------------------------------------------------------------------------
std::string FwkBBClient::dump() {
FwkBBMessage message( BB_DUMP_COMMAND );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return m_result;
}
// ----------------------------------------------------------------------------
std::string FwkBBClient::dump( const std::string & BBName ) {
FwkBBMessage message( BB_DUMP_COMMAND );
message.addParameter( BBName );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return m_result;
}
// ----------------------------------------------------------------------------
void FwkBBClient::clear( const std::string & BBName ) {
FwkBBMessage message( BB_CLEAR_COMMAND );
message.addParameter( BBName );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
}
// ----------------------------------------------------------------------------
std::string FwkBBClient::getString( const std::string & BBName, const std::string & Key ) {
FwkBBMessage message( BB_GET_COMMAND );
message.addParameter( "key" );
message.addParameter( BBName );
message.addParameter( Key );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return m_result;
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::get( const std::string & BBName, const std::string & Key ) {
FwkBBMessage message( BB_GET_COMMAND );
message.addParameter( "counter" );
message.addParameter( BBName );
message.addParameter( Key );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------
void FwkBBClient::set( const std::string & BBName, const std::string & Key, const std::string & Value ) {
FwkBBMessage message( BB_SET_COMMAND );
message.addParameter( "key" );
message.addParameter( BBName );
message.addParameter( Key );
message.addParameter( Value );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
}
// ----------------------------------------------------------------------------
void FwkBBClient::set( const std::string & BBName, const std::string & Key, const int64_t Value ) {
FwkBBMessage message( BB_SET_COMMAND );
message.addParameter( "counter" );
message.addParameter( BBName );
message.addParameter( Key );
message.addParameter( FwkStrCvt( Value ).toString() );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::add( const std::string & BBName, const std::string & Key, const int64_t Value ) {
FwkBBMessage message( BB_ADD_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
message.addParameter( FwkStrCvt( Value ).toString() );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::subtract( const std::string & BBName, const std::string & Key, const int64_t Value ) {
FwkBBMessage message( BB_SUBTRACT_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
message.addParameter( FwkStrCvt( Value ).toString() );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::increment( const std::string & BBName, const std::string & Key ) {
FwkBBMessage message( BB_INCREMENT_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::decrement( const std::string & BBName, const std::string & Key ) {
FwkBBMessage message( BB_DECREMENT_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------
void FwkBBClient::zero( const std::string & BBName, const std::string & Key ) {
FwkBBMessage message( BB_ZERO_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::setIfGreater( const std::string & BBName, const std::string & Key, const int64_t Value ) {
FwkBBMessage message( BB_SET_IF_GREATER_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
message.addParameter( FwkStrCvt( Value ).toString() );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------
int64_t FwkBBClient::setIfLess( const std::string & BBName, const std::string & Key, const int64_t Value ) {
FwkBBMessage message( BB_SET_IF_LESS_COMMAND );
message.addParameter( BBName );
message.addParameter( Key );
message.addParameter( FwkStrCvt( Value ).toString() );
try {
sendToServer( message );
} catch ( FwkException& ex ) { ex.getMessage(); }
return FwkStrCvt::toInt64( m_result.c_str() );
}
// ----------------------------------------------------------------------------