Multi- Chat erstes release

  • Wie findet ihr den Chat? 4

    1. Sehr Gut (2) 50%
    2. Gut (2) 50%
    3. Naja (0) 0%
    4. Schlecht (0) 0%
    5. Sehr Schlecht (0) 0%

    Suche noch einen HOST für einen "offiziellen" server. Bitte per PN melden
    Das ist eine Idee, die ich vor langem schon hatte, aber nie Lust und Zeit hatte sie zu realisieren.

    Bis jetzt ^^


    Es gibt einen Server und einen Client.


    Der Server kann von biszu 9999999 Clients gleichzeitig connected werden. Und das alles paralell. ( Theoretisch )

    Funktionen:


    - Willkommensnachricht

    - Chat xD

    - Admin- status

    - Kick

    - Ban

    - Durchsage

    - Whisper


    - Webradio

    -Serverliste

    ToDo- List:
    - Whisper Funktion (100 % )
    - Admin- Menü zu Chat befehlen umwandeln ( 100 % )
    - Smilies hinzufügen ( Failed :( )
    - Erkennung von url's ( 100 % )
    - Farbiger Text (100% )
    - Neues Design ( 100 % )
    - Webradio einbauen (100 %)
    - Serverliste (100%)

    0 % --> Noch nicht angefangen
    100 % --> Bugfrei fertig zum Release


    Bilder:
    autoit.de/wcf/attachment/7912/
    Schöne Aero Msgboxen
    autoit.de/wcf/attachment/7984/
    Das Chatfenster
    autoit.de/wcf/attachment/7985/
    Die Serverauswahl
    autoit.de/wcf/attachment/7986/
    Auch auf Xp sieht der Chat schön aus
    autoit.de/wcf/attachment/7987/


    Download: (.exe Aktuellste Version)


    zum auflisten der chat- command bitte /hilfe eintippen
    Bitte den Server NICHT eintragen lassen, wenn keine Ports geöffnet sind!!!

    Client:
    .exe
    .au3

    Server:
    .exe
    .au3


    GREEEZ

  • hey..an sich schonmal net schlecht...

    funktioniert auch ziemlich gut..über internet werde ich morgen mal testen, aber was noch cool wäre, ist wenn man eine einzelne person anschreiben könnte ohne dass es die anderen lesen...so ne art whisper

  • wer in dem code durchblickt und helfen will, dieses Projekt zu vollenden, kann sich gerne bei mir melden.
    @Reaker: werd ich versuchen einzubauen, wird sich aber als schwirig erweisen, wenn der server so viele sachen gleichzeitig zu erledigen hat. Eine Verbindungsanfrage, eine Öffentliche Nachricht und eine Private Nachricht zur gleichen zeit überfordern den server bereits

    Greez

  • hm..wie schauts dann aus wenn da 10 leute gleichzeitig chatten? ... da wirds ja dann garnemma gehen...

    es gibt außerdem noch ein paar bugs und zwar bei make admin hängt das programm sich auf, wenn man seinen namen ändert wird dieser in der clientliste nicht geändert, und verschwindet auch nicht wenn man offline geht...du solltest noch eine funktion einbauen die prüft ob die clients noch da sind, weil falls die internetleitung zusammenbricht kann schlecht offline noch an den server gesendert werden...

    so zwar etwas viel kritik aber das muss gemacht werden^^

  • richtig schick. gefällt mir sehr gut.
    habe es nur im intranet getestet, läuft aber stabil.
    wenn ich zeit finde kann ich dir gerne behilflich sein beim coden. -> PN

    verbesserrungsvorschläge:
    die Inidateien im @Scriptdir belassen und nicht auf c:\ im root, vieleicht auch versuchen ohne ini aus zu kommen ;)
    verschlüssellung der nachrichten beim Senden und Empfangen (crypt.au3)
    anstatt mit button zu arbeiten und extra Gui, zum setzten der rechte oder auch zum kicken, mit schalteroptionen im send text arbeiten, z.b. /kick username
    die Eingabe der serveradresse vielleicht etwas dynamischer gestallten, wenn der server z.b. via dyndns oder ähnliches läuft (_nametoip)
    Designtechnisch gibt es natürlich so gut wie keine grenzen, alos ich persönlich stehe auf leicht tranzparente fenster im aero design.

    ansonsten weiter so

    Gruß
    Pretrojaner

  • @ reaker: Chatten geht, nur das mit dem verbinden ... wenn 2 leute gleichzeitig verbinden, bekommt der eine keine antwort ^^.

    Habe jetzt aber eine Funtkion eingebaut, die wenn der Client nur eine halbe verbindung macht, wieder vom server gelöscht wird, anstatt auf eine antwort zu warten. Den Bug werd ich fixen


    @protrojaner: Ich nehme deine Hilfe gerne an ^^. Ohne ini gehts wahrscheinlich nicht ( will nich in die reg ). Der Rest lässt sich machen. Aber erstmal muss der chat im internet laufen, befor man ihn auf's internet einrichtet ^^.


    ps: chat- client hat jetzt mehrere sprach versionen ^^


    Greez

  • so ist es bis jetzt ja auch schon ^^


    Die Parameter werden beim ersten verbinden an den server gesendet und dort wird eine "kartei" erstellt.
    Bei jedem weiteren Verbinden wird die kartei aufgerufen und der name, admin status und bann status ausgelesen


    Beim client wird in die ini geschrieben admin=1, das lässt aber nur den admin button erscheinen. Ob er dann auch admin ist, dass steht in der "kartei" des servers.


    win.ini --> Server

    winc.ini --> Client

  • 1. kann man sich den Sourcecode auch irgendwo downloadn?! - ich seh bei mir keinen Link oder Anhang, o.Ä.

    2. Kommt dein Server schon mit gleichzeitigen Anfragen zurecht? - Also wenn 2 Personen wirklich nahezu gleichzeitig etwas an den Server senden?
    Ich hab auch mal einen Multichat geschrieben, und hab dort eine Art Zwischenspeicher eingebaut.

    Sieht so aus:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    For $iIndex = 0 To UBound($aUsers, 1) - 1
    $TempData = TCPRecv($aUsers[$iIndex][0], 8192)
    Select

    [/autoit] [autoit][/autoit] [autoit]

    ; Hier sind normalerweise noch andere Case-Abfragen drinnen

    [/autoit] [autoit][/autoit] [autoit]

    Case StringLen($TempData) > 0
    _ArrayAdd($aData, $TempData)

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    Next
    If StringLen($aData[(UBound($aData, 1) - 1)]) > 0 Then

    [/autoit] [autoit][/autoit] [autoit]

    For $iIndex = 1 To UBound($aData, 1) - 1

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aUsers, 1) - 1
    TCPSend($aUsers[$i][0], $aData[$iIndex])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Vielleicht kannst du's ja brauchen, aber wenn du es einbaust, wäre ne Erwähnung nett ;)

    Ich häng dir mal den ganzen Chat an, falls du Interesse hast.

  • den sourcecode wird beim release angehängt ( wenn die todo- list abgearbeitet ist )

    So ein ähnlichen zwischenspeicher hab ich auch ^^

    nur können bei mir zur exakt gleichen zeit 2 clients verbinden. ( weis nicht ob das bei dir auch geht )


    edit: dein script lässt sich bei mir wegen haufenweisen errors nicht starten

    Greez

  • hmmm... Ein wenig umständlich aber man könnte doch alle Nachrichten die geschickt werden in eine Temporäre Datei schreiben die hochgeladen wird auf einen Server und dann von allen Clients runtergeladen wird und in das Chatfenster geladen wird.

  • was sollte das bringen? - wenn du dadurch das Verlorengehen von Nachrichten verhindern willst, dann zeig mir eine Variante bzw einen Hoster, sodass die Nachrichten auch in ~ 1 Sekunde ankommen

    Mit so einem Buffer, wie ich in gepostet habe und Scripter192 in offensichtlich auch verwendet, gehen sehr sehr sehr wenige bis gar keine Nachrichten verloren.
    Wenn du dann noch ein Zeitlimit einbaust, damit kein Spambot den Server lahm legen kann, dann kann eigentlich nichts mehr schief gehen ;)

  • nur können bei mir zur exakt gleichen zeit 2 clients verbinden. ( weis nicht ob das bei dir auch geht )


    edit: dein script lässt sich bei mir wegen haufenweisen errors nicht starten

    Greez

    hmm, zu den Clients..
    Bei mir läuft ne Adlibfunktion, die alle 50ms überprüft, ob sich ein Client verbinden will.
    Zur exakt gleichen Zeit geht nicht, zumindest nicht in AutoIt ;)

    zu den errors, das liegt an der neun AutoItversion, habs noch nicht an die angepasst, mom

    EDIT: so habs angepasst, müsste jetzt funktionieren, bei mir kommen weder Errors noch Warnungen =)

  • joa .. nicht zu genau der exakt gleichen zeit ^^ , aber zum beispiel 1 ms später.
    Ich weis nicht wiso, aber tcprecv gibt auch emfangene nachrichten aus, die vor dem aufrufen der funktion geschickt wurden. Das kann man beweisen, indem man einfach mal ne msgbox in den source code einbaut der empfangene nachrichten anzeigt. Wird die msgbox aufgerufen, wird das script pausiert. Sendet man jetzt eine Nachricht an den Server und drückt danach auf Ok der msgbox, wird die nachricht angezeit, die in der zeit empfangen wurde, inder das script pausiert war ^^

  • Das Skript "wartet" ja nur auf einen Button, also weshalb sollte eine Adlib zB nicht laufen.
    Wenn du das TCPRecv allerdings ein einer Schleife mit einer MsgBox hast, kann ich mir das schwer vorstellen, außer es läuft irgendwie so:

    TCPRecv gibt eine Art "Speicherstelle" frei wenn es aktiviert wird => MsgBox kommt => Client schreibt etwas in die Speicherstelle => MsgBox geht weg => TCPRecv schaut in die Speicherstelle und findet etwas..
    Anders könnte ich es mir nicht erklären, aber wenn es jemand besser weis, ich lasse mich gerne belehren. Bin nicht wirklich ein Profi was TCP angeht.