ComSDK
 Указатель Классы Пространства имен Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Группы Страницы
Классы | Открытые типы | Открытые члены | Статические открытые данные | Защищенные члены | Защищенные данные | Полный список членов класса
Класс com::interproc::Node

Класс узла Подробнее...

#include <node.h>

Граф связей класса com::interproc::Node:
Collaboration graph
[см. легенду]

Классы

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 NodeAddressgetAddr () 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< BufferedMessagem_msgBuffer
 
boost::asio::io_service & m_service
 
NodeProtocolm_protocol
 
boost::mutex m_mutex
 

Подробное описание

Класс узла

Через этот класс происходит все взаимодействие приложения с другими приложениями. Экземпляр этого класса должен быть явно создан в приложении, если предполагается подобное взаимодействие (через глобальный com::sys::glb_ioservice, если используется kernel). После создания экземпляра необходимо вызвать метод deploy(), который создаст нужные для работы соединения. Принципиально все узлы можно разделить на master и slave. Master-узлы сами "слушают" порт, в то время как slave-узлы не имеют доступа к прослушиванию порта. Slave-узлы возникают в том случае, когда на машине уже запущен один узел, который изначально "захватил" порт. Этот узел автоматически становится master-узлом, в то время как все узлы, запущенные позже, автоматически становятся slave-узлами. Slave-узлы все еще могут "слушать" порт за счет того, что master-узел имеет проксировать сообщения, которые предназначаются не ему (это происходит за счет определения AppSID).

Необходимо сделать:
Необходимо реализовать синхронную версию

Перечисления

Ошибки взаимодействия

Элементы перечислений
ceSuccess 

Нет ошибок

ceNodeNotFound 

Узел не найден

ceCannotConnectToMasterNode 

Не удалось соединиться с master-узлом

ceNetworkError 

Словарь

ceUnknownError 

Словарь

Статус узла

Элементы перечислений
nsMaster 

Master-узел

nsSlave 

Slave-узел

nsNotSet 

Статус не задан

Конструктор(ы)

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. Если коллбэк не задан, используется коллбэк по умолчанию.

Предупреждения
p_callback привязывается не к самому сообщению, а к адресату, т.е. это будет коллбэк для всех сообщений удаленного узла. Таким образом не получится запустить несколько send() с одним адресатом и разными коллбэками – все ответные сообщения придут в последний коллбэк.
void com::interproc::Node::setDefaultCallback ( OnReplyClb  p_callback)

Задает коллбэк по умолчанию для входящих сообщений. Если для конкретного сообщения не задан коллбэк, вызывается коллбэк по умолчанию


Объявления и описания членов классов находятся в файлах: