![]() |
Re: Users online in einem Chat
Ok, dann versuch ichs nochmal.
Du musst unterscheiden können, ob es jetzt ein Text für das Memo oder etwas für die Liste ist. Also musst du vorne etwas an den Text hängen. Sobald der Server was sendet, so kannst du dem Text z.B. "MEMO" oder "LIST" voraussetzen. Sobald der Client die Daten erhält, so muss er diese ersten 4 Zeichen ansehen. Mit Copy kopierst du die raus, anschließend löschst du sie mit Delete. Ist die kopierte Zeichenkette "MEMO" so ist es ein Text und er geht ins Memo, wenn er "LIST" ist, dann musst du was mit den Daten anfangen, je nachdem wie du sie aneinanderhängst also wieder trennen. Ich hab hier leider kein Delphi, sonst würde ich dir auch den Code hinschreiben. Greetz alcaeus |
Re: Users online in einem Chat
Zitat:
Genauso mache ich es in meinem Chat auch. Definiere Konstanten und sende immer eine Konstante und einen Parameter. Bei mir gibt es zum Beispiel konstanten wie const MsgUser='*user:'; // Eingabe const MsgQuit='*quit:' // Jemand verlässt den chat usw... bin erst ganz am anfang, aber das Konzept sieht ungefähr so aus. Jetzt kombiniere ich die und sende z.B. MsgQuit+'Tubos'. Durch folgende Funktionen kann ich die Nachricht (msg) oder den parameter (par) herausfiltern:
Delphi-Quellcode:
(Nicht alle MSGs haben Parameter.)
function msg(s: string): string; // extrahiert die Nachricht aus dem empfangenen String
begin result:=copy(s,1,pos(':',s)); end; function par(s: string): string; // extrahiert den Parameter aus dem empfangenen String begin result:=copy(s,pos(':',s)+1,999); end; Wenn ich einen String bekomme, der in der Variablen x gespeichert wird mache ich folgendes:
Delphi-Quellcode:
Natürlich muss ich den Eintrag aus der Listbox mit den Usern noch entfernen, aber das ist nur zur Erklärung wie so ein Nachrichtensystem funktionieren kann.
if msg(x)=MsgQuit then memo1.lines.add(par(x) + ' verlässt den Chat.');
Hoffe das hat dir ein wenig geholfen und dich nicht noch mehr verwirrt :wink: |
Re: Users online in einem Chat
Beides :roll:
Wo muss ich das zeug hineinschreiben?? OnClientRead, OnClientConnect, OnClientDisconnect?? Heute hab isch einen RIISEN knopf :( Thx ArmyMan |
Re: Users online in einem Chat
Alles wo die Konstanten reingegeben werden müssen kommt dahin, wo du Socket.SendText aufrufst.
Das Auslesen der Konstante oder so kommt beim OnClientRead des Client-teils rein. Greetz alcaeus |
Re: Users online in einem Chat
Ich bin glaube zu blöde... :pale:
Ich verstehe es einfach nicht. Wenn jemand einen quelltext in diesem stil hat bin ich offen. Ich verstehe den zusammenhang eben nicht. Wenn ich ihn sehe clickt es vielleicht. Danke für euere hilfe ArmyMan |
Re: Users online in einem Chat
Zuerst musst du mal einige Konstanten definieren:
Delphi-Quellcode:
Diese Konstante brauchst du noch. Bedenke dass du die Konstanten für Befehle beliebig erweitern kannst, diese aber im Server und im Client gleich sein müssen (falls du es getrennt hast).
const
cFinish = #1; Kommando_1 = 'KOMM1'; Kommando_2 = 'KOMM2'; MaxArguments = 25; So werden die Befehle zusammengesetzt:
Delphi-Quellcode:
Hier musst du beachten, dass jeder Befehl mit cFinish abgeschlossen werden muss. Zweitens muss zwischen allen Parametern und dem Befehl ein cFinish stehen. Aufgrund dieses Zeichens wird der Text wieder getrennt.
Socket.SendText(Kommando_1+cFinish+'Param_1'+cFinish´'Param_2'+cFinish);
Das ist die Prozedur zum Aufspalten eines Zusammengesetzten Befehls.
Delphi-Quellcode:
Das Codesegment musst du dir unter Umständen noch bearbeiten. In Command wird am Ende dann das Kommando (also der erste Parameter) drinstehen, Arguments[i] enthält den jeweiligen Parameter, und NumArguments die Anzahl Parameter. Du kannst den Code auch so umbauen, dass er mit dynamischen Arrays und nicht der vordefinierten Höchstanzahl funktioniert. Wie gesagt, der Code ist noch uneffizient, ich habe lange nicht mehr am Chat gearbeitet. Weiters könnte man es auch einfacher aufspalten, such dazu mal im Forum nach DelimitedText.
var
Arguments: array[1..MaxArguments] of String; Command: String; i: Integer; NumArguments: Integer; begin Data := Socket.ReceiveText; Command := Copy(Data,1,Pos(cFinish,Data)-1); Delete(Data,1,Pos(cFinish,Data)); NumArguments := 0; while Length(Data) > 0 do begin Inc(NumArguments); Arguments[NumArguments] := Copy(Data,1,Pos(cFinish,Data)-1); Delete(Data,1,Pos(cFinish,Data)); end; end; Ich hoffe dass dir diese Codefragmente weiterhelfen, ich hoffe du weißt auch wo du sie einbauen musst. Greetz alcaeus |
Re: Users online in einem Chat
Ich sehe es nicht! Sorry
Vergisst es. Ich schaffe es nicht Greez ArmyMan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz