AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IRC Service

Ein Thema von Cyberaxx · begonnen am 30. Jul 2005 · letzter Beitrag vom 31. Jul 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

IRC Service

  Alt 30. Jul 2005, 18:33
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:
Connecting to: 192.168.10.2 [6600]
Looking up...
Connecting to: 192.168.10.2 [6600]
Recive -> Connection established to: HASE_SERVER [192.168.10.2]
Send -> NICK TestBot
Send -> USER Service 192.168.10.10 192.168.10.10 :Wirklicher Name
Recive -> :Lightbow.Home NOTICE AUTH :*** Looking up your hostname...
Recive -> :Lightbow.Home NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
Recive -> :Lightbow.Home NOTICE TestBot :*** If you are having problems connecting due to ping timeouts,
please type /quote pong 5B075E1D or /raw pong 5B075E1D now.
Recive -> PING :5B075E1D
Recive -> :Lightbow.Home 451 Ponghtbow.Home :You have not registered
Es fehlt der Pong. Ich weiss nur nicht warum er ihn nicht sendet.

Delphi-Quellcode:
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;
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.

Kann mir hier jemand bei helfen?

Gruss Cyb
Daniel
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

Re: IRC Service

  Alt 30. Jul 2005, 19:14
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;
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#3

Re: IRC Service

  Alt 30. Jul 2005, 19:31
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...
Daniel
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: IRC Service

  Alt 30. Jul 2005, 20:29
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#5

Re: IRC Service

  Alt 30. Jul 2005, 20:31
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.
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#6

Re: IRC Service

  Alt 30. Jul 2005, 20:43
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:
<-- :Server NOTICE AUTH :*** Looking up your hostname
:Server NOTICE AUTH :*** Couldn't resolve...
<-- :blahblah
ING
Man beachte, dass also immer 2 oder mehr (manchmal aber auch nicht) gesendet werden, das hat etwas mit dem Buffer zu tun und wann dieser effektiv losgeschickt wird. Du solltest also eingehende Zeilen prüfen, ob sie ein #13#10 (newline) enthalten und dementsprechend trennen.

cu
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#7

Re: IRC Service

  Alt 30. Jul 2005, 20:50
Mit der IDIRC Komp schaut es so aus. Das was ich bereits beim Socket bekomme ist schon richtig.

Zitat:
20:48:26 Gesendet # NICK TestBot
20:48:26 Gesendet # USER Service 192.168.10.10 192.168.10.10 :Wirklicher Name
20:48:26 Empfangen # :Lightbow.Home NOTICE AUTH :*** Looking up your hostname...
20:48:54 Empfangen # :Lightbow.Home NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
20:48:55 Empfangen # :Lightbow.Home NOTICE TestBot :*** If you are having problems connecting due to ping timeouts, please type /quote pong 6B3BC634 or /raw pong 6B3BC634 now.
20:48:55 Empfangen # PING :6B3BC634
20:48:55 Gesendet # PONG :6B3BC634
20:48:55 Empfangen # :Lightbow.Home 001 TestBot :Welcome to the Lightbow IRC Network TestBot!Service@192.168.10.10
20:48:55 Empfangen # :Lightbow.Home 002 TestBot :Your host is Lightbow.Home, running version Unreal3.2.3
20:48:55 Empfangen # :Lightbow.Home 003 TestBot :This server was created Sun Mar 13 21:40:50 2005
20:48:55 Empfangen # :Lightbow.Home 004 TestBot Lightbow.Home Unreal3.2.3 iowghraAsORTVSxNCWqBzvdHtGp lvhopsmntikrRcaqOALQbSeIKVfMCuzNTGj
20:48:55 Empfangen # :Lightbow.Home 005 TestBot SAFELIST HCN MAXCHANNELS=10 CHANLIMIT=#:10 MAXLIST=b:60,e:60,I:60 NICKLEN=30 CHANNELLEN=32 TOPICLEN=307 KICKLEN=307 AWAYLEN=307 MAXTARGETS=20 WALLCHOPS WATCH=128 :are supported by this server
20:48:55 Empfangen # :Lightbow.Home 005 TestBot SILENCE=15 MODES=12 CHANTYPES=# PREFIX=(qaohv)~&@%+ CHANMODES=beI,kfL,lj,psmntirRcOAQKVGCuzNSMTG NETWORK=Lightbow CASEMAPPING=ascii EXTBAN=~,cqnr ELIST=MNUCT STATUSMSG=~&@%+ EXCEPTS INVEX CMDS=KNOCK,MAP,DCCALLOW,USERIP :are supported by this server
20:48:55 Empfangen # :Lightbow.Home 251 TestBot :There are 1 users and 1 invisible on 1 servers
20:48:55 Empfangen # :Lightbow.Home 252 TestBot 1 perator(s) online
20:48:55 Empfangen # :Lightbow.Home 253 TestBot 1 :unknown connection(s)
20:48:55 Empfangen # :Lightbow.Home 254 TestBot 2 :channels formed
20:48:55 Empfangen # :Lightbow.Home 255 TestBot :I have 2 clients and 0 servers
20:48:55 Empfangen # :Lightbow.Home 265 TestBot :Current Local Users: 2 Max: 9
20:48:55 Empfangen # :Lightbow.Home 266 TestBot :Current Global Users: 2 Max: 2
20:48:55 Empfangen # :Lightbow.Home 375 TestBot :- Lightbow.Home Message of the Day -
20:48:55 Empfangen # :Lightbow.Home 372 TestBot :- 29/7/2005 23:08
20:48:55 Empfangen # :Lightbow.Home 372 TestBot :- SERVER MODT
20:48:55 Empfangen # :Lightbow.Home 376 TestBot :End of /MOTD command.
20:48:55 Gesendet # OPER CyServ acid510p
20:48:55 Empfangen # :TestBot MODE TestBot :+iwxG
20:48:55 Gesendet # MODE #welcome +oq TestBot TestBot
20:48:55 Empfangen # :TestBot!Service@26456859.D5DC8A3D.66AB804C.IP JOIN :#welcome
20:48:55 Gesendet # MODE #welcome
20:48:55 Empfangen # :Lightbow.Home 353 TestBot = #welcome :TestBot @Zicken_Cyb
20:48:56 Empfangen # :Lightbow.Home 366 TestBot #welcome :End of /NAMES list.
20:48:56 Empfangen # :TestBot MODE TestBot :+oghAsq
20:48:56 Empfangen # :Lightbow.Home 008 TestBot :Server notice mask (+kcfvGqso)
20:48:56 Empfangen # :Lightbow.Home 381 TestBot :You are now an IRC Operator
20:48:56 Empfangen # :Lightbow.Home 375 TestBot :- Lightbow.Home Message of the Day -
20:48:56 Empfangen # :Lightbow.Home 372 TestBot :- IRC Operator Message of the Day
20:48:56 Empfangen # :Lightbow.Home 372 TestBot :- SERVER OPER MODT
20:48:56 Empfangen # :Lightbow.Home 376 TestBot :End of /MOTD command.
Daniel
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#8

Re: IRC Service

  Alt 30. Jul 2005, 20:55
sende danach nochmal nen leerstring
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#9

Re: IRC Service

  Alt 30. Jul 2005, 20:56
Hi,

ja, was du mit den Indy-Komponenten bekommst, ist schon richtig. Aber teste das selbe mal mit den Socketkomponenten

cu
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#10

Re: IRC Service

  Alt 30. Jul 2005, 21:08
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.
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 09:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz