| 1 | -- Prosody IM |
| 2 | -- Copyright (C) 2008-2010 Matthew Wild |
| 3 | -- Copyright (C) 2008-2010 Waqas Hussain |
| 4 | -- |
| 5 | -- This project is MIT/X11 licensed. Please see the |
| 6 | -- COPYING file in the source package for more information. |
| 7 | -- |
| 8 | |
| 9 | local use_luaevent = prosody and require "core.configmanager".get("*", "core", "use_libevent"); |
| 10 | |
| 11 | if use_luaevent then |
| 12 | use_luaevent = pcall(require, "luaevent.core"); |
| 13 | if not use_luaevent then |
| 14 | log("error", "libevent not found, falling back to select()"); |
| 15 | end |
| 16 | end |
| 17 | |
| 18 | local server; |
| 19 | |
| 20 | if use_luaevent then |
| 21 | server = require "net.server_event"; |
| 22 | -- util.timer requires "net.server", so instead of having |
| 23 | -- Lua look for, and load us again (causing a loop) - set this here |
| 24 | -- (usually it isn't set until we return, look down there...) |
| 25 | package.loaded["net.server"] = server; |
| 26 | |
| 27 | -- Backwards compatibility for timers, addtimer |
| 28 | -- called a function roughly every second |
| 29 | local add_task = require "util.timer".add_task; |
| 30 | function server.addtimer(f) |
| 31 | return add_task(1, function (...) f(...); return 1; end); |
| 32 | end |
| 33 | |
| 34 | -- Overwrite signal.signal() because we need to ask libevent to |
| 35 | -- handle them instead |
| 36 | local ok, signal = pcall(require, "util.signal"); |
| 37 | if ok and signal then |
| 38 | local _signal_signal = signal.signal; |
| 39 | function signal.signal(signal_id, handler) |
| 40 | if type(signal_id) == "string" then |
| 41 | signal_id = signal[signal_id:upper()]; |
| 42 | end |
| 43 | if type(signal_id) ~= "number" then |
| 44 | return false, "invalid-signal"; |
| 45 | end |
| 46 | return server.hook_signal(signal_id, handler); |
| 47 | end |
| 48 | end |
| 49 | else |
| 50 | server = require "net.server_select"; |
| 51 | package.loaded["net.server"] = server; |
| 52 | end |
| 53 | |
| 54 | -- require "net.server" shall now forever return this, |
| 55 | -- ie. server_select or server_event as chosen above. |
| 56 | return server; |