X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fserver.lua;h=1c1a63a4743651ea6120a582dd070a584cdb8233;hb=9219b5b35c5be9687eafac1f840246c10352905e;hp=15bba603f3a90fcc04884df913d5235fdf45c79c;hpb=8dd448b689f6fb590d9794c04c15ccbcecc0f32a;p=prosody.git diff --git a/net/server.lua b/net/server.lua index 15bba603..1c1a63a4 100644 --- a/net/server.lua +++ b/net/server.lua @@ -1,10 +1,27 @@ -local have_luaevent = pcall(require, "luaevent.core"); -local use_luaevent = require "core.configmanager".get("*", "core", "use_libevent"); +-- Prosody IM +-- Copyright (C) 2008-2010 Matthew Wild +-- Copyright (C) 2008-2010 Waqas Hussain +-- +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. +-- + +local use_luaevent = prosody and require "core.configmanager".get("*", "core", "use_libevent"); + +if use_luaevent then + use_luaevent = pcall(require, "luaevent.core"); + if not use_luaevent then + log("error", "libevent not found, falling back to select()"); + end +end local server; -if have_luaevent and use_luaevent == true then +if use_luaevent then server = require "net.server_event"; + -- util.timer requires "net.server", so instead of having + -- Lua look for, and load us again (causing a loop) - set this here + -- (usually it isn't set until we return, look down there...) package.loaded["net.server"] = server; -- Backwards compatibility for timers, addtimer @@ -13,9 +30,27 @@ if have_luaevent and use_luaevent == true then function server.addtimer(f) return add_task(1, function (...) f(...); return 1; end); end + + -- Overwrite signal.signal() because we need to ask libevent to + -- handle them instead + local ok, signal = pcall(require, "util.signal"); + if ok and signal then + local _signal_signal = signal.signal; + function signal.signal(signal_id, handler) + if type(signal_id) == "string" then + signal_id = signal[signal_id:upper()]; + end + if type(signal_id) ~= "number" then + return false, "invalid-signal"; + end + return server.hook_signal(signal_id, handler); + end + end else server = require "net.server_select"; package.loaded["net.server"] = server; end +-- require "net.server" shall now forever return this, +-- ie. server_select or server_event as chosen above. return server;