blob: 3602950894a6d305f133caebe36eeeca5aaf5cff [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _IGNITE_IMPL_THIN_IGNITE_CLIENT_IMPL
#define _IGNITE_IMPL_THIN_IGNITE_CLIENT_IMPL
#include <ignite/thin/ignite_client.h>
#include <ignite/thin/ignite_client_configuration.h>
#include "impl/data_router.h"
#include "impl/cache/cache_client_impl.h"
#include "impl/transactions/transactions_impl.h"
#include "impl/compute/compute_client_impl.h"
namespace ignite
{
namespace impl
{
namespace thin
{
/**
* Ignite client class implementation.
*
* This is an entry point for Thin C++ Ignite client. Its main
* purpose is to establish connection to the remote server node.
*/
class IgniteClientImpl
{
public:
/**
* Constructor.
*
* @param cfg Configuration.
*/
IgniteClientImpl(const ignite::thin::IgniteClientConfiguration& cfg);
/**
* Destructor.
*/
~IgniteClientImpl();
/**
* Start client.
*
* @throw IgnitError on inability to connect.
*/
void Start();
/**
* Get cache.
*
* @param name Cache name.
* @return Cache.
*/
common::concurrent::SharedPointer<cache::CacheClientImpl> GetCache(const char* name) const;
/**
* Get or create cache.
*
* @param name Cache name.
* @return Cache.
*/
common::concurrent::SharedPointer<cache::CacheClientImpl> GetOrCreateCache(const char* name);
/**
* Create cache.
*
* @param name Cache name.
* @return Cache.
*/
common::concurrent::SharedPointer<cache::CacheClientImpl> CreateCache(const char* name);
/**
* Get transactions.
*
* @return Transactions impl.
*/
transactions::SP_TransactionsImpl ClientTransactions() const
{
return txImpl;
}
/**
* Get client compute API.
*/
compute::SP_ComputeClientImpl GetCompute()
{
return computeImpl;
}
/**
* Destroy cache by name.
*
* @param name Cache name.
*/
void DestroyCache(const char* name);
/**
* Get names of currently available caches or an empty collection
* if no caches are available.
*
* @param cacheNames Cache names. Output parameter.
*/
void GetCacheNames(std::vector<std::string>& cacheNames);
private:
/**
* Make cache implementation.
*
* @param router Data router instance.
* @param name Cache name.
* @param id Cache ID.
* @return Cache implementation.
*/
static common::concurrent::SharedPointer<cache::CacheClientImpl> MakeCacheImpl(
const SP_DataRouter& router,
const transactions::SP_TransactionsImpl& tx,
const std::string& name,
int32_t id);
/**
* Check cache name.
*
* @param name Cache name.
* @throw IgniteError if the name is not valid.
*/
static void CheckCacheName(const char* name);
/** Configuration. */
const ignite::thin::IgniteClientConfiguration cfg;
/** Data router. */
SP_DataRouter router;
/** Transactions. */
transactions::SP_TransactionsImpl txImpl;
/** Compute. */
compute::SP_ComputeClientImpl computeImpl;
};
}
}
}
#endif // _IGNITE_IMPL_THIN_IGNITE_CLIENT_IMPL