Seite 1 von 1
#1 TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: Do 28. Feb 2013, 21:00
von DOMIQ
In version 1.8 we will add full support for asynchronous TCP and UDP sockets as well as Timers.
This will enable us to rewrite a lot of internal software in a much more efficient way, but will also make it possible to expose full networking stack in the Logic. You will be able to code things like:
Code: Alles auswählen
local srv = tcp.socket()
srv:bind(1234)
srv:mode('line')
srv:on('connect',function(skt,addr,port)
print('Connection from '..addr..':'..port)
skt:on('line',function(data)
print('Received: '..data)
skt:send('You wrote: ' .. data)
end
skt:on('error',function(err)
print('ERROR: '..error)
end
skt:on('close',function()
print('CLOSED')
end
skt:send('Type something!')
end
srv:listen()
Other example is for timers, that will be independent from "DELAY" and "TIMER" prefixes and way more efficient:
Code: Alles auswählen
local t = timer.periodic(1,function()
print('Another second')
end)
I hope you like it and it will enable you to do things we didn't ever though about!

#2 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: Do 28. Feb 2013, 21:47
von Beleuchtfix
will you find a way to delay complete segments of code, like a wait statement?
Code: Alles auswählen
wait(10s)
do this
wait(10s) --wait another 10 seconds
do that
regards Florian
#3 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: Do 28. Feb 2013, 22:38
von DOMIQ
You will be able to do something like that:
Code: Alles auswählen
local s = timer.delay(10,function()
print('This is delayed 10 seconds')
s = timer.delay(10,function()
print('This is delayed 20 seconds')
end)
end)
Such code is called continuation-style programming and is very resource efficient. We will write some libraries to make that much easier to use, like:
Code: Alles auswählen
local t = schedule()
t:add(10,function() print('This is delayed 10 seconds') end)
t:after(10,function() print('This is delayed 20 seconds') end)
t:start()
#4 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: Mo 13. Jan 2014, 15:58
von koboldo
Code: Alles auswählen
local srv = tcp.socket()
srv:bind(1234)
srv:mode('line')
srv:on('connect',function(skt,addr,port)
print('Connection from '..addr..':'..port)
skt:on('line',function(data)
print('Received: '..data)
skt:send('You wrote: ' .. data)
end
skt:on('error',function(err)
print('ERROR: '..error)
end
skt:on('close',function()
print('CLOSED')
end
skt:send('Type something!')
end
srv:listen()
Is it possible with this to send a text or string to the base with tcp and then use the string as variable ?
I tried your code to test and play with this but I get an error:
Code: Alles auswählen
ERROR: [string "local srv = tcp.socket()..."]:6: unexpected symbol near ')'
Or am I totally wrong ?
Could you give me an example ?
#5 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: Mo 13. Jan 2014, 17:04
von unsinkbar2
... da sind ein paar Klammern auf der Strecke geblieben. Hinter den "end"s ...
So sollte es gehen:
Code: Alles auswählen
local srv = tcp.socket()
srv:bind(1234)
srv:mode('line')
srv:on('connect',function(skt,addr,port)
print('Connection from '..addr..':'..port)
skt:on('line',function(data)
print('Received: '..data)
skt:send('You wrote: ' .. data)
end)
skt:on('error',function(err)
print('ERROR: '..error)
end)
skt:on('close',function()
print('CLOSED')
end)
skt:send('Type something!')
end)
srv:listen()
#6 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: Mo 13. Jan 2014, 19:51
von koboldo
Danke schon mal :thumbup:
Wenn ich jetzt spaßeshalber mal ein TCP Packet auf das Base jage, passiert aber nichts, es wird kein Fehler angezeigt und es wird mit dem Printbefehl im Code auch nichts ausgegeben....
Was mache ich falsch ?
#7 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: So 26. Jan 2014, 17:55
von unsinkbar2
[j]Ich habe es auch versucht, leider ohne Erfolg. Die "Connection"-Meldung bekomme ich noch, danach nichts mehr. Den Port habe ich dazu auf 8081 eingestellt.
Ein weiteres Problem ist, dass der TCP-Listener nicht zerstört wird, wenn man den Quellcode neu in das Domiq-Modul speichert. Dann kommt auch die Connection-Meldung nicht mehr. Wahrscheinlich läuft der Thread des Listeners weiter.
Da hilft nur noch Neustarten. Keine Ahnung ob es dann mehrere Listener gibt ... Fehlermeldungen werden nicht ausgeben. Ein log-File wäre da sehr hilfreich.
Gibt es aktuelle Lua-Dokumentationen von Domiq mit funktionierenden Beispielen? Ich bin es langsam Leid im Trüben zu fischen und auf ein paar Codebrocken in Foren angewiesen zu sein.
Was passiert beim Speichern des LUA-Scripts?!??! Wäre auch ein Fall für eine Dokumentation. Eigentlich bin ich sehr angetan von den Möglichkeiten die das Domiq-Modul bietet aber leider kann ich die Funktionalitäten nicht annähernd ausschöpfen, weil der Hersteller nicht richtig dokumentiert.[/j]
#8 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: So 26. Jan 2014, 19:52
von Beleuchtfix
Ich kann das nur "gefühlt", die technischen Hintergründe kenne ich nicht.
Wenn du user.lua über die Speichern Taste abspeicherst, wird die komplette Datei neu initialisiert. Variablen werden z.B. neu initialisiert oder gesetzt. Funktionen werden nicht automatisch aufgerufen.
Viel Erfolg
Florian, der auch gerne eine bessere Lua- und Base Dokumentation hätte
#9 RE: TCP/UDP/Timers in Logic in upcoming version 1.8
Verfasst: So 26. Jan 2014, 20:28
von unsinkbar2
Das kann ich bestätigen. Neue Threads, wie z.B. ein TCP-Socket-Listener scheinen aber erhalten zu bleiben. So zumindest meine Erfahrung. So etwas vor dem neuen Speichern aufzuräumen ist nicht trivial....