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; }