AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Chat Server und Client mit Indy
Thema durchsuchen
Ansicht
Themen-Optionen

Chat Server und Client mit Indy

Ein Thema von julien · begonnen am 25. Jan 2007 · letzter Beitrag vom 25. Jan 2007
Antwort Antwort
julien

Registriert seit: 25. Jan 2007
8 Beiträge
 
Delphi 7 Personal
 
#1

Chat Server und Client mit Indy

  Alt 25. Jan 2007, 11:49
Hallo!
Ich bin mit meinen Chat Client und Serverprogramm eigendlich schon ganz schön weit. Ich benutze dafür einige Indy-Komponenten. Es wird das Client-Server-Client-Prinzip verwendet. Kann mir bitte jemand eine optimale Lösung für das Übertragen der Benutzerliste geben?
Wie kann z.B. eine komplette String List, die die Benutzer enthält, an neue Clienten gesendet werden und dort die Benutzer in eine ListBox eingetragen werden?
Außerdem gibt es noch Probleme mit der Onlinestatusanzeige. Es soll in der Benutzer-ListBox der Clienten durch Farben angezeigt, welche Benutzer online (grün), welche Benutzer gerade etwas eingeben (blau) und welche Benutzer Abwesend sind (rot; kann am Clienten mit einer Checkbox eingestellt werden). Das funktioniert so weit nur in der ListBox gibts Probleme mit den Farben, da den jeweiligen Eintrag immer erst markiert werden muss, damit der Farbwert aktualisiert wird (liegt am Brush).
Außerdem muss ich noch ein PM-System integrieren aber dazu später mehr...

MfG julien
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#2

Re: Chat Server und Client mit Indy

  Alt 25. Jan 2007, 12:47
Antwort: XML für die Übertragung verwenden. (siehe Jabber)

mfg, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
julien

Registriert seit: 25. Jan 2007
8 Beiträge
 
Delphi 7 Personal
 
#3

Re: Chat Server und Client mit Indy

  Alt 25. Jan 2007, 13:26
Danke für den Tipp aber das hilft mir auch nicht weiter, da ich die Benutzerliste so gestaltet habe, dass den Clienten lediglich gemeldet wird, dass user x hinzugekommen ist bzw. user x gegangen ist. Ich übertrage doch nicht die ganze Benutzerliste, nur weil ein einziger Benutzer hinzugekommen ist oder gegangen ist . Habs ja hinbekommen... Aber nur noch zu der Sache mit der ListBox aber dafür mache ich einen anderen Thread auf.

MfG
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Chat Server und Client mit Indy

  Alt 25. Jan 2007, 15:05
also

Zitat:
Kann mir bitte jemand eine optimale Lösung für das Übertragen der Benutzerliste geben?
baue dir ein array of Tbenutzer und übertrage das per buffer übertragung mit sendbuffer

die abfolge geht dann so:

client: write-to-server "brauche benutzerliste"
client: warte auf benutzeranzahl+buffers
server: benutzerverwaltungsobjekt wird mit criticalsection.enter gelockt (damit bei user quit wärend die liste übertragen wird, es keinen fehler gibt wenn auf ein objekt zugegriffen wird, das nicht mehr da ist)
server: anzahl benutzer übertragen (integer)
client: empfängt benutzercount für schleife, die buffers empfängt
server: mit schleife alle benutzer per buffer übertragen (Tbenutzer)
client: schleife empfängt buffers der benutzer
server: benutzerverwaltungsobjekt wird mit criticalsection.leave ungelockt

client: neuaufbau der listbox
client: evtl refresh wegen farbgebung, falls das nicht korrekt funzt

Zitat:
Es soll in der Benutzer-ListBox der Clienten durch Farben angezeigt, welche Benutzer online (grün), welche Benutzer gerade etwas eingeben (blau) und welche Benutzer Abwesend sind
einfach die liste auf OwnerDrawFixed umstellen und in dem ereignis "OnDraw" alles selber zeichnen!
funzt definitiv (muss man nur richtig umsetzen)

Zitat:
Ich übertrage doch nicht die ganze Benutzerliste, nur weil ein einziger Benutzer hinzugekommen ist oder gegangen ist Wink. Habs ja hinbekommen... Aber nur noch zu der Sache mit der ListBox aber dafür mache ich einen anderen Thread auf.
durch die Tbenutzer arrays sind alle informationen der benutzer hinterlegt (schreibt gerade, ist away usw)
die benutzer arrays sind auf server und client in gleicher form enthalten (sonst würde man sie auch nicht über buffer senden und synchronisieren können)
auf der clientseite rennt ein thread in dem seiner execute procedure eine endlosschleife mit readln dauerhaft informationen vom server entgegennimmt und auf ein cmd entsprechend reagiert
kommt z.b. vom server "client quit <id>" dann kann der client das entsprechend auswerten das er z.b. auf das "quit" reagiert und dann im weiteren schritt die id nimmt und in der benutzerliste diese id eben löscht und die benutzer listbox wieder neu aufbaut.
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
julien

Registriert seit: 25. Jan 2007
8 Beiträge
 
Delphi 7 Personal
 
#5

Re: Chat Server und Client mit Indy

  Alt 25. Jan 2007, 15:24
Hi! Danke für deiene Antwort.
Ehm... Also ich hab das nicht ganz so gemacht aber so ähnlich
Ich habs so, dass sobald sich der Client auf dem Server einloggt, der Server die Benutzerliste erstmal vollständig sendet. Jede Aktion hat auf dem Server und auf den Clienten eine Bezeichnung (erster Buchstabe des gesendeten Strings vom Clienten und Server). Beispielsweise meldet sich ein Client beim Server mit ">Clientname" an und mit "<Clientname" wieder ab. Sobald ein Client sich eingeloggt hat, wird die Benutzerliste vom Server an diesen Clienten gesendet (mit "UClientname" in einer Schleife, bis alle Benutzernamen gesendet sind). Sobald ein Benutzer sich vom Server absendet, sendet der Server "EClientname" an alle Clients und dieser Benutzername wird aus der Benutzerliste entfernt. Wenn ein Client eine Nachricht abgesendet hat, sieht der String so aus: "BClientname: Nachricht". Der Status wird mit "OClientname" für Online, "AClientname" für Abwesend und "TClientname" dafür, dass ein Client gerade eine Nachricht eingibt. All das geht zuerst an den Server und wird dann an alle Clienten verteilt (außer PM's ("PClientname:Nachricht@Benutzer1@Benutzer2@... ").
Ich hoffe, das Prinzip ist soweit erstmal verstanden worden.

MfG julien
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz