Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Users online in einem Chat (https://www.delphipraxis.net/25267-users-online-einem-chat.html)

alcaeus 4. Jul 2004 12:10

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

Tubos 4. Jul 2004 12:12

Re: Users online in einem Chat
 
Zitat:

Ich brauche eine andere möglichkeit, oder eine SEHR genaue erklärung.
Das ist die beste Möglichkeit.
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:
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;
(Nicht alle MSGs haben Parameter.)



Wenn ich einen String bekomme, der in der Variablen x gespeichert wird mache ich folgendes:
Delphi-Quellcode:
if msg(x)=MsgQuit then memo1.lines.add(par(x) + ' verlässt den Chat.');
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.

Hoffe das hat dir ein wenig geholfen und dich nicht noch mehr verwirrt :wink:

ArmyMan 4. Jul 2004 12:15

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

alcaeus 4. Jul 2004 12:24

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

ArmyMan 4. Jul 2004 14:25

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

alcaeus 4. Jul 2004 15:17

Re: Users online in einem Chat
 
Zuerst musst du mal einige Konstanten definieren:
Delphi-Quellcode:
const
  cFinish = #1;
  Kommando_1 = 'KOMM1';
  Kommando_2 = 'KOMM2';
  MaxArguments = 25;
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).

So werden die Befehle zusammengesetzt:
Delphi-Quellcode:
Socket.SendText(Kommando_1+cFinish+'Param_1'+cFinish´'Param_2'+cFinish);
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.

Das ist die Prozedur zum Aufspalten eines Zusammengesetzten Befehls.
Delphi-Quellcode:
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;
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.
Ich hoffe dass dir diese Codefragmente weiterhelfen, ich hoffe du weißt auch wo du sie einbauen musst.

Greetz
alcaeus

ArmyMan 21. Jul 2004 16:08

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.
Seite 3 von 3     123   

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