2. Meinung bitte :-I IRC client
Übersicht

TichaBetreff: 2. Meinung bitte :-I IRC client |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Keiner ? ![]() ![]() |
||
![]() |
rema |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok ich edite das dann sofort ![]() |
||
Ticha |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() ![]() ![]() 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. ![]() ![]() aber danke an alle die sich die mühe gemacht haben und sich den code angeschaut haben ![]() nun bitte ich darum dieses Thema zu schliessen ![]() danke gruss Ticha ![]() (evtl kann man auch den code in die kategorie codeschnipesel verlegen :-I ) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group