Konsole, VCL und Indy IRC



  • So neue Frage, neuer Thread:
    So wie schon im anderen Thread beschrieben versuche ich in einer Konsolenapplikation mit IdIRC einen Channel zu joinen. Das mit dem Ereignisabfangen klappt ja jetzt sehr gut, aber nur das OnConnected-Ereignis scheint ausgeführt zu werden. Das PINGPONG Event was eigentlich danach ausgeführt werden müsste erhalte ich nicht mehr. Nach dem Verbinden

    IRC->Connect(5000);
    

    würde auch sofort der nächste Befehl ausgeführt, was ja eigentlich nicht schlecht ist, dass die Anwendung dabei nicht einfriert. Allerdings scheint auch nciht mehr gelesen/geschrieben zu werden zumindest trifft keines der folgenden Ereignisse zu:

    IRC->OnStatus=IdIRC1Status;
    IRC->OnReceive=IdIRC1Receive;
    IRC->OnRaw=IdIRC1Raw;
    IRC->OnPingPong=IdIRC1PingPong;
    IRC->OnSystem=IdIRC1System;
    IRC->OnError=IdIRC1Error;
    IRC->OnSend=IdIRC1Send; //Ich erhalte nur diesen beiden Zeilen von OnSend:
    //NICK NickXYZ
    //USER UserXYZ IP IP :UserXYZ
    

    Kein Ergeignis (bis auf 1x OnConnected und 2x OnSend) wird ausgeführt. Was ja eigentlich normal wäre.
    Wieso arbeitet denn das Programm weiter, aber nicht IdIRC? 😕



  • Nach ein paar Stunden tüffteln hab ich die Lösung gefunden:

    Also 1.
    Da ich überall als AOwner Application->Owner verwende muss ich mich um Application kümmern. Das wird nämlich nicht automatisch gemacht wie bei einer GUI Anwendung im Builder. Also erstmal:

    Application->Initialize(); //Initialisieren
    Application->Run(); //Die Anwendung ins Rollen bringen!!! 
    TMyClass::TMyClass(Application->Owner); //Meine Klassen
    

    So das war der erste Schritt. Aber wenn nur das getan würde, würde die Anwendung die Befehle durchrattern und sich dann beenden.
    Beim durchsehen der IdIRC Komponente hab ich dann bemerkt, dass die einen Thread erstellt: IRCThread
    Damit die Anwendung nun auf die Ausführung wartet muss man also folgendes machen:

    IRC->IRCThread->WaitFor(); //nach dem IRC->Connect(5000);
    

    So jetzt wird die Anwendung weiter ausgeführt und scheint nicht mehr mit "offenen Augen zu schlafen" 🙂


Anmelden zum Antworten