示例#1
0
static
subscriber_state_t* subscriber_state_new(zsock_t *pipe, zconfig_t* config, zlist_t *devices)
{
    // figure out devices specs
    if (devices == NULL)
        devices = zlist_new();
    if (zlist_size(devices) == 0) {
        zlist_destroy(&devices);
        devices = extract_devices_from_config(config);
    }
    if (zlist_size(devices) == 0)
        zlist_append(devices, augment_zmq_connection_spec("localhost", sub_port));

    //create the state
    subscriber_state_t *state = zmalloc(sizeof(*state));
    state->pipe = pipe;
    state->devices = devices;
    state->sub_socket = subscriber_sub_socket_new(config, state->devices);
    state->tracker = device_tracker_new(devices, state->sub_socket);
    state->pull_socket = subscriber_pull_socket_new(config);
    state->router_socket = subscriber_router_socket_new(config);
    state->push_socket = subscriber_push_socket_new(config);
    if (PUBLISH_DUPLICATES)
        state->pub_socket = subscriber_pub_socket_new(config);
    return state;
}
static
subscriber_state_t* subscriber_state_new(zsock_t* pipe, subscriber_args_t* args)
{
    subscriber_state_t *state = zmalloc(sizeof(*state));
    state->pipe = pipe;
    state->config = args->config;
    state->devices = args->devices;
    state->subscriptions = args->subscriptions;
    state->rcv_hwm = args->rcv_hwm;
    state->snd_hwm = args->snd_hwm;
    state->sub_socket = subscriber_sub_socket_new(state);
    state->push_socket = subscriber_push_socket_new();
    state->tracker = device_tracker_new(state->devices, state->sub_socket);
    free(args);
    return state;
}