smcp_status_t smcp_group_set_enabled(smcp_group_t self, bool x) { smcp_status_t status = SMCP_STATUS_OK; smcp_group_mgr_t mgr = group_mgr_from_group(self); #if SMCP_EMBEDDED smcp_t const smcp_instance = smcp_get_current_instance(); #else smcp_t const smcp_instance = mgr->smcp_instance; #endif if (x != self->enabled) { self->enabled = x; if (self->stable) { smcp_group_mgr_commit_stable(mgr); } if (self->enabled) { status = smcp_plat_multicast_join(smcp_instance, &self->addr, 0); } else { status = smcp_plat_multicast_leave(smcp_instance, &self->addr, 0); } smcp_observable_trigger(&self->var_handler.observable, I_ENABLED, 0); } return status; }
void plugtest_obs_timer_callback(smcp_t smcp, void* context) { struct plugtest_server_s *self = (void*)context; smcp_invalidate_timer(smcp,&self->obs_timer); smcp_schedule_timer(smcp,&self->obs_timer,5 * MSEC_PER_SEC); smcp_observable_trigger(&self->observable,PLUGTEST_OBS_KEY,0); }
smcp_status_t smcp_group_set_stable(smcp_group_t self, bool x) { smcp_group_mgr_t mgr = group_mgr_from_group(self); if (x != self->stable) { self->stable = x; smcp_group_mgr_commit_stable(mgr); smcp_observable_trigger(&self->var_handler.observable, I_STABLE, 0); } return SMCP_STATUS_OK; }