Annotate

init.lua @ 224:7fc17e40fbaf

plugins.carbons: Add, implements Message Carbons (XEP 280)
author Kim Alvefur <zash@zash.se>
date Wed, 02 Nov 2011 01:17:54 +0100
parent 205:cbcd45be11a8
child 234:a597da99810c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1
17
ec6b0b94826c verse: Include LuaRocks packages if we can
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
2 -- Use LuaRocks if available
ec6b0b94826c verse: Include LuaRocks packages if we can
Matthew Wild <mwild1@gmail.com>
parents: 16
diff changeset
3 pcall(require, "luarocks.require");
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4
64
a28540d4117a verse: Load LuaSec if possible
Matthew Wild <mwild1@gmail.com>
parents: 60
diff changeset
5 -- Load LuaSec if available
a28540d4117a verse: Load LuaSec if possible
Matthew Wild <mwild1@gmail.com>
parents: 60
diff changeset
6 pcall(require, "ssl");
a28540d4117a verse: Load LuaSec if possible
Matthew Wild <mwild1@gmail.com>
parents: 60
diff changeset
7
30
9c96318913f7 Revert module names throughout to their Prosody equivalents
Matthew Wild <mwild1@gmail.com>
parents: 23
diff changeset
8 local server = require "net.server";
9c96318913f7 Revert module names throughout to their Prosody equivalents
Matthew Wild <mwild1@gmail.com>
parents: 23
diff changeset
9 local events = require "util.events";
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 module("verse", package.seeall);
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local verse = _M;
205
cbcd45be11a8 verse: Expose net.server as verse.server
Matthew Wild <mwild1@gmail.com>
parents: 173
diff changeset
13 _M.server = server;
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local stream = {};
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 stream.__index = stream;
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
17 stream_mt = stream;
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18
3
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
19 verse.plugins = {};
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
20
44
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
21 function verse.new(logger, base)
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
22 local t = setmetatable(base or {}, stream);
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
23 t.id = tostring(t):match("%x*$");
44
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
24 t:set_logger(logger, true);
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
25 t.events = events.new();
173
3112a9e450ac verse: Make add_plugin only load a plugin once per stream
Matthew Wild <mwild1@gmail.com>
parents: 163
diff changeset
26 t.plugins = {};
44
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
27 return t;
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 end
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29
42
6006e6bb1c28 verse: Add verse.add_task(delay, callback) to add timer functions using util.timer
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
30 verse.add_task = require "util.timer".add_task;
6006e6bb1c28 verse: Add verse.add_task(delay, callback) to add timer functions using util.timer
Matthew Wild <mwild1@gmail.com>
parents: 30
diff changeset
31
125
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
32 verse.logger = logger.init;
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
33 verse.log = verse.logger("verse");
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
34
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
35 function verse.set_logger(logger)
141
15706f6492ae verse: Fix set_logger() to set verse.log() correctly
Matthew Wild <mwild1@gmail.com>
parents: 135
diff changeset
36 verse.log = logger;
125
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
37 server.setlogger(logger);
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
38 end
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
39
142
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
40 function verse.filter_log(levels, logger)
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
41 local level_set = {};
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
42 for _, level in ipairs(levels) do
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
43 level_set[level] = true;
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
44 end
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
45 return function (level, name, ...)
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
46 if level_set[level] then
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
47 return logger(level, name, ...);
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
48 end
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
49 end;
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
50 end
ea753bc81a33 verse: Add verse.filter_log(levels, logger) to filter a logger for certain levels
Matthew Wild <mwild1@gmail.com>
parents: 141
diff changeset
51
125
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
52 local function error_handler(err)
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
53 verse.log("error", "Error: %s", err);
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
54 verse.log("error", "Traceback: %s", debug.traceback());
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
55 end
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
56
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
57 function verse.set_error_handler(new_error_handler)
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
58 error_handler = new_error_handler;
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
59 end
b46921de1e03 verse: Add verse.log() to log a message using the default logger. Also add verse.set_error_handler() to, er, set an error handler.
Matthew Wild <mwild1@gmail.com>
parents: 124
diff changeset
60
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 function verse.loop()
126
fa3ddadb8364 verse: verse.loop() and new verse.step() use the new error handler to, er, handle errors.
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
62 return xpcall(server.loop, error_handler);
fa3ddadb8364 verse: verse.loop() and new verse.step() use the new error handler to, er, handle errors.
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
63 end
fa3ddadb8364 verse: verse.loop() and new verse.step() use the new error handler to, er, handle errors.
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
64
fa3ddadb8364 verse: verse.loop() and new verse.step() use the new error handler to, er, handle errors.
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
65 function verse.step()
fa3ddadb8364 verse: verse.loop() and new verse.step() use the new error handler to, er, handle errors.
Matthew Wild <mwild1@gmail.com>
parents: 125
diff changeset
66 return xpcall(server.step, error_handler);
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 end
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68
45
50a2e4fb0a16 verse: Add verse.quit() to exit the event loop
Matthew Wild <mwild1@gmail.com>
parents: 44
diff changeset
69 function verse.quit()
50a2e4fb0a16 verse: Add verse.quit() to exit the event loop
Matthew Wild <mwild1@gmail.com>
parents: 44
diff changeset
70 return server.setquitting(true);
50a2e4fb0a16 verse: Add verse.quit() to exit the event loop
Matthew Wild <mwild1@gmail.com>
parents: 44
diff changeset
71 end
50a2e4fb0a16 verse: Add verse.quit() to exit the event loop
Matthew Wild <mwild1@gmail.com>
parents: 44
diff changeset
72
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
73 function stream:connect(connect_host, connect_port)
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
74 connect_host = connect_host or "localhost";
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
75 connect_port = tonumber(connect_port) or 5222;
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
77 -- Create and initiate connection
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
78 local conn = socket.tcp()
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
79 conn:settimeout(0);
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
80 local success, err = conn:connect(connect_host, connect_port);
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
81
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
82 if not success and err ~= "timeout" then
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
83 self:warn("connect() to %s:%d failed: %s", connect_host, connect_port, err);
135
8adf5fb27ce3 verse: Fire disconnected event even if connection fails instantly
Matthew Wild <mwild1@gmail.com>
parents: 132
diff changeset
84 return self:event("disconnected", { reason = err }) or false, err;
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
85 end
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
86
59
829a0a495dd1 verse: Remove some useless comments
Matthew Wild <mwild1@gmail.com>
parents: 55
diff changeset
87 local conn = server.wrapclient(conn, connect_host, connect_port, new_listener(self), "*a");
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 if not conn then
124
3659ba3b8dfa verse: Log error when connection fails instantly
Matthew Wild <mwild1@gmail.com>
parents: 98
diff changeset
89 self:warn("connection initialisation failed: %s", err);
135
8adf5fb27ce3 verse: Fire disconnected event even if connection fails instantly
Matthew Wild <mwild1@gmail.com>
parents: 132
diff changeset
90 return self:event("disconnected", { reason = err }) or false, err;
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 end
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 self.conn = conn;
163
48a47bca9a63 verse: Change to set conn:send in only one place, and fire new events 'outgoing' and 'outgoing-raw'
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
94 self.send = function (stream, data)
48a47bca9a63 verse: Change to set conn:send in only one place, and fire new events 'outgoing' and 'outgoing-raw'
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
95 self:event("outgoing", data);
48a47bca9a63 verse: Change to set conn:send in only one place, and fire new events 'outgoing' and 'outgoing-raw'
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
96 data = tostring(data);
48a47bca9a63 verse: Change to set conn:send in only one place, and fire new events 'outgoing' and 'outgoing-raw'
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
97 self:event("outgoing-raw", data);
48a47bca9a63 verse: Change to set conn:send in only one place, and fire new events 'outgoing' and 'outgoing-raw'
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
98 return conn:write(data);
48a47bca9a63 verse: Change to set conn:send in only one place, and fire new events 'outgoing' and 'outgoing-raw'
Matthew Wild <mwild1@gmail.com>
parents: 162
diff changeset
99 end;
96
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
100 return true;
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
101 end
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
102
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
103 function stream:close()
132
b38397163737 verse: Log error and return when trying to close a closed connection
Matthew Wild <mwild1@gmail.com>
parents: 126
diff changeset
104 if not self.conn then
b38397163737 verse: Log error and return when trying to close a closed connection
Matthew Wild <mwild1@gmail.com>
parents: 126
diff changeset
105 verse.log("error", "Attempt to close disconnected connection - possibly a bug");
b38397163737 verse: Log error and return when trying to close a closed connection
Matthew Wild <mwild1@gmail.com>
parents: 126
diff changeset
106 return;
b38397163737 verse: Log error and return when trying to close a closed connection
Matthew Wild <mwild1@gmail.com>
parents: 126
diff changeset
107 end
96
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
108 local on_disconnect = self.conn.disconnect();
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
109 self.conn:close();
f0aec10023aa verse: Return true from connect() on success, add stream:close()
Matthew Wild <mwild1@gmail.com>
parents: 95
diff changeset
110 on_disconnect(conn, reason);
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
111 end
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
112
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
113 -- Logging functions
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
114 function stream:debug(...)
44
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
115 if self.logger and self.log.debug then
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
116 return self.logger("debug", ...);
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
117 end
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
118 end
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
119
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
120 function stream:warn(...)
44
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
121 if self.logger and self.log.warn then
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
122 return self.logger("warn", ...);
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
123 end
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 end
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
126 function stream:error(...)
44
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
127 if self.logger and self.log.error then
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
128 return self.logger("error", ...);
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
129 end
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
130 end
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
131
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
132 function stream:set_logger(logger, levels)
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
133 local old_logger = self.logger;
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
134 if logger then
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
135 self.logger = logger;
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
136 end
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
137 if levels then
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
138 if levels == true then
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
139 levels = { "debug", "info", "warn", "error" };
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
140 end
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
141 self.log = {};
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
142 for _, level in ipairs(levels) do
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
143 self.log[level] = true;
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
144 end
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
145 end
37396504de5f verse: Multiple changes to allow controlling logging for both verse and streams
Matthew Wild <mwild1@gmail.com>
parents: 42
diff changeset
146 return old_logger;
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
147 end
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
148
94
b40465267fb5 verse: Add stream:set_loglevels()
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
149 function stream_mt:set_log_levels(levels)
b40465267fb5 verse: Add stream:set_loglevels()
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
150 self:set_logger(nil, levels);
b40465267fb5 verse: Add stream:set_loglevels()
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
151 end
b40465267fb5 verse: Add stream:set_loglevels()
Matthew Wild <mwild1@gmail.com>
parents: 64
diff changeset
152
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
153 -- Event handling
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
154 function stream:event(name, ...)
4
0ef21511c7ff Log debug message when firing an event
Matthew Wild <mwild1@gmail.com>
parents: 3
diff changeset
155 self:debug("Firing event: "..tostring(name));
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
156 return self.events.fire_event(name, ...);
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
157 end
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
158
16
13444ae6e3c4 verse: Fix stream:hook() to pass additional parameters to the underlying hook(), so we don't strip priority
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
159 function stream:hook(name, ...)
13444ae6e3c4 verse: Fix stream:hook() to pass additional parameters to the underlying hook(), so we don't strip priority
Matthew Wild <mwild1@gmail.com>
parents: 4
diff changeset
160 return self.events.add_handler(name, ...);
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
161 end
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
162
53
091ff10eb51c verse: Add stream:unhook(event_name, handler)
Matthew Wild <mwild1@gmail.com>
parents: 45
diff changeset
163 function stream:unhook(name, handler)
091ff10eb51c verse: Add stream:unhook(event_name, handler)
Matthew Wild <mwild1@gmail.com>
parents: 45
diff changeset
164 return self.events.remove_handler(name, handler);
091ff10eb51c verse: Add stream:unhook(event_name, handler)
Matthew Wild <mwild1@gmail.com>
parents: 45
diff changeset
165 end
091ff10eb51c verse: Add stream:unhook(event_name, handler)
Matthew Wild <mwild1@gmail.com>
parents: 45
diff changeset
166
98
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
167 function verse.eventable(object)
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
168 object.events = events.new();
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
169 object.hook, object.unhook = stream.hook, stream.unhook;
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
170 local fire_event = object.events.fire_event;
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
171 function object:event(name, ...)
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
172 return fire_event(name, ...);
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
173 end
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
174 return object;
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
175 end
1dccff7df2d5 verse: Add verse.eventable() to give a passed object :event() and :hook()/:unhook() methods and return it again
Matthew Wild <mwild1@gmail.com>
parents: 96
diff changeset
176
3
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
177 function stream:add_plugin(name)
173
3112a9e450ac verse: Make add_plugin only load a plugin once per stream
Matthew Wild <mwild1@gmail.com>
parents: 163
diff changeset
178 if self.plugins[name] then return true; end
3
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
179 if require("verse.plugins."..name) then
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
180 local ok, err = verse.plugins[name](self);
162
2950079d4319 verse: Consider a plugin as failed to load only if it returns false
Matthew Wild <mwild1@gmail.com>
parents: 142
diff changeset
181 if ok ~= false then
3
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
182 self:debug("Loaded %s plugin", name);
173
3112a9e450ac verse: Make add_plugin only load a plugin once per stream
Matthew Wild <mwild1@gmail.com>
parents: 163
diff changeset
183 self.plugins[name] = true;
3
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
184 else
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
185 self:warn("Failed to load %s plugin: %s", name, err);
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
186 end
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
187 end
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
188 return self;
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
189 end
372ddb5900d3 verse: Support for loading plugins
Matthew Wild <mwild1@gmail.com>
parents: 2
diff changeset
190
1
7c8d0a2fc004 Break client-specific code into verse.client module
Matthew Wild <mwild1@gmail.com>
parents: 0
diff changeset
191 -- Listener factory
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
192 function new_listener(stream)
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
193 local conn_listener = {};
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
194
54
1a2a3d598254 verse: Take advantage of server.lua's new onconnect callback for a more robust "connected" event
Matthew Wild <mwild1@gmail.com>
parents: 53
diff changeset
195 function conn_listener.onconnect(conn)
1a2a3d598254 verse: Take advantage of server.lua's new onconnect callback for a more robust "connected" event
Matthew Wild <mwild1@gmail.com>
parents: 53
diff changeset
196 stream.connected = true;
1a2a3d598254 verse: Take advantage of server.lua's new onconnect callback for a more robust "connected" event
Matthew Wild <mwild1@gmail.com>
parents: 53
diff changeset
197 stream:event("connected");
1a2a3d598254 verse: Take advantage of server.lua's new onconnect callback for a more robust "connected" event
Matthew Wild <mwild1@gmail.com>
parents: 53
diff changeset
198 end
1a2a3d598254 verse: Take advantage of server.lua's new onconnect callback for a more robust "connected" event
Matthew Wild <mwild1@gmail.com>
parents: 53
diff changeset
199
20
972066e06f4c verse: Update for new server connection API
Matthew Wild <mwild1@gmail.com>
parents: 17
diff changeset
200 function conn_listener.onincoming(conn, data)
54
1a2a3d598254 verse: Take advantage of server.lua's new onconnect callback for a more robust "connected" event
Matthew Wild <mwild1@gmail.com>
parents: 53
diff changeset
201 stream:event("incoming-raw", data);
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 end
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203
20
972066e06f4c verse: Update for new server connection API
Matthew Wild <mwild1@gmail.com>
parents: 17
diff changeset
204 function conn_listener.ondisconnect(conn, err)
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205 stream.connected = false;
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 stream:event("disconnected", { reason = err });
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 end
55
163beb198646 verse: Add "drained" event to signal when send buffer is empty (new server.lua feature)
Matthew Wild <mwild1@gmail.com>
parents: 54
diff changeset
208
163beb198646 verse: Add "drained" event to signal when send buffer is empty (new server.lua feature)
Matthew Wild <mwild1@gmail.com>
parents: 54
diff changeset
209 function conn_listener.ondrain(conn)
163beb198646 verse: Add "drained" event to signal when send buffer is empty (new server.lua feature)
Matthew Wild <mwild1@gmail.com>
parents: 54
diff changeset
210 stream:event("drained");
163beb198646 verse: Add "drained" event to signal when send buffer is empty (new server.lua feature)
Matthew Wild <mwild1@gmail.com>
parents: 54
diff changeset
211 end
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
212
60
1f47ddab3499 verse: Fire "status" event for connection status changes (notably SSL handshake complete)
Matthew Wild <mwild1@gmail.com>
parents: 59
diff changeset
213 function conn_listener.onstatus(conn, new_status)
1f47ddab3499 verse: Fire "status" event for connection status changes (notably SSL handshake complete)
Matthew Wild <mwild1@gmail.com>
parents: 59
diff changeset
214 stream:event("status", new_status);
1f47ddab3499 verse: Fire "status" event for connection status changes (notably SSL handshake complete)
Matthew Wild <mwild1@gmail.com>
parents: 59
diff changeset
215 end
1f47ddab3499 verse: Fire "status" event for connection status changes (notably SSL handshake complete)
Matthew Wild <mwild1@gmail.com>
parents: 59
diff changeset
216
0
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
217 return conn_listener;
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
218 end
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
219
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
220
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
221 local log = require "util.logger".init("verse");
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
222
caf260adc453 Beginning of new verse
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
223 return verse;