TIRC, IRC Modul, superleicht!
Übersicht

![]() |
HummelpupsBetreff: TIRC, IRC Modul, superleicht! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Community,
und noch ein großes Topic von mir, man, viel zu schreiben bevor ich ab morgen flash liege ^^. Es geht um ein IRC Modul, welches ich seit gestern programmiere und schon super läuft. Ich habe hier mal einen TestSource geschrieben um euch zu zeigen, wie leicht IRC Connections mit diesem Modul sind. Code: [AUSKLAPPEN] Strict
'Importiert das Modul Import iud.tirc Graphics 800,600,0,60 Local chatbuffer:String 'Temporäre speicherung der Input Routine Local msg_buffer:String[1024] 'Der MsgBuffer, der angezeigt wird und mit dem Buffer des Moduls 'abgeglichen wird Local steps:Int Global last_chat:String Global chat:String Local stream:TIRCStream=New TIRCStream stream.ConnectTo("irc.blitzed.org","DeinName") stream.WaitUntilConnected 'Wartet bis wirklich zum Netzwerk connected wurde 'In dieser Methode ist eine Schleife, es hält also das 'Programm an, es gibt aber ein Workaround dafür Stream.JoinChannel("#wayne") 'Joint einem Channel 'Stream.SetActiveChannel("#wayne") 'Diese Methode ist nur bei mehreren Channels nötig 'Mit SetActiveChannel wird ausgewählt, wo die Kicks, 'Die Modeanweisungen, die Parts und alle anderen Aktionen 'gehen. Repeat Cls stream.do() 'Fragt das Netzwerk ab, fügt User hinzu, löscht sie 'Und antwortet - wenn eingestellt, std.: ja - auf Pings msg_buffer=stream.getmessagebuffer() 'Fragt den Buffer der Session ab, er ist auf '1024 Zeilen begrenzt. 'Standardanzeige zum testen For steps=0 To 40 DrawText msg_buffer[steps],5,500-steps*15 Next 'Chat if InputRoutine()=1 then Stream.SendChatMsg(chat) ; chat="" drawtext chat,5,550 Flip Until KeyHit(key_escape) stream.SetQuitMsg("Byebye") 'Setzt die Quit Msg, kann auch am Anfang gesetzt werden stream.Quit 'Beendet die IRC Sitzung stream.Free 'Schließt TCP Stream, löscht eigene Instanz Function InputRoutine:byte() Local input_key=GetChar() Local return_value:String If input_key Then If input_key=13 Then return 1 last_chat=chat Else If input_key=8 If Len(chat)>0 Then chat=Left(chat,Len(chat)-1) Else If input_key>=32 And input_key<127 chat=chat+Chr(input_key) EndIf EndIf return 0 End Function Im Modul sind natürlich noch mehr Methoden und Funktionen enthalten. Sie sind nicht alle dokumentiert, hab heute echt keine Zeit mehr gehabt. Mach ich später mal. Ist natürlich auch schon auf unserem Portal Modulserver. Scope: iud IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
- Zuletzt bearbeitet von Hummelpups am Sa, März 03, 2007 15:21, insgesamt einmal bearbeitet
Ticha |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hey cool, genau das was ich suche. Nur irgendwie funtioniert der Link zu dem Modul nimmer ![]() |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo soll es auch nicht.
Es soll umstrukturiert werden...irgendwann. |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Ticha |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
schade, so was hätt ich gebraucht ![]() |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin gerade am umstrukturieren, bald ist die nächste sehr gut funktionierende
Version fertitsch. Wer hat denn noch Interesse an diesem Modul außer Ticha??? IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
Wild-Storm |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich werde zwar sicherlich jetzt keinen IRC Clienten schreiben (oder doch? XD) aber ich fände es sehr interessant mal hinter die Kulissen von IRC zu blicken und zu sehen, wie das ganze funktioniert! Vorallem da ich im Thema Netzwerk nicht so der Pro bin... | ||
Visit http://www.next-dimension.org
------------------------------------------------- Freeware Modelle, Texturen & Sounds: http://www.blitzforum.de/forum...hp?t=12875 |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, hier mal der kleinste ConsoleIRCClient den ich kreiren konnte.
Leider mit dem üblichen problem das bei Eingaben das Programm angehalten wird. Darum gehts aber auch nicht sondern eher wie leicht es ist zu nem Server zu connecten. Code: [AUSKLAPPEN] Import iud.tirc
Global stream:TIRCStream=New TIRCStream stream.ConnectTo("localhost","TestName",6667) stream.WaitUntilReady;stream.JoinChannel("#ch1"); Local msg:String;Repeat;stream.do; For msg=EachIn stream.GetNewMessageBuffer() Print msg;Next;msg=Input(">");stream.SendChatMsg(msg) Until msg.toupper()="QUIT";stream.quit;End Es werden bisher erkannt: - JOIN - PART - NICK - Topics - Nicklists - OP,Voice, was auch immer bei Changründung - LIST - Diverse Zahlencodes Was noch ansteht: - DCC vielleicht - Private Messages - Chan Modes - Usermodes IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann übrigens per select abfragen, ob was von der StdIn zu lesen ist.
Edit: Mal ein beispiel, wie ich das meine: Code: [AUSKLAPPEN] While True
Local n:Int = 0 If select_(1,Varptr _n,0,Null,0,Null,0) Then Print "New!" Local s:String = Input("") If s = "end" Then End Print s EndIf Print "Still running..." Delay(100) Wend |
||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktioniert bei mir nicht so wie es vielleicht funktionieren sollte.
Kann das noch nen win(ner) hier bestätigen? Bei mir bleibt er immer beim "New" hängen. IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, stoppt nach New! | ||
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, dann scheint sich die Win Console ja nicht so weit austriksen zu
lassen das es geht ![]() BtbN meint es funzt auf Mac OS und Lin. Naja, war ja auch nur so zur anschauung wie kurz es sein kann, es aber natürlich nicht wird ;D IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das funktioniert auch unter Windows.
Aber Input ist ein blocking call. Solange du kein Enter gedrückt hast wird auch nix passieren. darum erscheint der rest nicht. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf Linux funktioniert es in dem sinne, dass es nicht blockiert.
Auf Windows ist dies mit select nicht möglich, da dieses dort ausschließlich für WinSock zuständig ist. Wenn ichs der MSDN richtig entnehme, ginge es auf Windows mit folgender C-Funktion: Code: [AUSKLAPPEN] int stdInAct_(int millis)
{ WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE),millis); } Könnte das wohl wer testen? |
||
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wozu das Input-Objekt austricksen? Es gibt andere Möglichkeiten eine asynchrone Eingabe-Routine zu entwickeln.
Zudem hat das ganze Modul noch einige Schwachpunkte, da müsste dringend mal extrem aufgeräumt werden. Der Anfang ist sicher nicht schlecht, aber der Code könnte noch extrem reduziert werden. Da ich hier gerade für ein Unternehmen eine Netzinterne Chat-Lösung programmieren soll, kam mir das Modul gerade recht, da ein Linux-Server mit installiertem IRC Server zur Verfügung steht. Aber die Haken und Ösen in dem Modul haben mich dann doch dazu gezwungen auf Vertex' BnetEx auszuweichen und ein eigenes Protokoll auf UDP aufzusetzen. Ich will auf keinen Fall die hier geleistete Arbeit abwerten, nur wirklich benutzbar ist das Modul derzeit noch nicht. Ich wünsche aber viel Erfolg beim weiterentwickeln dieser großartigen Idee. |
||
Farbfinsternis.tv |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh, tut mir leid ![]() Der Status in dem es sich befindet steht in keiner Relation zu dem, was es nun schon kann. Habe den neusten Code nur noch nicht hochgeladen. Es wäre natürlich nett wenn du mir deine Haken und Ösen nennen würdest! Wenn du darauf anspielst, das man bei dem momentanen Modul einfach QUIT als msg eingeben kann und der Client denkt jemand quittet ist längst behoben, solche Bugs können nicht mehr benutzt werden. Es wird längst nicht mehr nur nach einen keyword gesucht sondern nach spezifischen zeichenketten, also eine perfekte kombination aus UserNickname, Keyword, channel, was auch immer. Vielleicht kannst du es doch benutzen! Desweiteren nutzt TIRC BNetEx ![]() hast, dann poste sie doch bitte, dann kann ich dir sagen ob die "Sicherheitslücken" oder andere Lücken bereits gefixt worden sind ![]() ich BRL.Retro auch komplett verbannen, wird auch demnächst geschehen. Es kann ja aber auch sein das du einfach nicht interessiert bist an jemanden der nach Shadern für BMax ruft aber gerade mal den Print Befehl verstanden hat. DAS verstehe ich als "runtermachen" !!!! Nur mal so ![]() (Vielleicht erinnerst du dich ja noch!) IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
Freeman |
![]() Antworten mit Zitat ![]() |
---|---|---|
wollt eigetnlich dein modul testen, doch leider muss ich feststellen das du es gar nicht hochgeladen hast. schade schade.
Fr3eMaN |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie gestern schon gesagt ist eine alte version auf dem Blitzhelp Modserver.
Ich kann natürlich mal die neue Version hochladen, dann muss ich sie aber noch ein wenig dokumentieren. Eigentlich wollte ich den Source nicht mehr freigeben bis soweit die normalen Dinge funktionieren aber is egal ![]() Hier: Das aktuelle Modul, weiterhin noch nichts aufgeräumt, aber ein wenig sicherer gemacht, brl.retro wird noch ausgebaut. www.blitzhelp.net/tmp/tirc-1.46.rar Und hier mal nen Beispiel: www.blitzhelp.net/tmp/tirc_ex.rar Feedback wie immer willkommen aber bitte beachtet, das ich noch nichts aufgeräumt hab und es vorerst um die funktionalität geht ![]() IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, alles komplett neu gemacht und funktioniert einwandfrei!
Neuste Version gibs hier zum Download, Sample und Source ist auch mit dabei. Probierts aus und verwendet es. Code: [AUSKLAPPEN] Framework brl.standardio
Import brl.win32maxgui Import brl.graphics Import brl.max2d Import brl.glmax2d Import brl.blitz Import brl.timer Import iud.tirc Strict SetGraphicsDriver GLMax2DDriver() AppTitle="BMXIRC Module Test" Graphics 800,600,0,60 SetClsColor 255,255,255 Cls SetColor 0,0,0 Include "init.bmx" While Not KeyHit(key_escape) Cls WaitTimer(timer) lc=input_routine() If lc<>"" Then parse_lc(lc) msg_buffer=stream.GetMessageBuffer() DrawText stream.ready(),2,2 If KeyHit(key_5) Then Local tmp_channel:TIRCChannel Local tmp_user:TIRCUser For tmp_channel=EachIn stream.GetChannellist() Print ">"+tmp_channel.name+"<" For tmp_user=EachIn tmp_channel.Userlist Print "- "+tmp_user.status+" "+tmp_user.Nickname Next Next End If 'ZEICHNEN DrawText input_chat+"_",2,580 msg_show(40) Local tmp_y=0 Local tmp_user:TIRCUser DrawText "("+stream.ActiveChannel+")",600,85 If stream.GetUserList()<>Null Then For tmp_user=EachIn stream.GetUserlist() DrawText tmp_user.nickname+" ("+tmp_user.status+")",600,100+tmp_y tmp_y:+10 Next End If stream.do Flip Wend Function INPUT_ROUTINE:String() Local Input_key=GetChar() If Input_key Then If Input_key=13 Then Input_chat_before=input_chat If Chr(input_chat[0])="/" Then Return input_chat[1..] ElseIf(Chr(input_chat[0])="*") stream.SendChatMsg(input_chat[1..]) Input_chat="" Else stream.SendString(input_chat) Input_chat="" End If Else If Input_key=8 If Len(Input_chat) > 0 Then Input_chat=Input_chat[..(Len(Input_Chat)-1)] Else If Input_key>=32 And Input_key<127 Input_chat=Input_chat+Chr(Input_key) EndIf EndIf Return "" End Function Function MSG_SHOW(lines:Short) Local steps:Int For steps=0 To 1023 If 550-steps*15+offset_y>=-15 And 550-steps*15+offset_y<=615 Then DrawText msg_buffer[steps],2+offset_x,550-steps*15+offset_y End If Next End Function Function parse_lc(txt:String) txt=txt+" " Local command:String Local paras:String command=txt[..txt.find(" ")].toupper() paras=txt[txt.find(" ")+1..] paras=paras.trim() Select command Case "J" stream.JoinChannel(paras) Case "A" stream.SetActiveChannel(paras) Case "JOIN" stream.JoinChannel(paras) Case "PART" stream.LeaveChannel() Case "P" stream.LeaveChannel() Case "CLS" Local steps:Int For steps=0 To 1023 msg_buffer[steps]="" Next End Select input_chat="" End Function OnEnd terminate Function terminate() stream.SetQuitMsg("Und tschoe") stream.Quit End Function Viel Spaß damit! IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group