Indy wie IRC nachrichten empfangen

Alle Fragen zur Netzwerkkommunikation

Indy wie IRC nachrichten empfangen

Beitragvon Dragon » 24. Jan 2016, 15:03 Indy wie IRC nachrichten empfangen

Hallo ich hatte hier ja gestern schonmal gefragt wegen indy
viewtopic.php?f=10&t=9373
und irc, und das hat am ende ja auch funktioniert was ich vorhatte, nur hab ich wieder mal ein Problem ich weiß nicht wie ich Nachrichten empfangen kann mit indy.

Hab dann ein bissl gegoogelt und https://github.com/fabioxgn/IRC diesen Client gefunden. Von diesem hab ich mir den code mal angeschaut doch es hat mir leider nicht weitergeholfen.
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon Dragon » 24. Jan 2016, 20:43 Re: Indy wie IRC nachrichten empfangen

Weiß den wirklich keiner eine antwort.

versuch schon seit über 8std es hinzubekommen ohne erfolg. :cry:
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon Christian » 25. Jan 2016, 06:10 Re: Indy wie IRC nachrichten empfangen

Indy wird in Lazarus Kreisen wenig genutzt. Ist riesig und fehleranfällig.
Für Synaose hab ich das irgendwann schonmal gemacht muss ich aber schauen.

Allerdings ist das so trivial das dus auch selbst hinbekommen müsstest.
IRC ist einfach nur ne TCP Verbindung alle Befehle sind die selben wie du sie auch im IRC Client eingibst.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6101
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon Dragon » 25. Jan 2016, 07:41 Re: Indy wie IRC nachrichten empfangen

Danke schonmal fur deine hilfe. Für indy hatte ich mich entschieden weil ich beib synapse gesehen hab das diebletzte version von 2012-13 war und ich somit dachte es ist eol. Auserdem möchte ich auch spater wenn alles funktioniert ssl einbauen

Vll wäre lnet noch ne möglichkeit.
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon theo » 25. Jan 2016, 10:04 Re: Indy wie IRC nachrichten empfangen

Dragon hat geschrieben:Danke schonmal fur deine hilfe. Für indy hatte ich mich entschieden weil ich beib synapse gesehen hab das diebletzte version von 2012-13 war und ich somit dachte es ist eol. Auserdem möchte ich auch spater wenn alles funktioniert ssl einbauen
.

Merkwürdige Logik. Nur weil bei Indy nicht drauf steht, wie alt die Release Version ist, ist es aktueller? :wink:

Außerdem stimmt es nicht. An Synapse Trunk wurde in 2015 gearbeitet http://sourceforge.net/p/synalist/code/HEAD/tree/trunk/ und SSL unterstützt es auch.
theo
 
Beiträge: 8053
Registriert: 11. Sep 2006, 18:01

Beitragvon Thomas B. » 25. Jan 2016, 10:26 Re: Indy wie IRC nachrichten empfangen

Indy ... Ist riesig und fehleranfällig.

kann ich so nicht bestätigen. Bei mir läuft Indy (egal welche Komponente) seit Jahren stabil in verschiedenen Projekten.
Manchmal wird hier im Forum irgendein Vorurteil gegen Indy herausgekramt, ohne ein konkretes Beispiel zu zeigen bzw. zu nennen - das nervt.

zur Frage:
Wenn ich mir die IdIRC.pas so anschaue, dann scheint der Server verschiedene Events / Nachrichten zu schicken, auf die reagiert werden kann, sofern die Ereignisbehandlungsroutine auch zugewiesen ist.
Ein Beispiel für den Anfang:
Code: Alles auswählen
...
procedure MeineVerarbeitungsprozedur(ASender: TIdContext; AWelcomeInfo: TIdStrings); // siehe IdIRC.pas: TIdIRCServerWelcomeEvent = procedure(ASender: TIdContext; AWelcomeInfo: TIdStrings) of object;
...
// bei Programmstart zuweisen:
IdIRC.OnServerWelcome := @MeineVerarbeitungsprozedur;
Thomas B.
 
Beiträge: 89
Registriert: 2. Nov 2007, 13:32
Wohnort: Ulm
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Dragon » 25. Jan 2016, 11:28 Re: Indy wie IRC nachrichten empfangen

@theo
ich hatte auf der website nicht im trunk nachgeguckt

@Thomas B.
die idirc hatte ich mir angegucktbhat mir nur leider net weitergeholfrn hab da nichts gefunden fur normale nachrichten nur events für topic, join, dejoin,.. nichts für message recieve. Ich werde mir die unit aber nochmal angucken wenn ich zuhause bin.
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon Thomas B. » 25. Jan 2016, 12:19 Re: Indy wie IRC nachrichten empfangen

Die Events geben schon die entsprechende Klassifizierung der Nachricht vor.
Wer direkt auf die TCP-Daten zugreifen möchte, der nutzt wahrscheinlich am besten das OnRaw-Event, wie z.B. hier beschrieben
Thomas B.
 
Beiträge: 89
Registriert: 2. Nov 2007, 13:32
Wohnort: Ulm
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Dragon » 25. Jan 2016, 14:30 Re: Indy wie IRC nachrichten empfangen

So sieht mein code jetzt aus
Code: Alles auswählen
 
program IRC_BOT;
 
{$mode objfpc}{$H+}
 
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes,
  SysUtils,
  IdIRC,
  idContext;
 
 procedure Test(ASender: TIdContext; AWelcomeInfo: TIdStrings);
 begin
     Writeln(AWelcomeInfo);
     Say('#test', 'Wilkommen erhalten');
 end;
 
{ you can add units after this }
var
  a: string;
  MyIdIRC: TIdIRC; // Vllt. heißt es auch anders, musst du mal schauen
begin
  ReadLn(a);
  if a = 'Connect' then
  begin
    begin
      MyIdIRC := TIdIRC.Create; // Kann sein, dass da noch ein Parameter hin muss, aber du musst erst das Objekt konstruieren
      MyIdIRC.username := 'Bot';
      MyIdIRC.nickname := 'Bot';
      MyIdIRC.Host := '127.0.0.1';
      MyIdIRC.Port := 6667;
 
 
      MyIdIRC.OnServerWelcome := @Test;
      try
        MyIdIRC.Connect();
        MyIdIRC.Join('#test');
      except
        Writeln('Fehler beim Verbinden!');
      end;
      FreeAndNil(MyIdIRC); // Objekt wieder freigeben
    end;
  end;
end.     
 

Aber jetzt mekert er in der IdsocketHandle unit das er IdGlobal nicht finden kann

P.S. Das Stackoverflow example kann ich auch nicht kompilieren
Zuletzt geändert von Dragon am 25. Jan 2016, 16:07, insgesamt 1-mal geändert.
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon theo » 25. Jan 2016, 15:16 Re: Indy wie IRC nachrichten empfangen

Für Kommandozeilenprogramme ist Synapse mMn besser geeignet.
Synapse wartet, statt ein Event zu schmeißen.
theo
 
Beiträge: 8053
Registriert: 11. Sep 2006, 18:01

Beitragvon Dragon » 25. Jan 2016, 16:28 Re: Indy wie IRC nachrichten empfangen

Offenbar konnte er die unit "IdGlobal" nicht finden hab sie manuell eingebunden.

Jetzt hab ich aber den fehler
"IdIRC.pas(39,22) Fatal: Kann idContext nicht finden verwendet von IdIRC. Make sure all ppu files of a package are in its output directory. ppu im falschen Verzeichnis=/usr/local/codetyphon/typhon/components/pl_Indy/lib/x86_64-linux/qt/IdContext.ppu.."
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon Warf » 25. Jan 2016, 20:00 Re: Indy wie IRC nachrichten empfangen

Christian hat geschrieben:Indy wird in Lazarus Kreisen wenig genutzt. Ist riesig und fehleranfällig.


Etwas das ich nie verstehen konnte, die LCL ist auch riesig und fehleranfällig, warum verwendet man nach dieser Logik nicht lieber ein anderes Framework?

Bisher hat Indy bei mir, natürlich mit ein wenig Aufwand, immer alles geleistet was ich wollte. Nur man sollte nicht den Release nutzen, sondern den Trunk, da der Release mittlerweile schon ein paar Jahre gesehen hat, der trunk allerdings fortlaufend aktualisiert wird.
Warf
 
Beiträge: 920
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Dragon » 25. Jan 2016, 20:08 Re: Indy wie IRC nachrichten empfangen

@Warf ich habe nicht eine stable genommen war die version die bei CT5.60 dabei war.

Hab eben auf ne testing version von 5.70 aktualisierthab jetzt aber neue fehler

nähmlich wieder Identifier fehler
Hier erstmal der CODE
Code: Alles auswählen
program IRC_BOT;
 
{$mode objfpc}{$H+}
 
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes,
  SysUtils,
  IdIRC,
  IdGlobal,
  pl_indy;
 
{ you can add units after this }
  procedure test(ASender: TIdContext; AWelcomeInfo: TIdStrings);
  begin
 
  end;
 
var
  Stop: boolean;
  MyIdIRC: TIdIRC;                                              // Vllt. heißt es auch anders, musst du mal schauen
begin
  MyIdIRC.OnServerWelcome := @test;
  Stop := False;
  try
    MyIdIRC := TIdIRC.Create;
    // Kann sein, dass da noch ein Parameter hin muss, aber du musst erst das Objekt konstruieren
    MyIdIRC.username := 'Bot';
    MyIdIRC.nickname := 'Bot';
    MyIdIRC.Host := '127.0.0.1';
    MyIdIRC.Port := 6667;
    try
      MyIdIRC.Connect();
      MyIdIRC.Join('#test');
    except
      Writeln('Fehler beim Verbinden!');
      ReadLn();
    end;
  finally
    repeat
      // MyIdirc.Say('#test', 'Hi');
      // sleep(1000);
 
    until Stop = True;
    FreeAndNil(MyIdIRC); // Objekt wieder freigeben
  end;
end.               
 


Die fehler lauten

Nachrichten, Warnungen: 1
Warning: other unit files search path (aka unit path) of "IRC_BOT" contains "/usr/local/codetyphon/typhon/components/pl_Indy/source", which belongs to package "pl_indy"
Projekt kompilieren, Ziel: IRC_BOT: Exit code 256, Fehler: 3
IRC_BOT.lpr(14,27) Error: Identifier not found "TIdContext"
IRC_BOT.lpr(14,53) Error: Identifier not found "TIdStrings"
IRC_BOT.lpr(23,30) Error: Incompatible types: got "<address of procedure(<erroneous type>;<erroneous type>);Register>" expected "<procedure variable type of procedure(TIdContext;const AnsiString) of object;Register>"

die unit IdGlobal.pas hab ich per hand eingefügt weil er sie sonst nicht gefunden hat

Nat würde ich auch theo LNET oder Synapse nehmen nur zu indy hab ich bisher am meisten hilfen gefunden deshalb hatte ich das genommen auserdem ar dort schon eine IRC unit vorhanden.
Dragon
 
Beiträge: 162
Registriert: 31. Jul 2013, 14:07
OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80 | 
Nach oben

Beitragvon creed steiger » 25. Jan 2016, 20:16 Re: Indy wie IRC nachrichten empfangen

Zu dem CT Zeugs kann dir wohl am bestem im Pilotlogic/CT Forum geholfen werden.

Davon abgesehen ist IRC dokumentiert

http://www.faqs.org/rfcs/rfc2812.html

https://tools.ietf.org/html/rfc1459
creed steiger
 
Beiträge: 943
Registriert: 11. Sep 2006, 21:56

Beitragvon Warf » 25. Jan 2016, 20:28 Re: Indy wie IRC nachrichten empfangen

Zu CT weiß ich relativ wenig,
aber versucht mal idContext & idStrings in der uses Klausel zu verwenden, Indy ist über sehr viele Dateien verteilt

und:
Code: Alles auswählen
  MyIdIRC.OnServerWelcome := @test;

das Funktioniert nicht da OnServerWelcome eine Methode erwartet (Funktion/Prozedur einer Klasse, da dieses über thiscall aufgerufen wird) du übergibst eine normale funktion.
Warf
 
Beiträge: 920
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Netzwerk



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried