TCP Bibliothek für C++

Alles, was nicht in die anderen Kategorien passt.
Antworten
Nachricht
Autor
jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

TCP Bibliothek für C++

#1 Beitrag von jonathanp »

Ich habe schnell eine TCP Bibliothek für C++ geschrieben: https://github.com/jonathanp0/zusi3tcp" target="_blank. Es ist nur einfach, aber vielleicht ist es nützlich für jemanden.

Ich werde Johannes kopieren, weil der Status ähnlich oder schlechter als seine Rust-Bibliothek ist :). Diese Bibliothek war auch nützlich für mich, das Protokoll zu verstehen.
Sie enthaelt momentan wenig Protokollspezifisches, neben dem generischen Senden und Empfangen von Knoten und Attributen ist nur HELLO und NEEDED_DATA implementiert.
06.03 ClientConnection.sendInput() für INPUT-Befehle hinzugefügt
15.03 Visual Studio Projekt hinzugefügt
26.03 Zusi 3 Server Emulator hinzugefügt
Zuletzt geändert von jonathanp am 01.04.2016 19:39:23, insgesamt 3-mal geändert.
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

Re: TCP Bibliothek für C++

#2 Beitrag von Roland Ziegler »

Mit C++11-Elementen, nett. :)
zusi::Socket - Abstract interface for a network communications class
C++ kennt ja keine echten Interfaces wie Java oder C#. In C++ ist es immer eine Basisklasse, und ein Basisobjekt wird mit instantiiert. Daher sollte auch eine "Interface"-Klasse immer einen virtuellen Destruktor haben, sonst gibt es ggf. Memory-Leaks.

jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

Re: TCP Bibliothek für C++

#3 Beitrag von jonathanp »

Vielen Dank für den Code-Review ;) In den letzten Monaten habe ich nur Java geschrieben, also nun vergesse ich Dinge.

Ich habe heute Unterstützung für INPUT-Befehle hinzugefügt, und Ersuchen für DATA OPERATION und DATA_PROG Nachrichten.
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Johannes B
Beiträge: 10
Registriert: 06.03.2015 14:21:40

Re: TCP Bibliothek für C++

#4 Beitrag von Johannes B »

Danke erstmal für die Bibliothek! Soweit läufts ja recht gut. Nun würde ich gern versuchen die empfangenen Daten in einer Variable zu speichern. Wie könnte man das anstelle dieser Ausgabe tun?

Code: Alles auswählen

msg.write(debug_socket); //Print data to the console
P.S. bin C++ Laie, würde mich aber gerne einarbeiten. Danke!
Zuletzt geändert von Johannes B am 21.03.2016 17:03:02, insgesamt 1-mal geändert.

Benutzeravatar
F. Schn.
Beiträge: 6629
Registriert: 24.10.2011 18:58:26

Re: TCP Bibliothek für C++

#5 Beitrag von F. Schn. »

Was möchtest du denn machen? Ich denke, wenn man gerade erst anfängt, ist C++ vielleicht nicht die idealste Sprache. (Gab vor Jahren mal eine Diskussion dazu in diesem Fourm...) Außerdem ist laut obiger Aussage die Bibliothek ja noch unvollständig, so dass ich dir vermutlich eher zu .Net raten würde: http://forum.zusi.de/viewtopic.php?f=73&t=12762" target="_blank
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Johannes B
Beiträge: 10
Registriert: 06.03.2015 14:21:40

Re: TCP Bibliothek für C++

#6 Beitrag von Johannes B »

Ich würde gern die TCP Daten an einen Seriellen Port schicken. Da gab's mal was für Zusi 2, das ich bei meinem Fahrpult zum Laufen gebracht habe. Ich schau mir mal die .NET Projekte an. Dankeschön!

jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

Re: TCP Bibliothek für C++

#7 Beitrag von jonathanp »

Hey,

Das "dump_ftd" Sample zeigt, wie man Daten extrahieren kann: https://github.com/jonathanp0/zusi3tcp/ ... mp_ftd.cpp" target="_blank

Mit kleinen Änderungen:

Code: Alles auswählen

bool SendToSerial(uint16_t id, float value);

void sendVariables(const zusi::Node& msg)
{
	if (msg.getId() == zusi::MsgType_Fahrpult)
	{
		for (const zusi::Node* node : msg.nodes)
		{
			if (node->getId() == zusi::Cmd_DATA_FTD)
			{
				for (const zusi::Attribute* att : node->attributes)
				{
					float value = *(reinterpret_cast<float*>(att->data));
					SendToSerial(att->getId(), value);
				}
			}
		}
	}
}
Für seriellen Port könntest Du möglicherweise diese Bibliothek verwenden: https://github.com/wjwwood/serial" target="_blank
Serial Port Kommunikation mit dem win32api ist keine gute Aufgabe für einen Anfänger :dead

Gruß,
Jonathan
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Andreas Karg
Beiträge: 4718
Registriert: 28.04.2002 12:56:00
Kontaktdaten:

Re: TCP Bibliothek für C++

#8 Beitrag von Andreas Karg »

Oder auch:

Code: Alles auswählen

bool SendToSerial(uint16_t id, float value);

void sendVariables(const zusi::Node& msg)
{
   if (msg.getId() != zusi::MsgType_Fahrpult)
      return;
 
   for (const zusi::Node* node : msg.nodes)
   {
      if (node->getId() != zusi::Cmd_DATA_FTD)
         continue;
    
      for (const zusi::Attribute* att : node->attributes)
      {
         float value = *(reinterpret_cast<float*>(att->data));
         SendToSerial(att->getId(), value);
      }    
   } 
}
Um mal ein bisschen unnötige Verschachtelungstiefe wegzubekommen. ;-)
Zuletzt geändert von Andreas Karg am 21.03.2016 23:09:54, insgesamt 1-mal geändert.

Benutzeravatar
Roland Ziegler
Beiträge: 5508
Registriert: 04.11.2001 22:09:26
Wohnort: 32U 0294406 5629020
Kontaktdaten:

Re: TCP Bibliothek für C++

#9 Beitrag von Roland Ziegler »

jonathanp hat geschrieben:Serial Port Kommunikation mit dem win32api ist keine gute Aufgabe für einen Anfänger
In der Tat. C#/.Net ist da deutlich zugänglicher.
https://msdn.microsoft.com/en-us/librar ... 10%29.aspx" target="_blank

Johannes B
Beiträge: 10
Registriert: 06.03.2015 14:21:40

Re: TCP Bibliothek für C++

#10 Beitrag von Johannes B »

Vielen Dank für die Code Beispiele! Vielleicht bekomme ich es mal zum Laufen.
Roland hat Recht, C# ist schon zugänglicher für Anfänger. Mit dem Zusi 3 / 2 Converter läuft die Ausgabe bei mir vorerst ganz gut.
http://forum.zusi.de/viewtopic.php?f=73&t=12751

jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

Re: TCP Bibliothek für C++

#11 Beitrag von jonathanp »

Das stimmt, dass C++ nicht einfach ist.
Ich sehe die Verwendungen für C ++ mit Zusi als:
  1. Integration mit bereits geschriebenen C ++ Code
  2. Für Software, die (nur)C Bibliotheken verwenden muss.
  3. Portabilität auf andere(nicht Windows) Betriebssystemen
Personlich brauche ich 1 und 2, und vielleicht in die Zukunft 3.

Es ist ein wenig kommisch, dass der beliebteste Client für Zusi 3 der Zusi 2-Proxy ist. ;) Jetzt wollt ihr auch zusätzliche Variablen für Zusi 3 Funktionen :whatever
Zuletzt geändert von jonathanp am 24.03.2016 11:04:47, insgesamt 4-mal geändert.
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Benutzeravatar
Arne aus dem Norden
Beiträge: 721
Registriert: 25.12.2011 14:28:21
Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)

Re: TCP Bibliothek für C++

#12 Beitrag von Arne aus dem Norden »

jonathanp hat geschrieben:Es ist ein wenig kommisch, dass der beliebteste Client für Zusi 3 der Zusi 2-Proxy ist. ;) Jetzt wollt ihr auch zusätzliche Variablen für Zusi 3 Funktionen :whatever
"ihr" bin ja offensichtlich ich... :D
Ich wills mal so formulieren: nicht jeder, der gerne Pult bastelt ist auch Experte in irgendeinem C.
Ich als PHP Laie habs mit dem Zusi 2 Protokoll ja fast noch alleine hinbekommen, aber beim Zusi 3 Protokoll hab ich inwischen fachkundige Unterstützung von mehreren Leuten die weit besser sind als ich und trotzdem klappts bislang nicht mit dem Protokoll der "3" und dem Arduino...
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/

jonathanp
Beiträge: 284
Registriert: 01.06.2015 14:11:25
Aktuelle Projekte: http://www.zusidatenbank.de/
Wohnort: BW Schöneweide

Re: TCP Bibliothek für C++

#13 Beitrag von jonathanp »

:O Ich meinte, "sie" zu schreiben.

Rekursion ist für geschachtelte Datenstrukturen (wie Zusi 3 TCP) erforderlich und es ist bekannt, daß Rekursion einen schwieriges Begriff ist. In einem Vorstellungsgespräch für Softwareentwickler muss man normalerweise ihn demonstrieren.
Zuletzt geändert von jonathanp am 24.03.2016 12:52:37, insgesamt 1-mal geändert.
Autor - Zusi 3 C++ Client, zusidatenbank.de - Das Zusi3 Addon-Datenbank

Antworten