Willkommen auf unserer neuen Forenplattform für das Bus-Profi Forum

Neue Felder für die persönlichen Daten
Man kann jetzt seine öffentlich einsehbare Daten genau bestimmen. Details findet ihr in in diesem Beitrag.

Durch die neue Forensoftware und die Portierung der Daten konnten die Passwörter aus dem alten Forum nicht übernommen werden, bitte lassen Sie sich ein neues Passwort über die Passwort vergessen Funktion zusenden. Sollte es zu Problemen kommen kontaktieren Sie das Bus-Profi Team per E-Mail.

TCP/UDP/Timers in Logic in upcoming version 1.8

Hard- und Softwarefragen rund Domiq-Module fürs LCN-System

Themenersteller
DOMIQ
Fleißiges Mitglied
Fleißiges Mitglied
Beiträge: 252
Registriert: Sa 25. Apr 2009, 11:16
Kontaktdaten:

#1 TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon DOMIQ » Do 28. Feb 2013, 21:00

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! :-)

Benutzeravatar

Beleuchtfix
Administrator
Administrator
Beiträge: 5283
Registriert: Mi 10. Jan 2007, 18:49
Hat sich bedankt: 3 Mal
Danksagung erhalten: 15 Mal
Kontaktdaten:

#2 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon Beleuchtfix » Do 28. Feb 2013, 21:47

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


Themenersteller
DOMIQ
Fleißiges Mitglied
Fleißiges Mitglied
Beiträge: 252
Registriert: Sa 25. Apr 2009, 11:16
Kontaktdaten:

#3 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon DOMIQ » Do 28. Feb 2013, 22:38

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()


koboldo
Fleißiges Mitglied
Fleißiges Mitglied
Beiträge: 324
Registriert: Do 16. Feb 2012, 15:50
Hat sich bedankt: 7 Mal

#4 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon koboldo » Mo 13. Jan 2014, 15:58

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 ?


unsinkbar2
Neues Mitglied
Neues Mitglied
Beiträge: 17
Registriert: Di 28. Mai 2013, 10:13

#5 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon unsinkbar2 » Mo 13. Jan 2014, 17:04

... 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()


koboldo
Fleißiges Mitglied
Fleißiges Mitglied
Beiträge: 324
Registriert: Do 16. Feb 2012, 15:50
Hat sich bedankt: 7 Mal

#6 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon koboldo » Mo 13. Jan 2014, 19:51

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 ?


unsinkbar2
Neues Mitglied
Neues Mitglied
Beiträge: 17
Registriert: Di 28. Mai 2013, 10:13

#7 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon unsinkbar2 » So 26. Jan 2014, 17:55

[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]

Benutzeravatar

Beleuchtfix
Administrator
Administrator
Beiträge: 5283
Registriert: Mi 10. Jan 2007, 18:49
Hat sich bedankt: 3 Mal
Danksagung erhalten: 15 Mal
Kontaktdaten:

#8 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon Beleuchtfix » So 26. Jan 2014, 19:52

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


unsinkbar2
Neues Mitglied
Neues Mitglied
Beiträge: 17
Registriert: Di 28. Mai 2013, 10:13

#9 RE: TCP/UDP/Timers in Logic in upcoming version 1.8

Beitragvon unsinkbar2 » So 26. Jan 2014, 20:28

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....


Zurück zu „Domiq-Module - DOMIQ Sp. z o.o.“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste