| | |
| | | #include "usg_common.h" |
| | | |
| | | void server(int port) { |
| | | void *socket = dgram_mod_open_socket(REQ_REP); |
| | | void *socket = dgram_mod_open_socket(); |
| | | dgram_mod_bind(socket, port); |
| | | int size; |
| | | void *recvbuf; |
| | |
| | | } |
| | | |
| | | void client(int port, char *sendbuf) { |
| | | void *socket = dgram_mod_open_socket(REQ_REP); |
| | | void *socket = dgram_mod_open_socket(); |
| | | int size; |
| | | void *recvbuf; |
| | | dgram_mod_sendandrecv(socket, sendbuf, strlen(sendbuf) + 1, port, &recvbuf, &size); |
| | |
| | | { |
| | | SemUtil::dec( queue->mutex); |
| | | queue->reference--; |
| | | LoggerFactory::getLogger().debug("SHMQueue destructor reference===%d", queue->reference.load()); |
| | | //LoggerFactory::getLogger().debug("SHMQueue destructor reference===%d", queue->reference.load()); |
| | | if(queue->reference.load() == 0) { |
| | | delete queue; |
| | | hashtable_t *hashtable = mm_get_hashtable(); |
| | | hashtable_remove(hashtable, KEY); |
| | | printf("SHMQueue destructor delete queue\n"); |
| | | // LoggerFactory::getLogger().debug("SHMQueue destructor delete queue\n"); |
| | | } else { |
| | | SemUtil::inc(queue->mutex); |
| | | } |
| | |
| | | static Logger logger = LoggerFactory::getLogger(); |
| | | |
| | | typedef struct dgram_mod_socket_t { |
| | | socket_mod_t mod; |
| | | shm_socket_t *shm_socket; |
| | | // pthread_t recv_thread; |
| | | // <主题, 订阅者> |
| | |
| | | |
| | | |
| | | |
| | | int dgram_mod_get_socket_port(void * _socket) { |
| | | int dgram_mod_get_port(void * _socket) { |
| | | dgram_mod_socket_t * socket = (dgram_mod_socket_t *) _socket; |
| | | return socket->shm_socket->port; |
| | | } |
| | |
| | | #endif |
| | | |
| | | |
| | | enum socket_mod_t |
| | | { |
| | | PULL_PUSH = 1, |
| | | REQ_REP = 2, |
| | | PAIR = 3, |
| | | PUB_SUB = 4, |
| | | SURVEY = 5, |
| | | BUS = 6 |
| | | |
| | | }; |
| | | |
| | | /** |
| | | * 创建socket |
| | | * @return socket地址 |
| | | */ |
| | | void *dgram_mod_open_socket(); |
| | | |
| | | /** |
| | | * 关闭socket |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_close_socket(void * _socket); |
| | | |
| | | /** |
| | | * 绑定端口到socket, 如果不绑定则系统自动分配一个 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_bind(void * _socket, int port); |
| | | |
| | | /** |
| | | * 发送信息 |
| | | * @port 发送给谁 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_sendto(void *_socket, const void *buf, const int size, const int port); |
| | | |
| | | |
| | | /** |
| | | * 接收信息 |
| | | * @port 从谁哪里收到的信息 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_recvfrom(void *_socket, void **buf, int *size, int *port); |
| | | |
| | | /** |
| | | * 发送请求信息并等待接收应答 |
| | | * @port 发送给谁 |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int dgram_mod_sendandrecv(void * _socket, const void *send_buf, const int send_size, const int port, void **recv_buf, int *recv_size) ; |
| | | |
| | | int dgram_mod_get_socket_port(void * _socket) ; |
| | | /** |
| | | * 获取soket端口号 |
| | | */ |
| | | int dgram_mod_get_port(void * _socket) ; |
| | | |
| | | |
| | | /** |
| | | * 释放存储接收信息的buf |
| | | */ |
| | | void dgram_mod_free(void *buf) ; |
| | | |
| | | /** |
| | | * 启动bus |
| | | * |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int start_bus(void * _socket); |
| | | |
| | | /** |
| | | * 订阅指定主题 |
| | | * @topic 主题 |
| | | * @size 主题长度 |
| | | * @port 总线端口 |
| | | */ |
| | | int sub(void * _socket, void *topic, int size, int port); |
| | | |
| | | /** |
| | | * 发布主题 |
| | | * @topic 主题 |
| | | * @content 主题内容 |
| | | * @port 总线端口 |
| | | */ |
| | | int pub(void * _socket, void *topic, int topic_size, void *content, int content_size, int port); |
| | |
| | | |
| | | /** |
| | | * 关闭socket |
| | | * @return 0 成功, 其他值 失败的错误码 |
| | | */ |
| | | int mod_close_socket(void * _socket); |
| | | |
| | |
| | | int mod_recv(void * _socket, void **buf, int *size) ; |
| | | |
| | | /** |
| | | * 释放接收信息的buf |
| | | * 释放存储接收信息的buf |
| | | */ |
| | | void mod_free(void *buf); |
| | | |
| | |
| | | include $(ROOT)/Make.defines.$(PLATFORM) |
| | | |
| | | |
| | | PROGS = dgram_mod_bus dgram_mod_survey |
| | | PROGS = dgram_mod_bus dgram_mod_survey dgram_mod_req_rep |
| | | |
| | | |
| | | build: $(PROGS) |
| | |
| | | } |
| | | |
| | | } |
| | | printf("(%d) quit\n", dgram_mod_get_socket_port(socket)); |
| | | printf("(%d) quit\n", dgram_mod_get_port(socket)); |
| | | dgram_mod_close_socket(socket); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | void server(int port) { |
| | | void *socket = dgram_mod_open_socket(REQ_REP); |
| | | void *socket = dgram_mod_open_socket(); |
| | | dgram_mod_bind(socket, port); |
| | | initThreadPool(socket); |
| | | |
| | |
| | | } |
| | | |
| | | void client(int port) { |
| | | void *socket = dgram_mod_open_socket(REQ_REP); |
| | | void *socket = dgram_mod_open_socket(); |
| | | int size; |
| | | void *recvbuf; |
| | | char sendbuf[512]; |
| | |
| | | char sendbuf[512]; |
| | | int scale = 100000; |
| | | int i; |
| | | void *socket = dgram_mod_open_socket(REQ_REP); |
| | | void *socket = dgram_mod_open_socket(); |
| | | |
| | | char filename[512]; |
| | | sprintf(filename, "test%d.txt", targ->id); |
| | | sprintf(filename, "test%d.tmp", targ->id); |
| | | FILE *fp = NULL; |
| | | fp = fopen(filename, "w+"); |
| | | |