Browse Source

add fifo to fit new sdk behavior

devsaurus 8 years ago
parent
commit
ff3926175c
1 changed files with 35 additions and 17 deletions
  1. 35 17
      lua_examples/telnet2.lua

+ 35 - 17
lua_examples/telnet2.lua

@@ -1,17 +1,35 @@
-    -- a simple telnet server
-    s=net.createServer(net.TCP,180) 
-    s:listen(2323,function(c) 
-       function s_output(str) 
-          if(c~=nil) 
-             then c:send(str) 
-          end 
-       end 
-       node.output(s_output, 0)   -- re-direct output to function s_ouput.
-       c:on("receive",function(c,l) 
-          node.input(l)           -- works like pcall(loadstring(l)) but support multiple separate line
-       end) 
-       c:on("disconnection",function(c) 
-          node.output(nil)        -- un-regist the redirect output function, output goes to serial
-       end) 
-       print("Welcome to NodeMcu world.")
-    end)
+-- a simple telnet server
+
+telnet_srv = net.createServer(net.TCP, 180)
+telnet_srv:listen(2323, function(socket)
+    local fifo = {}
+    local fifo_drained = true
+
+    local function sender(c)
+        if #fifo > 0 then
+            c:send(table.remove(fifo, 1))
+        else
+            fifo_drained = true
+        end
+    end
+
+    local function s_output(str)
+        table.insert(fifo, str)
+        if socket ~= nil and fifo_drained then
+            fifo_drained = false
+            sender(socket)
+        end
+    end
+
+    node.output(s_output, 0)   -- re-direct output to function s_ouput.
+
+    socket:on("receive", function(c, l)
+        node.input(l)           -- works like pcall(loadstring(l)) but support multiple separate line
+    end)
+    socket:on("disconnection", function(c)
+        node.output(nil)        -- un-regist the redirect output function, output goes to serial
+    end)
+    socket:on("sent", sender)
+
+    print("Welcome to NodeMcu world.")
+end)