![]() |
IRC Service
Hallo,
Ich würde gerne für den IRC einen Service schreiben. Im Moment habe ich das mit einem CLient(IDIRC) geregelt der Override besitzt. Ist allerdings nicht die beste Lösung. Bis dahin fand ich die Indy IRC Komponente auch recht gut. Doch sobald es daran geht das man damit einen Service schreiben will gibt die Komponente auf, denn sie sendet direkt die Client Befehle beim connecten. Da dachte ich mir probierst es mal mit der Socket Komponente. Es gab ja genug Beispiele dafür. Ich komme auch einigermassen weit bis zu dem Punkt das es ums Ping/Pong spielen geht. Beim connecten empfange und sende ich folgendes. Zitat:
Delphi-Quellcode:
Ich habs auch überprüft aber er ruft nichtmal die IF Anweisung auf. Ohne das der PONG kommt bekomme ich keine Verbindung. Das zweite was mir aufgefallen ist, wenn ich ausserhalb des Netzwerkes versuche zu verbinden bekomme ich den Socket Fehler 10049(Asynchroner Socket Fehler). Kein Wunder das die meisten eine fertige Komponente bevorzugen. Am liebsten würde ich die Indy KOmponente ummodeln da nur zwei Zeilen geändert werden müssten aber wie ich das dann als neue Koponente registriere habe ich auch keine wirkliche Ahnung von.
procedure TForm1.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var rec:string; begin rec := socket.ReceiveText ; Temp.Lines.Add(rec); //Ping Pong if (copy(rec,0,4) = 'PING') then begin Client.Socket.sendtext('Pong' + copy(rec,5,99) + #13#10); end; //Ping Pong End end; Kann mir hier jemand bei helfen? Gruss Cyb |
Re: IRC Service
ich hatte meinen client damals mit purem idTCPclient gebaut
und folgendes als ping antwort genommen // bei ping ein pong geben *g* if (lowercase(copy(instr,0,4)) = 'ping') then begin form1.client.Write('PONG :'+copy(instr,7,99)+#13); transferstr := '<-- '+'PONG :'+copy(instr,7,99); Synchronize(writeconsole); end; |
Re: IRC Service
Ausser das es eine Andere Komponente ist, ähneln sich die Befehle ja. Löst aber nicht das Problem warum er bei mir nicht ins IF geht. Denn davor gebe ich den String ja in einem Memo aus.
Dazu kommt das der nette asynchon Fehler noch bleibt wenn ich ins INet connecten will. Edit: Interessant wäre auch zu wissen in welchem Ereignis Du das hast... Denn ich bekomme nichtmal die AUTH Notices mit... |
Re: IRC Service
mittels einem eigenen thread, der die readln's macht
hab ja die weniger aufgebauschte version der kommunikationskomponente genutzt ausserdem kommt es darauf an, wie du die strings terminierst. evtl nochmal nen leeren string senden danach oder halt genau wie ich das hab, weil du hast ja noch nen #10 dahinter, was falsch sein KÖNNTE |
Re: IRC Service
Die #10 hab ich nun weg gelassen, jetzt kommt nicht mehr der register Fehler aber diret nen Ping Timeout.
Wie könnte man denn die TIDIRC Komponente umbauen bzw. als neue Komponente Registrieren? Dort wird am Anfang direkt NICK und USER gesendet. Die Anzahl der zu übergebenden Parameter stimmen soweit überein. Es müsste dort nur das NICK duch PASS und das USER durch SERVER erstezt werden. und evtl die Namen der Ereignisse aber das wäre für mich persönlich nebensächlich. |
Re: IRC Service
Hi,
bei den Socketkomponenten hat man das "Problem", dass einige Events zusammenhängend gesendet werden, was aber laut deiner Ausgabe oben ausscheidet. Normal könnte das so aussehen: Zitat:
cu |
Re: IRC Service
Mit der IDIRC Komp schaut es so aus. Das was ich bereits beim Socket bekomme ist schon richtig.
Zitat:
|
Re: IRC Service
sende danach nochmal nen leerstring
|
Re: IRC Service
Hi,
ja, was du mit den Indy-Komponenten bekommst, ist schon richtig. Aber teste das selbe mal mit den Socketkomponenten ;) cu |
Re: IRC Service
Ja da komme ich ja nnur bis zum Ping. auch wenn ich danach nen Leerstring sende löst es immernoch nicht zwei meiner Probleme oder vllt. noch mehr.
Ein Leerstring bringt leider wieder den Fehler das ich nicht registriert bin. Wie oben geschrieben geht er nichtmal ins IF rein das sollte man vllt erstmal klähren warum er das nicht tut. Ich gehe mal stark davon aus wenn das erstmal gelöst ist gehts, hoff ich zumindest. |
Re: IRC Service
Liste der Anhänge anzeigen (Anzahl: 1)
ich geb dir mal mein irc client projekt, das ich damals nicht fertig gemacht hab.
hab es grad getestet wenn ich z.b. auf irc.spacetronix.net connecte (dauert ein wenig) und nach dem connect unten in das editfeld folgendes eingebe: /join #test dann bin ich auch im channel usw.. also es tut mit meinem code. eventuell findest du damit die lösung in deinem problemchen |
Re: IRC Service
Ich danke Dir.
Ja der Funktioniert, muss mich da zwar erstmal reindenken aber denke das wird gehen. Naja Client connect geht mal sehen ob ich den jetzt auch zum Server machen kann. Ohne jetzt zu nerven würd mich das mit der Socket Komponente schon interessieren warum es da nicht geht. Im Prinzip reden wir ja nur drum herum. :? |
Re: IRC Service
:-D SERVER läuft :-D
Jetzt gehts wieder ans eingemachte. Hatte aber beim starten deines Projektes nen netten Fehler pop: Tpopupmenu ind Unit3 machte da doch ein wenig schwierigkeiten und auch der Timer der direkt anspringt als Autoconnect. Habs mal kurzerhand entfernt. Ich hoffe es ist Dir recht wenn ich Deinen nun als Vorlage nehme für meinen ServiceBot. Warum hast Du Dein Projekt aufgegeben sah doch garnicht so schlecht aus. :) Nomma dickes Danke :) |
Re: IRC Service
jo kein problem ;) nehm ruhig
ach.. fertig hab ichs mangels zeit nicht gemacht.. hab immer 20 projekte gleichzeitig am laufen ;) |
Re: IRC Service
Danke.
Ja das kenn ich zu gute aber ich häng jetzt schon was länger an dem dummen Service. Neben der Arbeit hatte ich bis vor kurzem noch was kleines laufen seitdem versuch ich nur am Bot rumzuschrauben. Das Problem ist natürlich jetzt das der Bot bisher auf der Indy Komp basierte also heisst es nun alles mal wieder umschreiben. Ich kann ja nun ganz andere Informationen bezüglich des Channelmanagments und usermanagmets auslesen. Das ist schon eine tolle Sache. Bisher musste man sich Authen und es wurde dann anhand der Ident, Nick und Passwort dann erkannt und die Host wurd sich dann gemerkt. Problem dabei war die Host kann auch gleich sein. Es ist einfach nie genug Kontrolle da gewesen wür einen ganzen Channel. Der Service dagegen bekommt egal wo nen User was macht alles mit Nickänderungen, Modeänderungen, Joins, Parts, usw... So kann man das nun alles was vereinfachen. Dachte zuerst daran das aufzugeben und nen IRC Clone zu schreiben aber hatte schon zu viel Zeit reingesteckt. Zitat:
|
Re: IRC Service
Jetzt habe ich endlich den Fehler in meinem Code gefunden warum er nicht ins IF geht.
Ich verweise mal auf sECuRE. Jetzt weiss ich endlich was Du damit meintest. Das was ich bekomme sieht folgendermassen aus Zitat:
Ich könnt mich über die Memo Komp ärgern, dort kommt es so schön gegliedert an als wäre es mehrere Zeilen. Nachdem der Regirtrierungs PONG durch ist denke ich wirds so hinhauen. Da muss aber einer drauf kommen das diese sich so arg unterscheiden. :/ |
Re: IRC Service
Letzter Beitrag dann geh ich erstmal in die Ecke und schäm micht...
Innerhalb des Netzerkes findet er keinen Hostnamen und somit ist die voherig zitierte Zeile gekommen. Connected man nun ins internet bekommt man durch den ISP einen Host und ab da trennen sich dann die Wege. Zitat:
Ich versuche seit Stunden nen Fehler zu beheben der eigentlich keiner ist. So ich bin dann mal hinten in der Ecke... |
Re: IRC Service
Hi,
sagte ich doch *g*. Wozu brauchst du zwingend einen Hostname? Man kann doch auch eine IP angeben zum verbinden, oder verwendest du den Hostname etwa später im Code erneut für irgendwelche abfragen? Sollte man nicht tun, da einen zum Beispiel die großen Netzwerke nur weiterleiten: irc.efnet.org auf efnet.demon.co.uk, beim nächsten connect ircd.arcti.ca. Genauso beim Quakenet: irc.quakenet.org auf den nächstbesten Quakenet-server. Nennt sich Round Robin und muss vom jeweiligen Nameserver unterstützt werden. Lange Rede, kurzer Sinn: Wenn du den Hostname irc.efnet.org angibst und nachher damit prüfen willst, ob die Nachricht vom Server stammt, kommt dein Client/Bot/Wasauchimmer ganz schon durcheinander, schließlich bist du ja mit efnet.demon.co.uk verbunden (was die Socketkomponenten natürlich auch so anzeigen). cu |
Re: IRC Service
Ich weiss nicht wie es bei anderen Netzwerken ist, bei mir kommt eigentlich nur .dip0.t-ipconnect.dem .dip.t-dialin.net das ist die Host und die sollte gleich bleiben.
Ich nutze UnrealIRCD und er fragt beim connect automatisch nach einem Host, findet er diesen nicht nutzt er die IP Adresse. Solange nen Bot als Client angemeldet ist, ist es von vorteil die Host und Ident zu verareiten. Jetzt wo ich ihn als Service laufen habe geht es zum Glück auch anders. :) Jetzt wo ich den Fehler kenn, könnt ich ihn ja auch beheben. |
Re: IRC Service
Hi,
achso, das meinst du. Ich bezog mich auf den Hostname des Servers, du dich auf den USERNAME (auch als Ident bekannt, gemeinhin "der Teil vor dem @" im /whois ;)), der nicht gefunden wurde - bitte das nächste mal klarer ausdrücken ;). Einen Identd kannst du sehr einfach nachbauen, du musst dazu nur einen ServerSocket auf Port 113 aufmachen, der bei einer Anfrage im Format "<port1>,<port2>" die Antwort "<port1>,<port2> : USERID : UNIX : <identname>" zurückgibt. ![]() cu |
Re: IRC Service
Der Server hat keine Ident, die ich vergeben kann. Auf dem GameSurge konnt ich ja nur als Client connectenm hab da ja keine LinkLine.
aber eben davor habe ich die User anhand der Ident@Host erkannt. Das ganze hin und her fäööt ka nun raus, denn der Service bekommt alles mit egal wo es geschieht. Ich habe jetzt das dritte Protokoll bekommen, welche gibt es noch? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:11 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