IRC - Nachricht parsen

Patrick Kamin

Erfahrenes Mitglied
Moinsen!
Code:
procedure TForm1.Parsen( TempString : String );
{ Erhällt als Parameter den gelesen String aus der Socketverbindung }
var
  Command, Argv, Sender  : String;
begin
    while Pos(#10,TempString) <> 0 do TempString[Pos(#10,TempString)]:= #13;
    while Pos(#13#13,TempString) <> 0 do Delete(TempString,Pos(#13#13,TempString),1);
    if Copy(TempString, 1,1) = ':' then begin
        Sender := Copy(TempString,1,pos(' ', TempString));
        Delete(TempString,1,pos(' ', TempString));
    end
    else
        Sender := '';
    Command := Copy(TempString,1,pos(' ',TempString));
    Delete(TempString,1,pos(' ',TempString));
    Argv := Copy(TempString,1,pos(#13,TempString)-1);
    if Command = 'PING' then Irc.Socket.SendText('PONG ' + Argv + #13+#10);
    BotParse(Sender, Command, Argv);
end;
Irgendwo scheint hier ein Fehler zu sein, denn er reagiert nicht auf den Ping vom Server.
 
Hi,

ich helfe mir dann immer mittels Anzeigekomponenten, z.B. eines TMemos.

Code:
procedure TForm1.Parsen( TempString : String );
{ Erhällt als Parameter den gelesen String aus der Socketverbindung }
var
  Command, Argv, Sender  : String;
begin
    while Pos(#10,TempString) <> 0 do TempString[Pos(#10,TempString)]:= #13;
    while Pos(#13#13,TempString) <> 0 do Delete(TempString,Pos(#13#13,TempString),1);
    if Copy(TempString, 1,1) = ':' then begin
        Sender := Copy(TempString,1,pos(' ', TempString));
        Delete(TempString,1,pos(' ', TempString));
    end
    else
        Sender := '';

    Memo1.Lines.Add('TempString: ' + TempString);

    Command := Copy(TempString,1,pos(' ',TempString));
    Delete(TempString,1,pos(' ',TempString));

    Memo1.Lines.Add('Command: ' + Command);
    Memo1.Lines.Add('TempString: ' + TempString);
    Argv := Copy(TempString,1,pos(#13,TempString)-1);
    Memo1.Lines.Add('Argv: ' + Argv);
    if Command = 'PING' then Memo1.Lines.Add('PONG ' + Argv + #13+#10);
//    BotParse(Sender, Command, Argv);
end;

Damit habe ich den Fehler schnell gefunden:
Code:
procedure TForm1.Parsen( TempString : String );
{ Erhällt als Parameter den gelesen String aus der Socketverbindung }
var
  Command, Argv, Sender  : String;
begin
    while Pos(#10,TempString) <> 0 do TempString[Pos(#10,TempString)]:= #13;
    while Pos(#13#13,TempString) <> 0 do Delete(TempString,Pos(#13#13,TempString),1);
    if Copy(TempString, 1,1) = ':' then begin
        Sender := Copy(TempString,1,pos(' ', TempString));
        Delete(TempString,1,pos(' ', TempString));
    end
    else
        Sender := '';
    Command := Copy(TempString,1,pos(' ',TempString)-1);
    Delete(TempString,1,pos(' ',TempString));
    Argv := Copy(TempString,1,pos(#13,TempString)-1);
    if Command = 'PING' then Irc.Socket.SendText('PONG ' + Argv + #13+#10);
    BotParse(Sender, Command, Argv);
end;
 
Ist zwar ein kleiner Fehler, aber der ist durch mehrmaliges Umstellen des Codes entstanden. Der Fehler muss irgendwo bei der Identifzierung beim Server entstehen. Muss ich mir morgen nochmal in Ruhe angucken. Wenns dann passt, berichte ich mal. Dank dir für deine Hilfe.

Edit:
So, läuft jetzt alles wunderbar, vielleicht kann ich mIRC als populärsten IRC Clienten ja noch ablösen ;-]

Hier mal der Code, vielleicht benötigt jemand anderes sowas auch mal.
Code:
var
  Command, Sender  : String;
begin
  while Pos(#10,TempString) <> 0 do TempString:= #13;
  while Pos(#13,TempString) <> 0 do Delete(TempString,Pos(#13,TempString),1);
    if Copy(TempString, 1,1) = ':' then begin
        Sender := Copy(TempString,1,pos(' ', TempString)-1);
        TempString := Copy(TempString,pos(' ',TempString)+1,length(TempString));
    end
    else
        Sender := '';
    Command := Copy(TempString,1,pos(' ',TempString)-1);
    TempString := Copy(TempString,pos(' ',TempString)+1,Length(TempString));
    if UpperCase(Command) = 'PING' then
      Irc.Socket.SendText('PONG '+TempString+EOF);
// Sender, Command und TempString kann man dann weiterverarbeiten
 
Zuletzt bearbeitet:
Zurück