Bestimmtes Signal blockieren bzw. überscheiben

Alles rund um die Programmierung mit Qt
Antworten
Nailgun
Beiträge: 22
Registriert: 3. März 2009 11:59

Bestimmtes Signal blockieren bzw. überscheiben

Beitrag von Nailgun »

Hi Leute

Ich hab leider zu meinem Thema nichts direktes gefunden, also frag ich einfach mal.

Ist es möglich ein bestimmtes Signal zu blockieren bzw. zu überschreiben?

Auf was ich hinaus will:
Ich hab mir eine Klasse geschrieben die von QTcpSocket erbt. Wenn jetzt diese Klasse benutzt wird, kann ja auf das connected() Signal verbunden werden. Dieses möchte ich verhindern. QObject bietet ja blockSingals(bool) aber dadruch werden ja alle Signals blockiert.

Sobald sich ein QTcpSocket auf einen anderen Socket erfolgreich verbunden hat wird ja connected() ausgelöst, ich möchte aber erst eine erfolgreiche Verbindung singalisieren wenn ein Handshake erfolgreich war.
Ist das irgendwie möglich. Oder gibts was freiens im Netz wo ich das nachlesen kann?

Vielen Danke!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Bestimmtes Signal blockieren bzw. überscheiben

Beitrag von franzf »

Nailgun hat geschrieben:Sobald sich ein QTcpSocket auf einen anderen Socket erfolgreich verbunden hat wird ja connected() ausgelöst, ich möchte aber erst eine erfolgreiche Verbindung singalisieren wenn ein Handshake erfolgreich war.
Auf welchen "Handshake" willst du denn warten?
Der 3-Wege-Handshake dient ja eben genau dafür, dass sicher gestellt wird, dass die Connection erfolgreich war. Oder wird bei dir connected() schon emittiert, obwohl der Handshake noch gar nicht erfolgreiche war?
Nailgun
Beiträge: 22
Registriert: 3. März 2009 11:59

Beitrag von Nailgun »

@franzf

Ich möchte beim herstellen der Verbindung bzw kurz nachdem die Verbindung steht ein paar Daten mitschicken auf die der Server dann antwortet und die Verbindung zu lässt oder nicht.

also so in der Art:
Socket verbindet sich zu Server -> Socket übermittelt Daten -> Server wertet die Daten aus -> Server erlaubt Verbindung oder nicht

und erst wenn der Server die Verbindung erlaubt sollte ein connected() gefeuert werden. mit einem eigenen Signal is das ja kein Problem, aber man kann trotzdem noch auf das connected() vom tcpsocket verbinden, was ich hier nicht erlauben möchte.

gibts da nen weg?

Vielen Dank
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Das connect Signal kommt eigentlich vom TCP/IPStack,und zwar wenn der sein "TCP-Handschake" gemacht hat.
Das ding aubzufangen ist ja kein muss .... aber fuer einige Anwendungen isses schon ne intressante Info.

Bevor du ueberhaupt nen eigenen Handschake ueber TCP/IP machen kannst, ist es es natuerlich erforderlich, dass das TCP protokoll steht. dieses Signal zu unterdruecken zu wollen, ist eher Bloedsinn !

Es hindert dich aber keiner, nen eigenen Socket zu schreiben, was intern nen TCP Socket verwendet, die signale von dem wrapt, den Handschake intern auch abwickelt, und dann ein eigenes Ready signal rausschickt.

Wichtig ist halt nur, dass deine weiteren klassen keinen QTCPSocket erwarten sondern mit nem QAbstractSocket oder deiner neuen Klasse direkt klarkommen ...

Ciao ...
Nailgun
Beiträge: 22
Registriert: 3. März 2009 11:59

Beitrag von Nailgun »

@RHBaum
jetzt kommts langsam in die richtige Richtung.
Ich will natürlich nicht dass connect signal komplett unterdrücken, vielleicht hab ich mich da auch falsch ausgedrückt. ich benötige das signal ja auch für meine klasse um zu wissen wann ich meinen eigenen handshake machen kann.
aber wenn jetzt jemand diese klasse verwendet kann er ja auch das connected() des qtcpsocket abfangen, da meine klasse von qtcpsocket erbt. und genau das möchte ich verhindern. wenn mein handshake erfolgreich war will ich mein eigenes signal feuern.
oder meint ihr dass meine klasse nicht von qtcpsocket erben soll, sondern dass ich ihn intern verwende?
Antworten