util.httpstream: A little refactoring of the coroutine control flow.
authorWaqas Hussain <waqas20@gmail.com>
Sat, 06 Nov 2010 01:08:30 +0500
changeset 3565 e2cc09e83a3e
parent 3564 90f4e6dc1c11
child 3566 75d287daad16
util.httpstream: A little refactoring of the coroutine control flow.
util/httpstream.lua
--- a/util/httpstream.lua	Fri Nov 05 03:07:36 2010 +0500
+++ b/util/httpstream.lua	Sat Nov 06 01:08:30 2010 +0500
@@ -7,7 +7,8 @@
 
 module("httpstream")
 
-local function parser(data, success_cb, parser_type)
+local function parser(success_cb, parser_type)
+	local data = coroutine.yield();
 	local function readline()
 		local pos = data:find("\r\n", nil, true);
 		while not pos do
@@ -94,14 +95,15 @@
 
 function new(success_cb, error_cb, parser_type)
 	local co = coroutine.create(parser);
+	coroutine.resume(co, success_cb, parser_type)
 	return {
 		feed = function(self, data)
 			if not data then
-				if parser_type == "client" then coroutine.resume(co, "", success_cb, parser_type); end
+				if parser_type == "client" then coroutine.resume(co, ""); end
 				co = deadroutine;
 				return error_cb();
 			end
-			local success, result = coroutine.resume(co, data, success_cb, parser_type);
+			local success, result = coroutine.resume(co, data);
 			if result then
 				co = deadroutine;
 				return error_cb(result);