예제 #1
0
bool DataSpace::InsertKV( char* key, int keylen, char* val, int vallen, bool ops )
{
	void* pkey = JK_MALLOC( keylen+1 );
	void* pval = JK_MALLOC( vallen+1 );
	JK_MEMCPY_S(pkey,keylen+1,key,keylen+1);
	JK_MEMCPY_S(pval,vallen+1,val,vallen+1);
	if ( m_normalDict.GetElement(pkey) )
	{
		m_normalDict.UpdateElement(pkey, pval );
		if ( ops )
		{
			Operation	( LOG_CMD_STRING_UPD, pkey, pval );
			Replication	( LOG_CMD_STRING_UPD, key, pval );
		}
		return true;
	}

	if (  m_normalDict.AddElement( pkey, pval ) )
	{
		if ( ops )
		{
			Operation	( LOG_CMD_STRING_ADD, pkey, pval );
			Replication	( LOG_CMD_STRING_ADD, key, pval );
		}
		return true;
	}
	JK_FREE( pkey );
	JK_FREE( pval );
	return false;
}
예제 #2
0
bool DataSpace::RemoveKV(void* key, bool ops )
{
	if ( m_normalDict.RemoveElement(key) )
	{
		if ( ops )
		{
			Operation	( LOG_CMD_STRING_DEL, key, "" );
			Replication	( LOG_CMD_STRING_DEL, key, "" );
		}
		return true;
	}
	return false;
}
예제 #3
0
void* DataSpace::ListPopRight( char* key, bool ops /*= true */ )
{
	moly_list_type* pDList = (moly_list_type*)m_normalDict.GetElement( key );
	if ( !pDList )
	{
		return NULL;
	}
	void* ptemp = pDList->RPop();
	if ( ptemp && ops )
	{
		Operation	( LOG_CMD_LIST_RPOP, key, "" );
		Replication	( LOG_CMD_LIST_RPOP, key, "" );
	}
	return ptemp;
}
예제 #4
0
bool DataSpace::UpdateKV( void* key, void* val, int vallen, bool ops /*= true */)
{
	void* pval = JK_MALLOC( vallen+1 );
	if ( !pval )
	{
		DISPMSG_ERROR( "malloc memory failed!\n");
		return false;
	}
	JK_MEMCPY_S(pval,vallen+1,val,vallen+1);
	if( false == m_normalDict.UpdateElement( key, pval ) )
	{
		JK_FREE( pval );
		return false;
	}
	if (ops)
	{
		Operation(LOG_CMD_STRING_UPD, key, pval);
		Replication(LOG_CMD_STRING_UPD, key, pval);
	}
	return true;
}
예제 #5
0
int main(int argc, char* argv[]) {
	typedef CReplication<HelloWorld, CClientSocket> CMyReplication;

#ifdef WIN32_64
	CClientSocket::QueueConfigure::SetWorkDirectory("c:\\sp_test");
#else
	CClientSocket::QueueConfigure::SetWorkDirectory("/home/yye/sp_test/");
#endif

	CClientSocket::QueueConfigure::SetMessageQueuePassword("MyQueuePassword");
	ReplicationSetting rs;

	CMyReplication Replication(rs);

	CConnectionContext cc;
	cc.Host = "localhost";
	cc.Port = 20901;
	cc.UserId = L"MyUserId";
	cc.Password = L"MyPassword";

	CMapQNameConn mapQNameConn;
	mapQNameConn["tolocal"] = cc;
	cc.Host = "192.168.1.110";
	mapQNameConn["tolinux"] = cc;

	bool ok = Replication.Start(mapQNameConn, "cplusplus_rt_root");

	ok = Replication.Send(idSayHelloHelloWorld, L"Jack", L"Smith");
	CMyStruct ms;
	SetMyStruct(ms);
	ok = Replication.Send(idEchoHelloWorld, ms);

	std::cout << "Press a key to shutdown the demo application ......" << std::endl;
	::getchar();
	return 0;
}
예제 #6
0
bool DataSpace::ListPushRight( char* key, int keylen, char* val, int vallen, bool ops /*= true */ )
{
	void* pkey = JK_MALLOC( keylen+1 );
	if ( !pkey )
	{
		DISPMSG_ERROR( "malloc memory failed!\n");
		return false;
	}
	void* pval = JK_MALLOC( vallen+1 );
	if ( !pval )
	{
		DISPMSG_ERROR( "malloc memory failed!\n");
		JK_FREE( pkey );
		return false;
	}
	JK_MEMCPY_S(pkey,keylen+1,key,keylen+1);
	JK_MEMCPY_S(pval,vallen+1,val,vallen+1);
	moly_list_type* pDList = (moly_list_type*)m_normalDict.GetElement( pkey );
	if ( pDList )
	{
		if ( NULL == pDList->RPush( (char*)pval ) )
		{
			JK_FREE( pkey );
			JK_FREE( pval );
			return false;
		}
		if ( ops )
		{
			Operation	( LOG_CMD_LIST_RPUSH, pkey, pval );
			Replication	( LOG_CMD_LIST_RPUSH, key, pval );
		}
		return true;
	}
	pDList = JK_NEW(moly_list_type);
	if ( !pDList )
	{
		DISPMSG_ERROR( "malloc memory failed!\n");
		JK_FREE( pkey );
		JK_FREE( pval );
		return false;
	}
	if( NULL == pDList->RPush( (char*)pval ) )
	{
		JK_FREE( pkey );
		JK_FREE( pval );
		JK_DELETE( moly_list_type, pDList );
		return false;
	}
	if ( !m_normalDict.AddElement(pkey, pDList ) )
	{
		JK_FREE( pkey );
		JK_FREE( pval );
		JK_DELETE( moly_list_type, pDList );
		return false;
	}
	if ( ops )
	{
		Operation	( LOG_CMD_LIST_RPUSH, pkey, pval );
		Replication	( LOG_CMD_LIST_RPUSH, key, pval );
	}
	return true;
}