| | |
| | | # rm -rf build/* |
| | | cd build |
| | | |
| | | BUILD_TYPE="Debug" |
| | | |
| | | case ${1} in |
| | | "release") |
| | | BUILD_TYPE="Release" |
| | | ;; |
| | | |
| | | *) |
| | | BUILD_TYPE="Debug" |
| | | ;; |
| | | esac |
| | | |
| | | # -DCMAKE_BUILD_TYPE=Debug | Release |
| | | # -DBUILD_SHARED_LIBS=ON |
| | | # -DCMAKE_INSTALL_PREFIX=$(pwd/../dest) |
| | | # -DQCA_MAN_INSTALL_DIR:PATH=/usr/share/man |
| | | cmake -DCMAKE_INSTALL_PREFIX="$(pwd)/../dest" -DCMAKE_BUILD_TYPE=Debug -DSUPPORT_RDMA=OFF .. |
| | | cmake -DCMAKE_INSTALL_PREFIX="$(pwd)/../dest" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DSUPPORT_RDMA=OFF .. |
| | | |
| | | cmake --build . |
| | | |
| | |
| | | |
| | | # configure a header file to pass some of the CMake settings |
| | | # to the source code |
| | | configure_file(BusConfig.h.in BusConfig.h) |
| | | configure_file(bus_config.h.in bus_config.h) |
| | | |
| | | add_library(shm_queue |
| | | logger_factory.cpp |
| | |
| | | socket/net_mod_socket_io.cpp |
| | | socket/net_mod_server_socket.cpp |
| | | bus_error.cpp |
| | | queue/shm_queue_wrapper.cpp |
| | | shm/shm_mm_wrapper.cpp |
| | | shm/mm.cpp |
| | | shm/hashtable.cpp |
| | |
| | | ) |
| | | |
| | | target_include_directories(shm_queue PUBLIC |
| | | ${PROJECT_BINARY_DIR} |
| | | ${PROJECT_BINARY_DIR}/src |
| | | ${CMAKE_CURRENT_SOURCE_DIR} |
| | | ${CMAKE_CURRENT_SOURCE_DIR}/shm |
| | | ${CMAKE_CURRENT_SOURCE_DIR}/queue |
New file |
| | |
| | | // the configured options and settings for Bus |
| | | |
| | | #ifndef __BUS_CONFIG_H__ |
| | | #define __BUS_CONFIG_H__ |
| | | |
| | | #define B_BUS_VERSION_MAJOR @B_BUS_VERSION_MAJOR@ |
| | | #define B_BUS_VERSION_MINOR @B_BUS_VERSION_MINOR@ |
| | | #cmakedefine SUPPORT_RDMA |
| | | #define BUILD_@CMAKE_BUILD_TYPE@ |
| | | |
| | | |
| | | #endif |
| | |
| | | #include "logger_factory.h" |
| | | |
| | | Logger * LoggerFactory::logger = NULL; |
| | | Logger * LoggerFactory::logger = NULL; |
| | | |
| | | |
| | | Logger* LoggerFactory::getLogger() { |
| | | //ERROR ALL DEBUG INFO WARN |
| | | if(logger != NULL) |
| | | return logger; |
| | | |
| | | LoggerConfig config; |
| | | |
| | | #ifdef BUILD_Debug |
| | | config.level = Logger::DEBUG; |
| | | #else |
| | | config.level = Logger::INFO; |
| | | #endif |
| | | config.logFile = "bhome_bus.log"; |
| | | config.console = 1; |
| | | logger = new Logger(config); |
| | | return logger; |
| | | } |
| | |
| | | #ifndef __LOGGER_FACTORY_H__ |
| | | #define __LOGGER_FACTORY_H__ |
| | | #include "logger.h" |
| | | #include "bus_config.h" |
| | | |
| | | class LoggerFactory { |
| | | private: |
| | |
| | | |
| | | public: |
| | | |
| | | static Logger* getLogger() { |
| | | //ERROR ALL DEBUG INFO WARN |
| | | if(logger != NULL) |
| | | return logger; |
| | | |
| | | LoggerConfig config; |
| | | config.level = Logger::DEBUG; |
| | | config.logFile = "softbus.log"; |
| | | config.console = 1; |
| | | logger = new Logger(config); |
| | | return logger; |
| | | } |
| | | static Logger* getLogger(); |
| | | }; |
| | | |
| | | #endif |
| | |
| | | int LockFreeQueue<ELEM_T, Allocator, Q_TYPE>::pop(ELEM_T &a_data) |
| | | { |
| | | |
| | | // LoggerFactory::getLogger()->debug("==================LockFreeQueue pop before\n"); |
| | | // LoggerFactory::getLogger()->debug("==================LockFreeQueue pop before\n"); |
| | | if (sem_wait(&items) == -1) { |
| | | LoggerFactory::getLogger()->error(errno, "LockFreeQueue pop"); |
| | | return errno; |
| | |
| | | { |
| | | // LoggerFactory::getLogger()->debug("=================ts sec = %d, nsec = %ld \n", ts->tv_sec, ts->tv_nsec ); |
| | | |
| | | // struct timespec timeout_tmp = {1, 0}; |
| | | LoggerFactory::getLogger()->debug("==================LockFreeQueue pop_timeout before\n"); |
| | | struct timespec timeout = PXSemUtil::calc_sem_timeout(ts); |
| | | // LoggerFactory::getLogger()->debug("================== timeout before sec = %d, nsec = %ld \n", timeout.tv_sec, timeout.tv_nsec ); |
| | | |
| | |
| | | } |
| | | |
| | | ShmModSocket::ShmModSocket() { |
| | | mod = (socket_mod_t)0; |
| | | shm_socket = shm_open_socket(SHM_SOCKET_DGRAM); |
| | | bus_set = new std::set<int>; |
| | | } |
| | |
| | | int ShmModSocket::sendto_nowait( const void *buf, const int size, const int key){ |
| | | return shm_sendto(shm_socket, buf, size, key, NULL, (int)SHM_MSG_NOWAIT); |
| | | } |
| | | |
| | | |
| | | inline int ShmModSocket::_recvfrom_(void **buf, int *size, int *key, struct timespec *timeout, int flags) { |
| | | |
| | | if(mod == BUS) { |
| | | logger->error("Can not use method recvfrom in a Bus"); |
| | | exit(1); |
| | | } |
| | | // printf("dgram_mod_recvfrom before\n"); |
| | | int rv = shm_recvfrom(shm_socket, buf, size, key, timeout, flags); |
| | | // printf("dgram_mod_recvfrom after\n"); |
| | | |
| | | return rv; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 接收信息 |
| | |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int ShmModSocket::recvfrom(void **buf, int *size, int *key) { |
| | | int rv = _recvfrom_( buf, size, key, NULL, 0); |
| | | int rv = shm_recvfrom(shm_socket, buf, size, key, NULL, 0); |
| | | // logger->error(rv, "ShmModSocket::recvfrom failed!"); |
| | | return rv; |
| | | } |
| | |
| | | |
| | | // 接受信息超时返回。 @sec 秒 , @nsec 纳秒 |
| | | int ShmModSocket::recvfrom_timeout( void **buf, int *size, int *key, struct timespec *timeout) { |
| | | int rv = _recvfrom_(buf, size, key, timeout, 0); |
| | | int rv = shm_recvfrom(shm_socket, buf, size, key, timeout, 0); |
| | | return rv; |
| | | } |
| | | |
| | | int ShmModSocket::recvfrom_nowait( void **buf, int *size, int *key){ |
| | | int rv = _recvfrom_(buf, size, key, NULL, (int)SHM_MSG_NOWAIT); |
| | | int rv = shm_recvfrom(shm_socket, buf, size, key, NULL, (int)SHM_MSG_NOWAIT); |
| | | // logger->error(rv, "ShmModSocket::recvfrom_nowait failed!"); |
| | | return rv; |
| | | } |
| | |
| | | friend class BusServerSocket; |
| | | private: |
| | | shm_socket_t *shm_socket; |
| | | socket_mod_t mod; |
| | | |
| | | std::set<int> *bus_set; |
| | | |
| | | private: |
| | | inline int _recvfrom_(void **buf, int *size, int *key, struct timespec *timeout, int flags); |
| | | |
| | | int _sub_( char *topic, int size, int key, struct timespec *timeout, int flags); |
| | | int _pub_( char *topic, int topic_size, void *content, int content_size, int key, struct timespec *timeout, int flags); |
| | |
| | | logger->debug("shm_open_socket\n"); |
| | | shm_socket_t *socket = (shm_socket_t *)calloc(1, sizeof(shm_socket_t)); |
| | | socket->socket_type = socket_type; |
| | | socket->key = -1; |
| | | socket->key = 0; |
| | | socket->force_bind = false; |
| | | socket->dispatch_thread = 0; |
| | | socket->status = SHM_CONN_CLOSED; |
| | |
| | | |
| | | int key; |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | if (socket->key == -1) { |
| | | if (socket->key == 0) { |
| | | key = hashtable_alloc_key(hashtable); |
| | | socket->key = key; |
| | | } else { |
| | |
| | | return -1; |
| | | } |
| | | |
| | | if (socket->key == -1) { |
| | | if (socket->key == 0) { |
| | | socket->key = hashtable_alloc_key(hashtable); |
| | | } else { |
| | | if(!_shm_socket_check_key(socket)) { |
| | |
| | | err_exit(s, "shm_sendto : pthread_mutex_lock"); |
| | | |
| | | if (socket->queue == NULL) { |
| | | if (socket->key == -1) { |
| | | if (socket->key == 0) { |
| | | socket->key = hashtable_alloc_key(hashtable); |
| | | } else { |
| | | |
| | |
| | | err_exit(s, "shm_recvfrom : pthread_mutex_lock"); |
| | | |
| | | if (socket->queue == NULL) { |
| | | if (socket->key == -1) { |
| | | if (socket->key == 0) { |
| | | socket->key = hashtable_alloc_key(hashtable); |
| | | } else { |
| | | |