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; }
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; }
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; }
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; }
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; }
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; }