pubnub_t* pubnub_init(pubnub_t *p, const char *publish_key, const char *subscribe_key) { PUBNUB_ASSERT(pb_valid_ctx_ptr(p)); pubnub_mutex_init(p->monitor); pubnub_mutex_lock(p->monitor); pbcc_init(&p->core, publish_key, subscribe_key); if (PUBNUB_TIMERS_API) { p->transaction_timeout_ms = PUBNUB_DEFAULT_TRANSACTION_TIMER; #if defined(PUBNUB_DEFAULT_CONNECTION_TIMER) p->connection_timeout_s = PUBNUB_DEFAULT_CONNECTION_TIMER; #endif #if defined(PUBNUB_CALLBACK_API) p->previous = p->next = NULL; #endif } #if defined(PUBNUB_CALLBACK_API) p->cb = NULL; p->user_data = NULL; #endif if (PUBNUB_ORIGIN_SETTABLE) { p->origin = PUBNUB_ORIGIN; } p->state = PBS_IDLE; p->trans = PBTT_NONE; pbpal_init(p); pubnub_mutex_unlock(p->monitor); return p; }
void pnc_ops_init(pubnub_t *pn, pubnub_t *pn_sub) { pubnub_mutex_init(m_loop_enabled_mutex); InitUserData(&m_user_data, pn); InitUserData(&m_user_data_sub, pn_sub); pubnub_register_callback(pn, ops_callback, &m_user_data); pubnub_register_callback(pn_sub, subscribe_callback, &m_user_data_sub); }
pubnub_subloop_t* pubnub_subloop_define(pubnub_t* p, char const* channel, struct pubnub_subscribe_options options, pubnub_subloop_callback_t cb) { pubnub_subloop_t* rslt = (pubnub_subloop_t*)malloc(sizeof(pubnub_subloop_t)); if (NULL == rslt) { return NULL; } rslt->pbp = p; rslt->channel = channel; rslt->options = options; rslt->cb = cb; rslt->saved_context_cb = NULL; pubnub_mutex_init(rslt->monitor); return rslt; }