clix/message.lua

Thu, 07 Jan 2010 02:08:50 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 07 Jan 2010 02:08:50 +0000
changeset 9
c1d591488695
parent 0
ae83411a89c9
permissions
-rw-r--r--

clix.message: Add -i/--interactive to allow piping stdin over XMPP (like sendxmpp)

short_opts.i = "interactive";

return function (opts, arg)
	if (#arg == 0 or opts.help) and not opts.interactive then
		return 0;
	end
	local function on_connect(conn)
		local function send_message(_, text)
			conn:send(verse.message({ to = opts.to, type = opts.type or "chat" }):body(text));
		end
		if opts.interactive then
			-- Fake socket object around stdin
			local stdin = {
				getfd = function () return 0; end;
				dirty = function (self) return false; end;
				settimeout = function () end;
				send = function (_, d) return #d, 0; end;
				close = function () end;
				receive = function (_, patt)
					local data = io.stdin:read(patt);
					io.write(data, patt == "*l" and "\n" or "");
					return data;
				end
			};
			stdin = require "net.server".wrapclient(stdin, "stdin", 0, { onincoming = send_message, ondisconnect = function () end }, "*l");
		else
			send_message(nil, table.concat(arg, " "));
			conn:close();
		end
	end
	clix_connect(opts, on_connect);
end

mercurial