| | |
| | | #define TOPIC_LIDENTIFIER "{" |
| | | #define TOPIC_RIDENTIFIER "}" |
| | | |
| | | enum socket_mod_t |
| | | { |
| | | PULL_PUSH = 1, |
| | | REQ_REP = 2, |
| | | PAIR = 3, |
| | | PUB_SUB = 4, |
| | | SURVEY = 5, |
| | | BUS = 6 |
| | | |
| | | }; |
| | | |
| | | static Logger logger = LoggerFactory::getLogger(); |
| | | #define BUS_MAP_KEY 1 |
| | |
| | | |
| | | typedef struct dgram_mod_socket_t { |
| | | shm_socket_t *shm_socket; |
| | | socket_mod_t mod; |
| | | // pthread_t recv_thread; |
| | | // <主题, 订阅者> |
| | | SHMTopicSubMap *topic_sub_map; |
| | |
| | | subscripter_set = map_iter->second; |
| | | delete subscripter_set; |
| | | } |
| | | topic_sub_map->clear(); |
| | | mem_pool_free_by_key(BUS_MAP_KEY); |
| | | } |
| | | |
| | | |
| | | shm_close_socket(socket->shm_socket); |
| | | free(_socket); |
| | | } |
| | |
| | | int dgram_mod_recvfrom(void *_socket, void **buf, int *size, int *port) { |
| | | |
| | | dgram_mod_socket_t * socket = (dgram_mod_socket_t *) _socket; |
| | | if(socket->mod == BUS) { |
| | | err_exit(0, "Can not use method recvfrom in a Bus"); |
| | | } |
| | | // printf("dgram_mod_recvfrom before\n"); |
| | | int rv = shm_recvfrom(socket->shm_socket, buf, size, port); |
| | | // printf("dgram_mod_recvfrom after\n"); |
| | |
| | | |
| | | int dgram_mod_start_bus(void * _socket) { |
| | | dgram_mod_socket_t * socket = (dgram_mod_socket_t *) _socket; |
| | | socket->mod = BUS; |
| | | printf("mem_pool_malloc_by_key before\n"); |
| | | // void *map_ptr = mem_pool_malloc_by_key(1, sizeof(SHMTopicSubMap)); |
| | | socket->topic_sub_map = mem_pool_attach<SHMTopicSubMap>(BUS_MAP_KEY); |