blob: ff3e2cc5c05b4de7e7beeb0cd38d86dbf9d14644 [file] [log] [blame]
/*
* 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.
*/
#pragma once
#ifndef GEODE_DISTRIBUTEDSYSTEMIMPL_H_
#define GEODE_DISTRIBUTEDSYSTEMIMPL_H_
#include <map>
#include <memory>
#include <mutex>
#include <string>
#include <geode/internal/geode_globals.hpp>
#include "DiffieHellman.hpp"
#include "DistributedSystem.hpp"
#include "statistics/StatisticsManager.hpp"
namespace apache {
namespace geode {
namespace client {
class SystemProperties;
class DistributedSystemImpl;
using CliCallbackMethod = std::function<void(Cache&)>;
/**
* @class DistributedSystemImpl DistributedSystemImpl.hpp
* A "connection" to a Geode distributed system.
* The connection will be through a (host, port) pair.
*/
class APACHE_GEODE_EXPORT DistributedSystemImpl {
public:
static void setThreadName(const std::string& threadName);
/**
* @brief destructor
*/
virtual ~DistributedSystemImpl();
/** Retrieve the MemberId used to create this Cache. */
virtual void disconnect();
virtual void connect();
void logSystemInformation() const;
virtual const std::string& getName() const;
SystemProperties& getSystemProperties() const;
std::string m_name;
DistributedSystem* m_implementee;
DiffieHellman m_dh;
/**
* @brief constructors
*/
DistributedSystemImpl(std::string name, DistributedSystem* implementee,
std::unique_ptr<SystemProperties> sysProps);
// acquire/release locks
static void registerCliCallback(int appdomainId,
CliCallbackMethod clicallback);
static void unregisterCliCallback(int appdomainId);
static void CallCliCallBack(Cache& cache);
private:
static std::recursive_mutex m_cliCallbackLock;
static volatile bool m_isCliCallbackSet;
static std::map<int, CliCallbackMethod> m_cliCallbackMap;
std::unique_ptr<SystemProperties> m_sysProps;
bool m_connected;
};
} // namespace client
} // namespace geode
} // namespace apache
#endif // GEODE_DISTRIBUTEDSYSTEMIMPL_H_