SkrivaPrisma 8 - TCP Chat

    • Beta
    • Closed Source

    Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von radio-ffk.

      SkrivaPrisma 8 - TCP Chat



      Vorbemerkung
      Ich freue mich nach jahrelanger Arbeit und 7 anderen Versionen endlich soweit zu sein, die achte Version von SkrivaPrisma veröffentlichen zu können.
      Auch wenn diese Version noch lange nicht die finale ist, ist es meiner Meinung nach Zeit, eine Beta zu veröffentlichen um mehr Feedback zu erhalten.

      Also was ist das?
      SkrivaPrisma ist ein TCP-basierter Chat der auf dem Tutorial von Kevin (Multiserver (TCP)) basiert, und von mir und meinen Freunden erweitert und (hoffentlich) verbessert wurde.

      Features (stark gekürzt)
      - Individuelles Erscheinungsbild
      - 2 Singleplayerspiele (Zahlenraten (Zahlen zwischen 0 und 100) und Tetris (num 1-0 regelt den Speed))
      - 2 Multiplayerspiele (Ladebalkenrennen und Stadt Land Fluss (siehe unten))
      - Gruppensystem mit geregelten Rechten
      - Managementsoftware zum einfachen Verwalten von Benutzern und Gruppen
      - Dateiübertragung
      - internes Updatesystem zum einfachen Verteilen von neuen Versionen an alle Benutzer
      - Chathistorie
      - Onlineliste
      - Formatierungen (Rechtsklick auf die Textbox) (auch #Hexcodes)
      - Jumplist
      - Vielzahl an Commands

      Einrichtung

      Da SkrivaPrisma in erster Hinsicht ein lokaler Chat ist, muss immer ein Benutzer den "Host" spielen und den Server laufen lassen. Bei diesem Benutzer liegen auch die Konfigurationsdateien des Chats. Der Server kann allerdings auch auf jedem anderen PC ausgeführt werden, dabei sollte darauf geachtet werden dass auf dem Weg vom Server-PC bis zum Internet der Port 41100 freigegeben ist. (Firewall, Router etc.)

      Ich habe zu Testzwecken 2 Benutzer erstellt und das Management um den Anmeldeprozess gekürzt um das Testen für euch so einfach wie möglich zu gestalten.

      Die Benutzerdaten sind:

      Benutzer 1 (Gruppe Admin)
      ID 0000
      PW alpine

      Benutzer 2 (Gruppe User)
      ID 0001
      PW test

      Ihr könnt im Management allerdings jederzeit neue Benutzer hinzufügen.

      Schritt 1: Server starten.
      Schritt 2: Die promo-user.festival in die Konsole ziehen und Enter drücken.
      Schritt 3: Die promo-permissions.festival in die Konsole ziehen und Enter drücken.
      Schritt 4: Client starten und anmelden.

      Ein paar Commands erklärt


      /clsall

      /prefix|%NAME%|%PREFIX%|keep
      Leert alle Chatfenster

      Ändert den Prefix (Teil vor der Chatnachricht)
      <T> stellt die Uhrzeit da. Formatcodes stehen im Contextmenü wenn /prefix| eingeben wurde. Diese dann in <> einfügen.
      /mq|flow|%TEXT%|%FARBE%

      /mq|perm|%TEXT%|%FARBE%

      /mq|loop|%TEXT%|%FARBE%

      /mq|stop
      Laufbandtext über dem Chatfenster ändern

      flow: Läuft einmal durch

      perm: Erscheint nach flow

      loop: Dauerschleife bis Unterbrechung

      stop: Setzt alles zurück

      (Anmerkung 1)
      Klick auf einen User in der Liste
      Bietet Möglichkeiten der Moderation


      Zu Anmerkung 1:


      Wenn ihr keine Farbe angebt, wird automatisch die Akzentfarbe des jeweiligen Benutzer gewählt.
      Ein paar Testfarben (alle Farbnamen in der colors.txt im Anhang):

      WP 8.1/Red

      WP 8.1/Lime

      Stadt Land Fluss
      Weil es (noch) ein bisschen kompliziert ist, hier kurz erklärt.

      Alle Mitspieler öffnen das Spiel. Ein User spielt wieder den Host und gibt ein 'CREATE $$$ %'. Wobei $$$ irgendwelche 3 Zeichen seien müssen, diese werden der Spielname. % ist die Rundenanzahl.

      Dann joint jeder Mitspieler indem er 'JOIN $$$' eingebt. (statt $$$ natürlich die 3 Zeichen von eben). Wenn alle Spieler gejoint sind, gibt der Host 'START' ein.
      Ist die Zeit einer Runde abgelaufen, klickt der Host auf die 0 um die Punkte berechenen zu lassen und gibt dann 'NEXT' ein.

      Screenshots
      Nicht viele aber ich glaube es reicht um zu wissen wie ein Chat aussieht. ^^


      Download

      SkrivaPrisma8Beta-Promo.zip

      Sontige Infos
      Besten Dank an @~blaze~ für seine INILib
      Besten Dank an meine Klasse für all die Anregung und die Ideen
      Erstellt mit Visual Studio 2013 Professional
      Programmiert in VB.NET und mühsamer Kleinstarbeit
      Dieses Programm ist Closed Source bis ich sinnvoll überzeugt bin es Open Source zu stellen.

      Was noch?

      Nichts. Danke dass ihr bis hier gelesen habt, und danke dass ihr bereit sein SkrivaPrisma zu testen.
      Habt bitte noch ein besonderes Augenmerk auf englische Stellen, da ich dabei alles auf Deutsch umzustellen und dann Languagepacks zu verwenden.

      Mit freundlichen Grüßen
      Fabian
      Dateien
      • colors.txt

        (1,02 kB, 230 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „radio-ffk“ ()

      Mit dem neuen Update können nun auch Hex-Farbcodes verwendet werden, um Texte zu formatieren. (Dank an @Link für sein RegEx-Tutorial)
      Am Nachrichtenbeginn muss ein Apostroph (') vorangestellt werden, wenn die Nachricht mit einem Hex-Code beginnt.
      Die Formatierungen können auch selbstverständlich mit den existierenden kombiniert werden. 8-)

      Ansonsten wie immer, danke fürs Testen (wer es auch immer macht). Ich freue mich über jede Rückmeldung.
      Finde ich wesentlich besser als manch andere TCP-Chats. Relativ schickes minimalistisches Design und Commands.
      Mich würde die Implementierung aber mal interessieren - Interesse an Open Source?
      Wenn man das rechte Fenster bewegt bleibt das linke da wo es ist, andersrum funktioniert das besser.

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Das ist völlig okay so, würde daran nichts ändern. Den Login könnte man aber tatsächlich direkt ins Chatfenster einbauen.

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

      Andy schrieb:

      Aber, ich hätte ein Login Form gemacht.

      Das ist doch auf dem zweiten Bild zu sehen.

      Nikx schrieb:

      Den Login könnte man aber tatsächlich direkt ins Chatfenster einbauen.

      Versteh ich ehrlich gesagt nicht :rolleyes:

      Nikx schrieb:

      Finde ich wesentlich besser als manch andere TCP-Chats.

      Danke. :thumbup:

      Nikx schrieb:

      Mich würde die Implementierung aber mal interessieren

      Implementierung von was?

      Ansonsten danke für die ersten Rückmeldungen. :thumbsup:



      Edit: Ihr könnt im übrigen die Anmeldedaten speichern. > Verknüpfung erstellen und als Startparameter die Daten in folgendem Muster anfügen:

      ...\SkrivaPrisma.exe IP ID Passwort False

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „radio-ffk“ ()

      Sieht cool aus und funktioniert. Aber ich würde mal die Rechtschreibung etc. überprüfen(Groß- und Kleinschreibung ist katastrophal). Ich würde das auch mal ein bisschen unkomplizierter gestalten z.B. beim Speichern einer Datei, dass man dabei nicht irgendeinen Command eingeben muss, sondern ein Fenster kommt. Außerdem ist bei mir Tetris verbuggt, wenn ein Block unten angekommen ist, kann man den noch für 2 Sekunden nach Links und Rechts bewegen.

      EDIT: Und beim Server, wenn ich eine Datei hinein ziehe, sind davor und danach solche Anführungszeichen. Die muss man dann immer selber entfernen. Könntest du vielleicht per Code lösen ;)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xd-franky-5“ ()

      xd-franky-5 schrieb:

      die Rechtschreibung etc. überprüfen(Groß- und Kleinschreibung ist katastrophal)

      Hast du dafür ein paar Beispiele? Oft ist das nämlich gewollt. Die Menü-Punkte zum Beispiel sollen allen klein geschrieben sein.

      xd-franky-5 schrieb:

      beim Speichern einer Datei, dass man dabei nicht irgendeinen Command eingeben muss, sondern ein Fenster kommt

      Kommt. Danke für den Vorschlag. :thumbup:

      xd-franky-5 schrieb:

      ein bisschen unkomplizierter gestalten

      Mehr Stellen die zu kompliziert sind außer dem Speichern und der Stadt Land Fluss-Steuerung?

      xd-franky-5 schrieb:

      Außerdem ist bei mir Tetris verbuggt, wenn ein Block unten angekommen ist, kann man den noch für 2 Sekunden nach Links und Rechts bewegen.

      Bug ist bekannt, leider weiß ich dafür keine Lösung. :/
      @xd-franky-5 Das war nicht meine Entscheidung. Auf Nachfrage bei meinem Freund: "Weils besser aussieht".

      xd-franky-5 schrieb:

      Und beim Server, wenn ich eine Datei hinein ziehe, sind davor und danach solche Anführungszeichen. Die muss man dann immer selber entfernen. Könntest du vielleicht per Code lösen

      Das liegt dann an deinem Pfad. Der beinhaltet wahrscheinlich ein Leerzeichen. Ich hau mal ein Replace in den Code :thumbup:

      Update

      xd-franky-5 schrieb:

      beim Speichern einer Datei, dass man dabei nicht irgendeinen Command eingeben muss, sondern ein Fenster kommt

      Es gibt nun ein Übersichtsfenster mit allen versendeten Dateien. skrivaprisma > dateien.
      Zum Speichern einfach einen Rechtsklick auf die jeweilige Datei.


      Die Möglichkeit, Dateinamen festzulegen, folgt.

      Außerdem gab es einige Verbesserungen am Server.

      Download im Startpost. :thumbup:

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „radio-ffk“ ()

      Wenn man Dateien, bei denen der Pfad ein Leerzeichen enthält in die Serverkonsole zieht, werden ​" vorne und hinten angefügt. Dadurch erkennt das Programm den Pfad nicht.
      @nafets Stimmt.

      Update
      Die Anführungszeichen werden nun automatisch aus allen Pfadangaben gelöscht.
      Außerdem können Dateien mit /file nun auch von der Serverkonsole aus versendet werden.

      Download im Startpost. :thumbup:
      Und noch ein
      Update
      Der Dateitransfer wurde nochmals überarbeitet.
      Neue Features:
      • Drag & Drop von Dateien auf das Dateifenster möglich um Dateien der Warteschlange hinzuzufügen
      • Dateien können nun vor dem Versenden umbenannt werden. Rechtsklick > datei umbennen
      • Dateien können einzeln oder in ganzen Warteschlangen versendet werden
      • Bereits empfangene Dateien lassen sich aus dem temporären Speicher löschen (empfehlenswert, da diese Dateien in den RAM gelegt werden)
      Screenshots


      Weitere Änderungen:
      • BorderStyle des Anmeldefensters auf FixedSingle gesetzt
      • Eine GitHub-Repository wurde eingerichtet (github.com/vainamov/skrivaprisma) > Vorbereitung auf OpenSource läuft
      Download im Startpost.
      Viel Spaß und danke fürs Testen :thumbup:

      radio-ffk schrieb:

      Bereits empfangene Dateien lassen sich aus dem temporären Speicher löschen (empfehlenswert, da diese Dateien in den RAM gelegt werden)


      Find ich als schlechte Lösung, empfangene Dateien im RAM zu speichern/behalten.
      Was machst du, wenn eine Datei empfangen wird, die größer als der verfügbare Arbeitsspeicher ist?
      Dann gibts ein Leak und deine Applikation stürzt ab.
      Überdenke das nochmal.

      Grüße
      @OMA Das Problem ist ja das Dateien als Base64 String übertragen werden, welcher nach Empfangen in eine Datei zurück konvertiert wird. Dieser String landet zwangsläufig im RAM. Ich wüsste jetzt keine andere Lösung für dieses Problem.
      @radio-ffk
      Vielleicht nicht als Base64 String verschicken, sondern paketweise als Byte-Array? Das entlastet nicht nur den Arbeitsspeicher, das beschleunigt die Übertragung auch um ca. 33 %.
      Mfg
      Vincent

      Jo. Der FileStream auf der Sender-Seite schickt zuerst die komplette Größe der Datei. Anschließend wird die Datei in Pakete aufgeteilt (zB 2048 Bytes) und die Pakete werden einzeln versendet. Auf der Empfänger-Seite werden dann die Pakete empfangen und direkt geschrieben. Guck dir mal den BinaryReader/Writer an.
      Mfg
      Vincent

      VincentTB hat schon den richtigen Ansatz genannt.

      1. Schritt: Dateigröße übermitteln
      2. Schritt: Hash erstellen
      3. Schritt: Hash übermitteln
      4. Schritt: Datei Paketweise (Array) übertragen
      5. Schritt: Datei zusammensetzen und überprüfen
      6. Schritt: Hash vergleichen

      Was ich nicht machen würde, die Paketgröße größer als die Standard Windows-MTU einzustellen, also max. 1500 bzw. 1476 Bytes.

      Grüße

      VincentTB schrieb:

      Anschließend wird die Datei in Pakete aufgeteilt (zB 2048 Bytes)

      Wie mach ich das?

      OMA schrieb:

      2. Schritt: Hash erstellen

      Von was?

      OMA schrieb:

      5. Schritt: Datei zusammensetzen

      Geht das denn auch Paketweise?

      Danke schonmal für den Vorschlag :D