Skip to content

Commit c857356

Browse files
committed
ListenerManager.(un)register_listener can now raise a ValueError
Added ListenerManager.clear()
1 parent 3288ad1 commit c857356

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

src/core/modules/listeners/listeners_manager.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@ void CListenerManager::RegisterListener(PyObject* pCallable)
4141
// Is the callable already in the vector?
4242
if( !m_vecCallables.HasElement(oCallable) )
4343
{
44-
// Add the callable to the vector
4544
m_vecCallables.AddToTail(oCallable);
4645
}
46+
else {
47+
BOOST_RAISE_EXCEPTION(PyExc_ValueError, "Callback already registered.")
48+
}
4749
}
4850

4951

@@ -55,8 +57,14 @@ void CListenerManager::UnregisterListener(PyObject* pCallable)
5557
// Get the object instance of the callable
5658
object oCallable = object(handle<>(borrowed(pCallable)));
5759

58-
// Remove the callback from the ServerCommandManager instance
59-
m_vecCallables.FindAndRemove(oCallable);
60+
int index = m_vecCallables.Find(oCallable);
61+
62+
if (index == -1) {
63+
BOOST_RAISE_EXCEPTION(PyExc_ValueError, "Callback not registered.")
64+
}
65+
else {
66+
m_vecCallables.Remove(index);
67+
}
6068
}
6169

6270

@@ -98,3 +106,8 @@ object CListenerManager::__getitem__(unsigned int index)
98106

99107
return m_vecCallables[index];
100108
}
109+
110+
void CListenerManager::clear()
111+
{
112+
m_vecCallables.RemoveAll();
113+
}

src/core/modules/listeners/listeners_manager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class CListenerManager
6868
int GetCount();
6969
bool IsRegistered(object oCallback);
7070
object __getitem__(unsigned int index);
71+
void clear();
7172

7273
public:
7374
CUtlVector<object> m_vecCallables;

src/core/modules/listeners/listeners_wrap.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ void export_listener_managers(scope _listeners)
111111
&CListenerManager::__getitem__,
112112
"Return the callback at the given index."
113113
)
114+
115+
.def("clear",
116+
&CListenerManager::clear,
117+
"Remove all registered callbacks."
118+
)
114119
;
115120

116121
_listeners.attr("on_client_active_listener_manager") = object(ptr(GetOnClientActiveListenerManager()));

0 commit comments

Comments
 (0)