SerialLib Klasse für VO 2.8

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by g.bunzel@domonet.de »

Hallo Franz,
zuerst habe ich habe den Thread-Kram rausgeschmissen und auf Timer umgestellt - hat nicht funktioniert.
Dann alle Varianten für das Senden getestet (:SendLine(), SendLineTo(), SendRaw(), ...). Die Rückmeldung auch mit dem Debugger zu den Methoden war immer 'Successful' - im EchoServer ist aber immer nur die erste Zeile angekommen. Auch mit dem Debugger nix gefunden.
Der VO-EchoClient erstellt für jede Nachricht ein neues Objekt oSocket, sendet dann mit :SendLineTo() und zerstört das Objekt wieder mit :Axit(). Anscheinend funktioniert der EchoServer nur so richtig.
Ich habe dann einen anderen EchoServer gesucht. Dort sind dann alle Nachrichten mit :SendLine() - und auch mit allen anderen Send-Methoden sofort angekommen. Auch eine #ENDE-Nachricht wird noch gesendet.
Das ist der SocketTest, mit dem ich getestet habe: sockettest.sourceforge.net/
Der SocketTest antwortet leider nicht autom.mit den gesendeten Nachrichten. Alle mit 'Send' gesendeten Texte sind aber im VO-Fenster angekommen. Das funktioniert also auch mit einem Timer und ist einfacher und übersichtlicher als mit einem Thread.
Das Problem liegt also wohl nicht an dem :SendTo() in Deiner Anwendung.

HTH

Gerhard Bunzel
Attachments
SocketTest.jpg
SocketTest.jpg (59.4 KiB) Viewed 297 times
lagraf
Posts: 422
Joined: Thu Jan 18, 2018 9:03 am

SerialLib Klasse für VO 2.8

Post by lagraf »

Hallo Gerhard,
danke für deine Bemühungen! Dass der Echo Client immer wieder einen neuen Socket öffnet habe ich in Msg #22844 auch bemerkt und geschrieben.

Inzwischen habe ich den Echo Server und den Echo Client so umgebaut, dass diese die gewünschte Kommunikation bidirektional abwickeln. Wegen dem Thread ist einiges an Absicherungen und Abfragen notwendig, damit dies vernünftig funktioniert. Ich schau mir mal an wie es mit Timer funktioniert, beim Kunden wird irgendwann mal auf eine neue Hardware umgestellt, vielleicht kann ich dann das Prog dabei mit umstellen.

Ablauf für einen Test:
- CrdServer mit Button Start aktivieren
- CrdClient mit Button Start Kommunikation aktivieren
- Im CrdServer mit den 3 Buttons Eingang, Ausgang, Nacht das Einstecken von Karten simulieren
LFSTest.zip
(32.6 KiB) Downloaded 54 times
lagraf
Posts: 422
Joined: Thu Jan 18, 2018 9:03 am

SerialLib Klasse für VO 2.8

Post by lagraf »

Hab gesehen, dass die CrdClient Antworten WITHDRAW und EJECT beim CrdServer wieder nicht ankommen. Ist mir aber jetzt egal, der unbezahlte Aufwand dafür wird mir nun zu groß.
Danke für euren Input!

PS Gerhard: Wie würde das mit dem Timer funktionieren - Wenn der Timer anspringt, Socket öffnen, schauen ob eine Nachricht vorliegt, Socket schließen? Oder welchen Ablauf hattest du im Timer?
g.bunzel@domonet.de
Posts: 97
Joined: Tue Mar 01, 2016 11:50 am
Location: Germany

SerialLib Klasse für VO 2.8

Post by g.bunzel@domonet.de »

Hab die Test-App schon gelöscht. Das mit dem Timer ist aber recht einfach.

Wenn die Connection gestartet wird, auch den Timer starten. Vorher kann es ja noch keine Nachrichten geben:
SetTimer (SELF:handle (), 2000, 500, NULL_PTR)

Im Dispatcher des Fenster dann auf die Timernachricht warten und oSocket so abarbeiten, wie im Thread:
METHOD Dispatch (oEvent) CLASS MyWindow
LOCAL oEvt AS @@Event

oEvt := oEvent

DO CASE
CASE oEvt:message == WM_Timer
DO CASE
CASE oEvt:wParam == 2000 // ID des Timers
cLine := SELF:_oSocket:GetLine()
........

ENDCASE
ENDCASE

RETURN SUPER:Dispatch (oEvt)

Wenn die Connection beendet wird auch den Timer beenden:
KillTimer (SELF:handle (), 2000)

HTH
Gerhard Bunzel
User avatar
softdevo@tiscali.it
Posts: 189
Joined: Wed Sep 30, 2015 1:30 pm

SerialLib Klasse für VO 2.8

Post by softdevo@tiscali.it »

I used this code, I hope it still works

Danilo Giuliani
Attachments
Serial.zip
(8.26 KiB) Downloaded 62 times
lagraf
Posts: 422
Joined: Thu Jan 18, 2018 9:03 am

SerialLib Klasse für VO 2.8

Post by lagraf »

Hi Danilo,
thank you for the code, but I already got it from Wolfgang.
Franz
Post Reply