Software /
code /
prosody
Annotate
util/events.lua @ 7567:495de404a8ae
ejabberdsql2prosody: rename variable 'host' to prevent shadowing upvalue [luacheck]
Functions roster(), roster_pending(), roster_group(), private_storage() and
offline_msg() have argument named "host", which used to shadow upvalue of this
variable before this change. Instead of renaming this argument, let's rename
the variable to match what the script says in usage:
Usage: ejabberdsql2prosody.lua filename.txt hostname
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Fri, 12 Aug 2016 13:44:47 +0800 |
parent | 7424:ba83ff7d9bd7 |
child | 8382:e5d00bf4a4d5 |
child | 8758:c380a22d52d5 |
rev | line source |
---|---|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1507
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5749
diff
changeset
|
4 -- |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1507
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1507
diff
changeset
|
6 -- COPYING file in the source package for more information. |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1507
diff
changeset
|
7 -- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1507
diff
changeset
|
8 |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
9 |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
10 local pairs = pairs; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
11 local t_insert = table.insert; |
6648
999434eb1bbf
util.events: Add local reference to table.remove (fixes traceback)
Kim Alvefur <zash@zash.se>
parents:
6641
diff
changeset
|
12 local t_remove = table.remove; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
13 local t_sort = table.sort; |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
14 local setmetatable = setmetatable; |
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
15 local next = next; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
16 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6665
diff
changeset
|
17 local _ENV = nil; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
18 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6665
diff
changeset
|
19 local function new() |
7039
138241cc1b3a
util.events: Document data structures
Matthew Wild <mwild1@gmail.com>
parents:
6777
diff
changeset
|
20 -- Map event name to ordered list of handlers (lazily built): handlers[event_name] = array_of_handler_functions |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
21 local handlers = {}; |
7039
138241cc1b3a
util.events: Document data structures
Matthew Wild <mwild1@gmail.com>
parents:
6777
diff
changeset
|
22 -- Array of wrapper functions that wrap all events (nil if empty) |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
23 local global_wrappers; |
7039
138241cc1b3a
util.events: Document data structures
Matthew Wild <mwild1@gmail.com>
parents:
6777
diff
changeset
|
24 -- Per-event wrappers: wrappers[event_name] = wrapper_function |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
25 local wrappers = {}; |
7039
138241cc1b3a
util.events: Document data structures
Matthew Wild <mwild1@gmail.com>
parents:
6777
diff
changeset
|
26 -- Event map: event_map[handler_function] = priority_number |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
27 local event_map = {}; |
7039
138241cc1b3a
util.events: Document data structures
Matthew Wild <mwild1@gmail.com>
parents:
6777
diff
changeset
|
28 -- Called on-demand to build handlers entries |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
29 local function _rebuild_index(handlers, event) |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
30 local _handlers = event_map[event]; |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
31 if not _handlers or next(_handlers) == nil then return; end |
3500
a49ed9166820
util.events: Create new index on handler change instead of modifying existing one (this makes util.events fully reentrant).
Waqas Hussain <waqas20@gmail.com>
parents:
3499
diff
changeset
|
32 local index = {}; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
33 for handler in pairs(_handlers) do |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
34 t_insert(index, handler); |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
35 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
36 t_sort(index, function(a, b) return _handlers[a] > _handlers[b]; end); |
3500
a49ed9166820
util.events: Create new index on handler change instead of modifying existing one (this makes util.events fully reentrant).
Waqas Hussain <waqas20@gmail.com>
parents:
3499
diff
changeset
|
37 handlers[event] = index; |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
38 return index; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
39 end; |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
40 setmetatable(handlers, { __index = _rebuild_index }); |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
41 local function add_handler(event, handler, priority) |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
42 local map = event_map[event]; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
43 if map then |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
44 map[handler] = priority or 0; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
45 else |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
46 map = {[handler] = priority or 0}; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
47 event_map[event] = map; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
48 end |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
49 handlers[event] = nil; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
50 end; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
51 local function remove_handler(event, handler) |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
52 local map = event_map[event]; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
53 if map then |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
54 map[handler] = nil; |
3501
90c18e0355af
util.events: Event handler indices are now built lazily (faster server startup for large number of hosts).
Waqas Hussain <waqas20@gmail.com>
parents:
3500
diff
changeset
|
55 handlers[event] = nil; |
3776
bc4f67a0658d
util.events: Remove an event's table when it has no more handlers.
Waqas Hussain <waqas20@gmail.com>
parents:
3501
diff
changeset
|
56 if next(map) == nil then |
bc4f67a0658d
util.events: Remove an event's table when it has no more handlers.
Waqas Hussain <waqas20@gmail.com>
parents:
3501
diff
changeset
|
57 event_map[event] = nil; |
bc4f67a0658d
util.events: Remove an event's table when it has no more handlers.
Waqas Hussain <waqas20@gmail.com>
parents:
3501
diff
changeset
|
58 end |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
59 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
60 end; |
6664
5466f24e51c9
util.events: Add get_handlers() method
Matthew Wild <mwild1@gmail.com>
parents:
6641
diff
changeset
|
61 local function get_handlers(event) |
5466f24e51c9
util.events: Add get_handlers() method
Matthew Wild <mwild1@gmail.com>
parents:
6641
diff
changeset
|
62 return handlers[event]; |
5466f24e51c9
util.events: Add get_handlers() method
Matthew Wild <mwild1@gmail.com>
parents:
6641
diff
changeset
|
63 end; |
2406
2c416334579c
util.events: Rename add_plugin() and remove_plugin() to add_handlers() and remove_handlers() respectively
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
64 local function add_handlers(handlers) |
2c416334579c
util.events: Rename add_plugin() and remove_plugin() to add_handlers() and remove_handlers() respectively
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
65 for event, handler in pairs(handlers) do |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
66 add_handler(event, handler); |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
67 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
68 end; |
2406
2c416334579c
util.events: Rename add_plugin() and remove_plugin() to add_handlers() and remove_handlers() respectively
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
69 local function remove_handlers(handlers) |
2c416334579c
util.events: Rename add_plugin() and remove_plugin() to add_handlers() and remove_handlers() respectively
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
70 for event, handler in pairs(handlers) do |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
71 remove_handler(event, handler); |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
72 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
73 end; |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
74 local function _fire_event(event_name, event_data) |
5749
60b3b6d27364
util.events: Remove varargs, event handlers can now only accept a single parameter
Matthew Wild <mwild1@gmail.com>
parents:
3776
diff
changeset
|
75 local h = handlers[event_name]; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
76 if h then |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
77 for i=1,#h do |
5749
60b3b6d27364
util.events: Remove varargs, event handlers can now only accept a single parameter
Matthew Wild <mwild1@gmail.com>
parents:
3776
diff
changeset
|
78 local ret = h[i](event_data); |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
79 if ret ~= nil then return ret; end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
80 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
81 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
82 end; |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
83 local function fire_event(event_name, event_data) |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
84 local w = wrappers[event_name] or global_wrappers; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
85 if w then |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
86 local curr_wrapper = #w; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
87 local function c(event_name, event_data) |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
88 curr_wrapper = curr_wrapper - 1; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
89 if curr_wrapper == 0 then |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
90 if global_wrappers == nil or w == global_wrappers then |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
91 return _fire_event(event_name, event_data); |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
92 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
93 w, curr_wrapper = global_wrappers, #global_wrappers; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
94 return w[curr_wrapper](c, event_name, event_data); |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
95 else |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
96 return w[curr_wrapper](c, event_name, event_data); |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
97 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
98 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
99 return w[curr_wrapper](c, event_name, event_data); |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
100 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
101 return _fire_event(event_name, event_data); |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
102 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
103 local function add_wrapper(event_name, wrapper) |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
104 local w; |
6641
b44ebfe81c73
util.events: Change from nil to false to indicate adding a global wrapper
Matthew Wild <mwild1@gmail.com>
parents:
6638
diff
changeset
|
105 if event_name == false then |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
106 w = global_wrappers; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
107 if not w then |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
108 w = {}; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
109 global_wrappers = w; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
110 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
111 else |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
112 w = wrappers[event_name]; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
113 if not w then |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
114 w = {}; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
115 wrappers[event_name] = w; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
116 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
117 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
118 w[#w+1] = wrapper; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
119 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
120 local function remove_wrapper(event_name, wrapper) |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
121 local w; |
6641
b44ebfe81c73
util.events: Change from nil to false to indicate adding a global wrapper
Matthew Wild <mwild1@gmail.com>
parents:
6638
diff
changeset
|
122 if event_name == false then |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
123 w = global_wrappers; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
124 else |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
125 w = wrappers[event_name]; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
126 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
127 if not w then return; end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
128 for i = #w, 1 do |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
129 if w[i] == wrapper then |
6648
999434eb1bbf
util.events: Add local reference to table.remove (fixes traceback)
Kim Alvefur <zash@zash.se>
parents:
6641
diff
changeset
|
130 t_remove(w, i); |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
131 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
132 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
133 if #w == 0 then |
7424
ba83ff7d9bd7
util.events: Fix comparison of event_name with nil instead of false (fixes #554)
Matthew Wild <mwild1@gmail.com>
parents:
7039
diff
changeset
|
134 if event_name == false then |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
135 global_wrappers = nil; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
136 else |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
137 wrappers[event_name] = nil; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
138 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
139 end |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
140 end |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
141 return { |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
142 add_handler = add_handler; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
143 remove_handler = remove_handler; |
3499
91c55ae31ef3
util.events: Fixed the exposed API for adding/removing sets of event handlers.
Waqas Hussain <waqas20@gmail.com>
parents:
3498
diff
changeset
|
144 add_handlers = add_handlers; |
91c55ae31ef3
util.events: Fixed the exposed API for adding/removing sets of event handlers.
Waqas Hussain <waqas20@gmail.com>
parents:
3498
diff
changeset
|
145 remove_handlers = remove_handlers; |
6664
5466f24e51c9
util.events: Add get_handlers() method
Matthew Wild <mwild1@gmail.com>
parents:
6641
diff
changeset
|
146 get_handlers = get_handlers; |
6638
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
147 wrappers = { |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
148 add_handler = add_wrapper; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
149 remove_handler = remove_wrapper; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
150 }; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
151 add_wrapper = add_wrapper; |
9d2b56fd6b47
util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.)
Matthew Wild <mwild1@gmail.com>
parents:
5776
diff
changeset
|
152 remove_wrapper = remove_wrapper; |
1507
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
153 fire_event = fire_event; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
154 _handlers = handlers; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
155 _event_map = event_map; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
156 }; |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
157 end |
92357dffe743
util.events: Convert from Windows line endings
Matthew Wild <mwild1@gmail.com>
parents:
1417
diff
changeset
|
158 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6665
diff
changeset
|
159 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6665
diff
changeset
|
160 new = new; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6665
diff
changeset
|
161 }; |