Пример #1
0
Файл: rpcd.c Проект: gozfree/src
int rpcd_init(uint16_t port)
{
    int fd;
    fd = skt_tcp_bind_listen(NULL, port, 0);
    if (fd == -1) {
        return -1;
    }
    logi("rpcd listen port = %d\n", port);
    _rpcd = CALLOC(1, struct rpcd);
    _rpcd->listen_fd = fd;
    _rpcd->evbase = gevent_base_create();
    if (!_rpcd->evbase) {
        return -1;
    }
    struct gevent *e = gevent_create(fd, on_connect, NULL, on_error, (void *)_rpcd);
    if (-1 == gevent_add(_rpcd->evbase, e)) {
        loge("event_add failed!\n");
        gevent_destroy(e);
    }
    _rpcd->dict_fd2rpc = dict_new();
    _rpcd->dict_uuid2fd = dict_new();
    wq_pool_init();
    //REGISTER_MSG_MAP(BASIC_RPC_API);
    rpcd_group_register();
    return 0;
}
Пример #2
0
Файл: rpcd.c Проект: gozfree/src
struct rpc *rpc_connect_create(struct rpcd *rpcd, int fd, uint32_t ip, uint16_t port)
{
    char str_ip[INET_ADDRSTRLEN];
    char uuid[MAX_UUID_LEN];
    int ret;

    struct rpc *r = (struct rpc *)calloc(1, sizeof(struct rpc));
    if (!r) {
        loge("malloc failed!\n");
        return NULL;
    }
    r->fd = fd;
    create_uuid(uuid, MAX_UUID_LEN, fd, ip, port);
    struct gevent *e = gevent_create(fd, on_recv, NULL, on_error, (void *)r);
    if (-1 == gevent_add(rpcd->evbase, e)) {
        loge("event_add failed!\n");
    }
    r->ev = e;
    rpc_header_format(r, uuid, uuid, 0, 0);
    ret = rpc_send(r, uuid, MAX_UUID_LEN);
    if (ret != MAX_UUID_LEN) {
        loge("rpc_send failed!\n");
    }
    rpcd_connect_add(rpcd, r, fd, uuid);
    skt_addr_ntop(str_ip, ip);
    logi("on_connect fd = %d, remote_addr = %s:%d, uuid=%s\n", fd, str_ip, port, uuid);

    return r;
}
Пример #3
0
int rpc_set_cb(struct rpc *r,
        void (*cbr)(int fd, void *arg),
        void (*cbw)(int fd, void *arg),
        void (*cbe)(int fd, void *arg),  void *arg)
{
    if (!r) {
        loge("invalid parament!\n");
        return -1;
    }
    struct gevent *e = gevent_create(r->fd, cbr, cbw, cbe, arg);
    if (!e) {
        loge("gevent_create failed!\n");
    }
    if (-1 == gevent_add(r->evbase, e)) {
        loge("event_add failed!\n");
    }
    return 0;
}