AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Indy 10] IRC-Client in eigenem thread auslagern
Thema durchsuchen
Ansicht
Themen-Optionen

[Indy 10] IRC-Client in eigenem thread auslagern

Ein Thema von Sfaizst · begonnen am 10. Dez 2010 · letzter Beitrag vom 22. Dez 2010
 
Sfaizst

Registriert seit: 16. Jun 2008
33 Beiträge
 
#1

[Indy 10] IRC-Client in eigenem thread auslagern

  Alt 10. Dez 2010, 02:43
Guten Morgen allerseits,

ich habe mich leider schon ganz schön lange nicht mehr richtig mit multithreading beschäftigt, so bin ichs der materie ein wenig drausen, jetzt müsste ich jedoch einen IRC-Client, welcher zur Laufzeit im eigenem Thread laufen soll auf mein programm bringen...

Das problem ist folgendes: Das erstellen vom Thread funktioniert an sicht und das joinen auch (aufm Server nachgeguckt), die Frage ist jedoch, wie "empfange" ich Daten, die der Server verschickt?

Meine Bisherigen Zeilen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IDIRC, IDContext, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
  procedure ReceiveIRC(ASender: TIdContext; const ANicknameFrom, AHost, ANicknameTo, AMessage: String);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  type TIRC = class(TThread)
    private
    FConnected : Boolean;
    public
    IRC : TIDIRC;
    Host : AnsiString;
    Port : Word;
    constructor Create(CreateSuspended:Boolean);
    procedure StartIRC(Channel,MyName : AnsiString);
    procedure Execute; override;
    destructor Free;
end;

var
  Form1: TForm1;
  IRC : TIRC;

implementation

{$R *.dfm}

constructor TIRC.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  IRC := TIDIRC.Create(NIL);
  Host := 'myserver';
  Port := 6667;
end;

procedure TIRC.StartIRC(Channel, MyName : AnsiString);
begin
  IRC.Host := Host;
  IRC.Port := Port;
  IRC.Username := MyName;
  IRC.Realname := MyName;
  IRC.Nickname := MyName;
  IRC.OnPrivateMessage := Form1.ReceiveIRC;
  IRC.Connect;
  IRC.Join(Channel);
  FConnected := True;
end;

procedure TIRC.Execute;
var
  ASender : TIDContext;
  ANick,AHost,ANickTo,AMessage : String;
begin
  while (not Self.Terminated) do
    begin
      if (FConnected) and (IRC.Connected) then
        //Wie lese ich hier die Daten (/hole sie ab), wenn etwas ankommt, so, dass OnPrivateMessage aufgerufen wird?
    end;
end;

destructor TIRC.Free;
begin
  try
  IRC.Free;
  except
  end;
  inherited Destroy;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Channel, MyName : AnsiString;
begin
  IRC := TIRC.Create(false);
  Channel := 'channel';
  MyName := 'User001';
  IRC.StartIRC(Channel,MyName);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  IRC.Free;
end;

procedure TForm1.ReceiveIRC(ASender: TIdContext; const ANicknameFrom: string; const AHost: string; const ANicknameTo: string; const AMessage: string);
begin
  if AMessage <> 'then
     Memo1.Lines.Add(AMessage);
end;
Es ist noch nicht alles so, wie ichs am ende haben möchte, jedoch geht es im prinzip momentan eher nur um die procedure TIRC.Execute...

Viele Grüße

Sfaizst

Geändert von Sfaizst (10. Dez 2010 um 03:13 Uhr)
  Mit Zitat antworten Zitat
 


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 00:14 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