2. Meinung bitte :-I IRC client

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Ticha

Betreff: 2. Meinung bitte :-I IRC client

BeitragSa, März 31, 2007 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute

also iuch hab mich jetzt dran gesetzt und mir einen kleinen client für IRC geschrieben. Untzer windows funktioniert er. Jedoch nur lokal auf meinem eigenen kleinen iRC server von Unreal. Wenn ich allerdings auf einen anderen Servber wie z.B. Gamesurge connecte, liest er vonm meiner eingabe nur noch das letzte wort aus. Vlt könnt ihr ja mal drüber schauen und sagen woran das liegen könnte.

Bei meinem Lokalen IRC server wird der gesamte Satz geschrieben, beim internet server nur das letzte wort von dem was ich schreibe. LEsen tut er alles ohne probleme.

hier mal der code

Code: [AUSKLAPPEN]

'IRC CONNECTION


Global socket:TSocket = CreateTCPSocket()
'   If Not socket.Connect(HostIp("localhost"),6667) RuntimeError("Fehler beim Verbinden")
If Not socket.Connect(HostIp("irc.gamesurge.net"),6667) RuntimeError("Fehler beim Verbinden")
Global stream:TSocketStream = CreateSocketStream(socket)
Global ircconnected:Byte = False



'END IRC CONNECTION

Function connect_IRC()

   stream.writeline("NICK " + user[0,1])

   stream.writeline("USER Ticha 8 * :" + user[0,1])

   Local pingpong$

   pingpong = stream.ReadLine()

   stream.writeline("PONG " + pingpong)

   stream.writeline(" JOIN #test")

   ircconnected = True


EndFunction

Function irc_msgs()
   Local text$,lies:String[300], aus:String[300] , i%,a%=0,b% = 0,c% = 0,test$,laenge%,msg$,nick:Byte = False,nickname$
   Local z% = 0,tauschen$


If Not socket.ReadAvail()
Else
      text = stream.readline()
         'Print text   
      For i = 0 To 100 Step 1
            laenge = Len(text)
         laenge = laenge - 1
         If Mid(text, b, Len(text) - laenge) <> Null
            lies[i] = Mid(text, b, Len(text) - laenge)
         EndIf
         b = b+1
         Next
'Print "Ende irc stream auslese"
'Print "stream cachen"
         For i = 0 To 99 Step 1
         If lies[i] = ":" And nick = False
              'Print "Nick gecached"
            a = 2
            While lies[a] <> "!" And a < 100
               aus[c] = lies[a]
               a = a + 1
               c = c + 1
            Wend
            For c = 0 To 99 Step 1
               nickname = nickname + aus[c]
            Next
            a = 0
            c = 0
            nick = True
         ElseIf lies[i] = ":" And nick = True
              'Print "message cache"
            a = i
            While  a < 99
               aus[c] = lies[a+1]
               a = a + 1
               c = c + 1
            Wend
            For c = 0 To 99 Step 1
               msg = msg + aus[c]
            Next
            a = 0
            c = 0
            b = 0
            'Print (" -- -- <" + nickname + ">" + msg)
            For z = 0 To 19 Step 1
               SetColor(255,255,255)
               DrawText (ircmsgs[z],100,ircmsg_y)
               SetColor (colora,colorb,colorc)
               ircmsg_y = ircmsg_y + 15
            Next
            loc_y = 500
            If msg = "kick " + user[0,1] And nickname = "blubb"
               error("Kicked by Admin ")
            EndIf
            If msg_count < 19
               msg_count = msg_count + 1
            Else
               For z = 0 To 18 Step 1
                  ircmsgs[z] = ircmsgs[z+1]
               Next
            EndIf
            ircmsgs[msg_count] = ("<" + nickname + ">" + msg)
            'Print "Message gecached"
            msg = ""
            nickname = ""
         EndIf   
         Next 
   nick = False
'Print "nick false"
   'Print "leere Cahche"
   For i = 0 To 99 Step 1
         lies[i] = Null
         aus[i]  = Null
   Next
   'Print "Cache geleert"
   text = ""
EndIf
'Print "End funtion"
EndFunction

Function draw_irc_msgs()
   Local z%,ircmsg_y% = 575
   If clear_irc_msgs = False And ircmsgs[19] <> Null
      For z = 1 To 19
         ircmsgs[z] = ""
      Next
      clear_irc_msgs = True
   EndIf
   For z = 11 To 19 Step 1
      SetColor(255,255,255)
      'Print ("msg "+ ircmsgs[z])
      DrawText (ircmsgs[z],100,ircmsg_y)
      SetColor (colora,colorb,colorc)
      ircmsg_y = ircmsg_y + 15
   Next
EndFunction

Function send_irc_msg()
   Local z%
   If msg_count < 19
         msg_count = msg_count + 1
   Else
      For z = 0 To 18 Step 1
         ircmsgs[z] = ircmsgs[z+1]
      Next
   EndIf
   If Textfeld[0] = Null
   Else
      ircmsgs[msg_count] = ("<" + user[0,1] + ">" + Textfeld[0])
      stream.writeline(" PRIVMSG  #test " + Textfeld[0])
      Textfeld[0] = ""
   EndIf
EndFunction


####### Ende IRC Functions

######################### IRC TexteingabeFeld ##############################################

Function lies_irc_eingabe()
If MouseX() > 93 And MouseX() < 93+830 And MouseY() < 721+18 And MouseY() > 721 And MouseDown(1)
      textfeld_aktiv = 3
EndIf
   If textfeld_aktiv = 3
         SetColor(0,0,0)
         DrawRect(93,721,830,18)
         SetColor(255,255,255)
           char=GetChar()
          Select char
             Case 0
             Case KEY_BACKSPACE
               'text = Mid(text , 1 , Len(text) - 1)
                textfeld[0] = Mid(text, 1 , Len(text) -1)
         Default
                'text:+ Chr(char)
            textfeld[0] :+ Chr(char)
             End Select
         DrawText (">",94,721)
         DrawText(textfeld[0],102,721)
         SetColor(colora,colorb,colorc)      
      Else
          SetColor(0,0,0)
         DrawRect(93,721,830,18)
         SetColor(255,255,255)
         'DrawText (">",94,721)
         DrawText(textfeld[0],102,721)
         SetColor(colora,colorb,colorc)
      EndIf
      If KeyDown(Key_RETURN) And textfeld_aktiv = 3
         send_irc_msg()
      sleep(100)
      EndIf

EndFunction



Bemerkung: Alle prints die ich ausgeklammert habe sind zum debuggen gedacht und haben mir sehr geholfen, also bitte nicht daran rumnörgeln

Bemrekung2: ICh weiss der Quelltext ist nicht der sauberste und auch nicht der professionelste, trotzdem bin ich froh, dass ich es geschafft habe und bin für tippps wie ich es besser machen könnte dankbar Smile

Bermerkung3: Die Funktionen weren in ein spiel eingefüllt, deswegen und dort in einer main schleife ausgeführt, deswegen bitte nich wundern warum ich keine schleifen in den funktionen habe, die auf eine antwort vom server warten.

Bemerkung4: Der string für die message, also jender den man skebst schreibt, wird richtig eingelsen, da er als vollstzändiger satz ausgegeben wird. Nur sendet der sream den satz nicht zu 100% sondern nur da sletzte wort.


Ich würde mich freuen wenn mir jmd helfen könnte,weil so langsam bin ich am verzweifeln...

EDIT: ich habe etwas merkwürdiges herausgefunden. Bei Blitzed.org schreibt er nur den anfang hin :-I bei Gamesurge nur den schluss... seltsam
 

Ticha

BeitragDi, Apr 03, 2007 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Keiner ? Crying or Very sad Crying or Very sad

rema

BeitragMi, Apr 04, 2007 2:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi... Es ist anstrengend, wenn man einen Quelltext analysieren muss ohne jeglichen Kommentar.

Zbsp was in einer For_Next Schleife gemacht werden soll. Was diese If_Then Bedinung bewirken soll. Auch sind aussagekräftigere Variabelnnamen sehr hinweisreich, da man nicht immer nachschauen muss was nun i, b , a und x bedeutet.. .
 

Ticha

BeitragDo, Apr 05, 2007 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ich edite das dann sofort Smile
 

Ticha

BeitragMi, Apr 18, 2007 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
hab den fehler gefunden. Es liegt anscheinend nicht an meinem code sondern am irc-protokoll.

Wenn jmd einen IRC chat braucht kann er gerne diesen code benutzen wenn er durchblickt Smile ist eigentlich ganz und leicht zu intergrieren in eine BM programm Smile (wenn ich mein spiel mal präsentiere wird man sehen wie es funtkioniert Smile )

ICh hab das ganz zuerst lokal auf einem unrealircd getestet wo es auch funktionerit hatte, als ich dann auf dem gamesurge und Blitz und EUIRC getestet habe kam dann der fehler. ICh habe wochenlang darpüber gegrübelt und alles versucht bis ich dann auf den irc.unrealircd.com chat gewechselt habe um zu testen ob es vlt am IRC sevrer liegt. Und ja es hat funktioniert. Smile auf dem unrfeal server funktioniert es pohne probleme somit werde ich auch den IRC channel von mir auf den unreal server verlegen Wink

aber danke an alle die sich die mühe gemacht haben und sich den code angeschaut haben Smile

nun bitte ich darum dieses Thema zu schliessen Smile

danke gruss Ticha Smile

(evtl kann man auch den code in die kategorie codeschnipesel verlegen :-I )

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group