+
+void SMUX::SetNotifiers()
+{
+USER_PTR u;
+int h = users->OpenSearch();
+assert(h && "USERS::OpenSearch is always correct");
+
+while (!users->SearchNext(h, &u))
+ {
+ notifiers.push_back(CHG_AFTER_NOTIFIER(*this, u));
+ u->GetProperty().tariffName.AddAfterNotifier(¬ifiers.back());
+ }
+
+users->CloseSearch(h);
+}
+
+void SMUX::ResetNotifiers()
+{
+std::list<CHG_AFTER_NOTIFIER>::iterator it = notifiers.begin();
+while (it != notifiers.end())
+ {
+ it->GetUserPtr()->GetProperty().tariffName.DelAfterNotifier(&(*it));
+ ++it;
+ }
+}
+
+void CHG_AFTER_NOTIFIER::Notify(const std::string &, const std::string &)
+{
+smux.UpdateTables();
+}
+
+void ADD_DEL_USER_NOTIFIER::Notify(const USER_PTR &)
+{
+smux.UpdateTables();
+}