clix/raw.lua

Thu, 07 Jan 2010 22:05:25 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 07 Jan 2010 22:05:25 +0000
changeset 23
c5f04bdc7c64
parent 19
3a0a156e0a79
child 27
5b58c002d6ad
permissions
-rw-r--r--

clix, clix.raw: Move 'Connected as' to clix_connect(), and suppress on -q/--quiet

short_opts.i = "interactive";
short_opts.e = "echo";

return function (opts, args)
	local function on_connect(conn)
		conn:hook("incoming-raw", print);
		if opts.interactive or opts.stdin then
			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);
					if opts.echo then
						io.write(data, patt == "*l" and "\n" or "");
					end
					return data;
				end
			};
			local function on_incoming(stdin, data)
				conn:send(data);
				if not opts.interactive then
					conn:close();
				end
			end
			stdin = require "net.server".wrapclient(stdin, "stdin", 0, {
				onincoming = on_incoming, ondisconnect = function () end
				}, "*l");
		else
			conn:send(table.concat(arg, " "));
			conn:close();
		end

	end
	return clix_connect(opts, on_connect);
end

mercurial