ComSDK
|
Класс узла Подробнее...
#include <node.h>
Классы | |
struct | BufferedMessage |
struct | RemoteNodeData |
Открытые типы | |
enum | CommunicationError { ceSuccess = 0, ceNodeNotFound, ceCannotConnectToMasterNode, ceNetworkError, ceUnknownError } |
Ошибки взаимодействия Подробнее... | |
enum | NodeStatus { nsMaster, nsSlave, nsNotSet } |
Статус узла Подробнее... | |
typedef std::function< void(std::shared_ptr < Message > , CommunicationError) > | OnReplyClb |
Тип коллбэка для входящих сообщений | |
Открытые члены | |
Node (const std::string &p_appId, boost::asio::io_service &p_service) | |
CommunicationError | deploy () |
void | setDefaultCallback (OnReplyClb p_callback) |
void | send (const Message &p_message, OnReplyClb p_callback=0) |
const NodeAddress & | getAddr () const |
NodeStatus | getStatus () const |
Статические открытые данные | |
static const unsigned short | m_port = 8221 |
Текущее значение порта по умолчанию | |
Защищенные члены | |
void | setStatus (NodeStatus p_status) |
void | onNewMessageToSend (const Message &p_message, OnReplyClb p_callback) |
void | onAccepted (std::shared_ptr< NodeConnection > p_conn, const boost::system::error_code &p_error) |
void | onConnectionClosed (std::shared_ptr< NodeConnection > p_conn) |
void | onMessageReceived (std::shared_ptr< NodeConnection > p_nodeConn, std::vector< char > &p_message) |
void | handshake (std::shared_ptr< NodeConnection > p_nodeConn, NodeHandshake p_handshake) |
void | proxyMessage (std::shared_ptr< NodeConnection > p_nodeConn, std::vector< char > &p_message) |
void | onAnyMapReceived (std::shared_ptr< NodeConnection > p_nodeConn, std::string p_appSid, std::shared_ptr< Anymap > p_anymap) |
void | sendBytearrayToNode (const std::vector< char > &p_bytearray, const NodeAddress &p_nodeAddr, OnReplyClb p_callback=0) |
void | runService () |
Защищенные данные | |
NodeAddress | m_selfAddr |
std::string | m_masterAppSid |
OnReplyClb | m_defaultCallback |
NodeStatus | m_status |
unsigned int | m_threadsCount |
std::shared_ptr < boost::asio::ip::tcp::acceptor > | m_acceptor |
std::unordered_map < NodeAddress, RemoteNodeData > | m_establishedNodes |
std::set< std::shared_ptr < NodeConnection > > | m_anonymousNodes |
std::vector< BufferedMessage > | m_msgBuffer |
boost::asio::io_service & | m_service |
NodeProtocol * | m_protocol |
boost::mutex | m_mutex |
Класс узла
Через этот класс происходит все взаимодействие приложения с другими приложениями. Экземпляр этого класса должен быть явно создан в приложении, если предполагается подобное взаимодействие (через глобальный com::sys::glb_ioservice, если используется kernel). После создания экземпляра необходимо вызвать метод deploy(), который создаст нужные для работы соединения. Принципиально все узлы можно разделить на master и slave. Master-узлы сами "слушают" порт, в то время как slave-узлы не имеют доступа к прослушиванию порта. Slave-узлы возникают в том случае, когда на машине уже запущен один узел, который изначально "захватил" порт. Этот узел автоматически становится master-узлом, в то время как все узлы, запущенные позже, автоматически становятся slave-узлами. Slave-узлы все еще могут "слушать" порт за счет того, что master-узел имеет проксировать сообщения, которые предназначаются не ему (это происходит за счет определения AppSID).
com::interproc::Node::Node | ( | const std::string & | p_appId, |
boost::asio::io_service & | p_service | ||
) |
Констуктор узла из AppSID и io_service
com::interproc::Node::CommunicationError com::interproc::Node::deploy | ( | ) |
Создает все соединения, необходимые для функционирования узла
const NodeAddress & com::interproc::Node::getAddr | ( | ) | const |
Возвращает адрес себя
com::interproc::Node::NodeStatus com::interproc::Node::getStatus | ( | ) | const |
Возвращает свой статус
void com::interproc::Node::send | ( | const Message & | p_message, |
OnReplyClb | p_callback = 0 |
||
) |
Отправляет сообщение p_message и возвращает ответ в p_callback. Если коллбэк не задан, используется коллбэк по умолчанию.
void com::interproc::Node::setDefaultCallback | ( | OnReplyClb | p_callback | ) |
Задает коллбэк по умолчанию для входящих сообщений. Если для конкретного сообщения не задан коллбэк, вызывается коллбэк по умолчанию