[B2D] IRC-Network mit BB

Übersicht BlitzBasic FAQ und Tutorials

Neue Antwort erstellen

DA

Betreff: [B2D] IRC-Network mit BB

BeitragDi, Jun 21, 2005 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

hier mal eine kleine Einführung wie man sich z.B. mit dem Blitzed-Server verbindet und auch verschiedene Features benutzen kann.

Also als erstes müssen wir uns per TCP mit dem Server verbinden und zur Übersicht die wichtigsten Variablen global machen.
Das müsste ja allen bekannt sein. Smile

Code: [AUSKLAPPEN]

Seedrnd Millisecs()
Global IRC_stream, IRC_name$ = "BlitzBasic"+rand(1,500), IRC_port = 6667, IRC_host$ = "127.0.0.1", IRC_Server$ = "irc.blitzed.org", Channel$

function Connect(timeout=5000)
   ; mit IRC server verbinden
   IRC_stream = OpenTCPstream(IRC_Server$,IRC_port)
   go = Millisecs()
   while not  IRC_stream
      if Millisecs()-go>timeout then return 0
   wend
end function   


So, das war jetzt zwar eigentlich schon nen bischen mehr, müsste aber egal sein.
Bevor ich jedoch Anfang zu erklären noch kurz eine kleine Erläuterung:

Code: [AUSKLAPPEN]

IRC_host$ = "127.0.0.1" ; Das ist die IP des Computers wo man dran ist. Müsste bekannt sein.
IRC_name$ = "Blitzbasic"+rand(1,500) ; Das ist der Name der für den user steht.
IRC_post = 6667 ; Das ist der Port mit dem ich auf den Server zugreife.
IRC_Server$ = "irc.blitzed.org" ; Das ist der Server.
IRC_stream ; Die Variable wo die Connection drin gespeichert wird.
Channel$ ; Dort wird der "Raum" drin gespeichert wo man gejoind ist.


So. Jetzt müsste der Rest sich eigentlich von selbst erklärt haben.
Wen nicht:
Also, wir haben nun eine Funktion mit der wir uns mit dem IRC Server connecten und einen Ping festlegen. Falls wir z.B. noch nicht im Internet sind oder der Server ist gerade inaktiv etc. Gut, mhm, da fehlt doch was oder?
Ah ja genau, wir müssen uns noch anmelden!
Der code kurz vor:

Code: [AUSKLAPPEN]

Seedrnd Millisecs()
Global IRC_stream, IRC_name$ = "BlitzBasic"+rand(1,500), IRC_port = 6667, IRC_host$ = "127.0.0.1", IRC_Server$ = "irc.blitzed.org", Channel$


function Connect(timeout=5000)
   ; mit IRC server verbinden
   IRC_stream = OpenTCPstream(IRC_Server$,IRC_port)
   go = Millisecs()
   while not  IRC_stream
      if Millisecs()-go>timeout then return 0
   wend
   ; Anmelden
   WriteLine IRC_stream, "USER " + IRC_name$ + " " + IRC_host$ + " " + IRC_Server$ + " :" + IRC_name$
   WriteLine IRC_stream, "NICK " + IRC_name$
   WriteLine IRC_stream, "PONG "
   ; Rückgabe
   Return 1
end function   


Joa. Nun haben wir auch die Anmeldung beim IRC-Server. Mhm. Was nun?
Ach ja. Wie immer, code zu erst:

Code: [AUSKLAPPEN]

Seedrnd Millisecs()
Global IRC_stream, IRC_name$ = "BlitzBasic"+rand(1,500), IRC_port = 6667, IRC_host$ = "127.0.0.1", IRC_Server$ = "irc.blitzed.org", Channel$


function Connect(timeout=5000)
   ; mit IRC server verbinden
   IRC_stream = OpenTCPstream(IRC_Server$,IRC_port)
   go = Millisecs()
   while not  IRC_stream
      if Millisecs()-go>timeout then return 0
   wend
   ; Anmelden
   WriteLine IRC_stream, "USER " + IRC_name$ + " " + IRC_host$ + " " + IRC_Server$ + " :" + IRC_name$
   WriteLine IRC_stream, "NICK " + IRC_name$
   WriteLine IRC_stream, "PONG "
   ; Rückgabe
   Return 1
end function   

function IRC_message_in$()
    If IRC_stream = 0 then Return 0
   
      If Readavail(IRC_stream) then
          message_in$ = Readline(IRC_stream)
           
             ; Ping/Pong Wichtig!
             If Left$(message_in$,4) = "PING" then WriteLine IRC_stream, "PONG " + Mid$(message_in$,7,Len(message_in$)-6)

             If Instr(message_in$, "~") Then
      If Instr(message_in$, "PRIVMSG") Then
           pos = Instr(message_in$, "PRIVMSG")
            name$ = Mid(message_in$, 1, Instr(message_in$, "~")-2)
               name$ = Mid(name$, 2, -1)
            pos = Instr(message_in$, ":", pos)
         Return name$ + ": " + Mid(message_in$, pos+1, -1)
      EndIf
             endif
             Return message_in$

      else
          Return 0
      endif
end Function


Tjoa. Also wir warten bis im Speicher eine Nachricht ist. Wen ja, lesen wir sie aus und gucken ob in der Nachricht "Ping" steht.
Das heißt der Server will von uns eine Nachricht (Pong) zurück geschickt haben, damit er weiß, dass ich (der User) noch online bin.
Außerdem habe ich noch eine Funktion reingemacht mit der ich den Text auseinander nehme. Aber auch nur wen die Nachricht keine Systemnachricht ist.
Gut. Jetzt haben wir eine Verbindung zum Server und können sogar auch Nachrichten empfangen. Mhm. Da fehlt doch immernoch was?
Genau, wir können noch keine Nachrichten versenden!

Code: [AUSKLAPPEN]

Seedrnd Millisecs()
Global IRC_stream, IRC_name$ = "BlitzBasic"+rand(1,500), IRC_port = 6667, IRC_host$ = "127.0.0.1", IRC_Server$ = "irc.blitzed.org", Channel$


function Connect(timeout=5000)
   ; mit IRC server verbinden
   IRC_stream = OpenTCPstream(IRC_Server$,IRC_port)
   go = Millisecs()
   while not  IRC_stream
      if Millisecs()-go>timeout then return 0
   wend
   ; Anmelden
   WriteLine IRC_stream, "USER " + IRC_name$ + " " + IRC_host$ + " " + IRC_Server$ + " :" + IRC_name$
   WriteLine IRC_stream, "NICK " + IRC_name$
   WriteLine IRC_stream, "PONG "
   ; Rückgabe
   Return 1
end function   

function IRC_message_in$()
    If IRC_stream = 0 then Return 0
   
      If Readavail(IRC_stream) then
          message_in$ = Readline(IRC_stream)
           
             ; Ping/Pong Wichtig!
             If Left$(message_in$,4) = "PING" then WriteLine IRC_stream, "PONG " + Mid$(message_in$,7,Len(message_in$)-6)

             If Instr(message_in$, "~") Then
      If Instr(message_in$, "PRIVMSG") Then
           pos = Instr(message_in$, "PRIVMSG")
            name$ = Mid(message_in$, 1, Instr(message_in$, "~")-2)
               name$ = Mid(name$, 2, -1)
            pos = Instr(message_in$, ":", pos)
         Return name$ + ": " + Mid(message_in$, pos+1, -1)
      EndIf
             endif
             Return message_in$

      else
          Return 0
      endif
end Function

Function IRC_message_out(msg$)
If Mid$(Upper$(msg$), 1, 4) = "JOIN" then
   Channel$ = Mid$(msg$, pos+5)
   WriteLine IRC_stream, msg$
else
    WriteLine IRC_stream, "PRIVMSG " + Channel$ + " :"+msg$
 endif
end function


So. Nun haben wir eine Funktion mit der wir (wen kein Join am Anfang steht) etwas schreiben können. Aber auch nur wen wir vorher einem Channel gejoind sind.
Geben wir aber 'Join #blitzbasic.de' z.B. ein, joinen wir einem Channel.
Man muss sich Channels wie Räume vorstellen. Wo jeder User joinen und sich unterhalten kann.
Wunderbar. Was jetzt noch fehlt kannst du dir wahrscheinlich schon denken. Genau, die Hauptschleife.

Code: [AUSKLAPPEN]

Seedrnd Millisecs()
Global IRC_stream, IRC_name$ = "BlitzBasic"+rand(1,500), IRC_port = 6667, IRC_host$ = "127.0.0.1", IRC_Server$ = "irc.blitzed.org", Channel$


function Connect(timeout=5000)
   ; mit IRC server verbinden
   IRC_stream = OpenTCPstream(IRC_Server$,IRC_port)
   go = Millisecs()
   while not  IRC_stream
      if Millisecs()-go>timeout then return 0
   wend
   ; Anmelden
   WriteLine IRC_stream, "USER " + IRC_name$ + " " + IRC_host$ + " " + IRC_Server$ + " :" + IRC_name$
   WriteLine IRC_stream, "NICK " + IRC_name$
   WriteLine IRC_stream, "PONG "
   ; Rückgabe
   Return 1
end function   

function IRC_message_in$()
    If IRC_stream = 0 then Return 0
   
      If Readavail(IRC_stream) then
          message_in$ = Readline(IRC_stream)
           
             ; Ping/Pong Wichtig!
             If Left$(message_in$,4) = "PING" then WriteLine IRC_stream, "PONG " + Mid$(message_in$,7,Len(message_in$)-6)

             If Instr(message_in$, "~") Then
      If Instr(message_in$, "PRIVMSG") Then
           pos = Instr(message_in$, "PRIVMSG")
            name$ = Mid(message_in$, 1, Instr(message_in$, "~")-2)
               name$ = Mid(name$, 2, -1)
            pos = Instr(message_in$, ":", pos)
         Return name$ + ": " + Mid(message_in$, pos+1, -1)
      EndIf
             endif
             Return message_in$

      else
          Return 0
      endif
end Function

Function IRC_message_out(msg$)
If Mid$(Upper$(msg$), 1, 4) = "JOIN" then
   Channel$ = Mid$(msg$, pos+5)
   WriteLine IRC_stream, msg$
else
    WriteLine IRC_stream, "PRIVMSG " + Channel$ + " :"+msg$
 endif
end function

; Hauptschleife
Graphics 800,600,16,2

Connect()

While Not KeyHit(1)
      
   x$=irc_message_in$()
   While x$<>0
      Print x$
      x$=irc_message_in$()
   Wend
   
   If KeyHit(2) Then irc_message_out(Input(">"))

Wend


So. Natürlich gibs noch mehrere Funktionen für den IRC. Aber ich denke dafür reicht jetzt meine Zeit und geduld nicht mehr. Smile
Ich hoffe ich konnte jemand mit dem Tutorial helfen.

PS: Herzlichen Dank an DC der mir mal ein Sample schenkte. Wink

Mfg
DarkAngel

[Mod]Aus Geschwindigkeitsgründen auf Code-Tag umgestellt. Gruss BladeRunner [/mod]
Deutscher Blitz Basic Chat
  • Zuletzt bearbeitet von DA am Do, Jun 23, 2005 20:40, insgesamt einmal bearbeitet

maximilian

BeitragDi, Jun 21, 2005 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Erinnert mich jetzt sehr an das PHP-Tutorial mit dem ich meinen Bot geschrieben habe. hehehe...

Ansonsten kann ich nichts drüber sagen. Firewallsupport wie mIRC ihn hat ist wohl in BB nicht möglich.

LordChaos
Variety is the spice of life. One day ignore people, next day annoy them.

simi

BeitragDi, Jun 21, 2005 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht nicht schlecht aus......
ich hab ja auch mal einen mini-IRC-Clienten geschrieben, den ihr unter www.blitz2d.ch.vu mit source downloaden könnt. (danke @DA, dass du mir da auch am anfang geholfen hast....)

Wenn ihr alle Befehle wissen wollt, könnt ihr mal hier schauen: http://www.faqs.org/rfcs/rfc1459.html

DA

BeitragDo, Jun 23, 2005 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

@ LordChaos
hmm. Habe noch nichts gehört über Firewall Support. Müsste man mal googlen.

@Simi
Danke fürs Feedback und für die Befehlsliste. Wollte den Link eigentlich auch noch dabeifügen habs dan aber irgendwie verplant. Smile

Mfg
DarkAngel
Deutscher Blitz Basic Chat

maximilian

BeitragDo, Jun 23, 2005 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu ist btw. eigentlich das SeedRnd MilliSecs() da?

LordChaos
Variety is the spice of life. One day ignore people, next day annoy them.

DA

BeitragDo, Jun 23, 2005 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

@LordChaos
ups. Embarassed
Hatte da was vergessen. Habs nochmal Editiert. Danke das du mich dran erinnert hast.

@BladeRunner
Jup. Dankö

Mfg
DarkAngel
Deutscher Blitz Basic Chat
 

m a j o r

BeitragMo, Jul 18, 2005 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab auch mal so n Tutorial gemacht, ihr könnt ja mal gucken. Is vllt net so toll, aber egal ^^
http://www.bbircbot.de.vu/

edit:
Verbindet man sich mit PONG?
Wusste ich gar net^^
Naja, wusste ja auch net genau was ich bei user angeben muss %)

Neue Antwort erstellen


Übersicht BlitzBasic FAQ und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group