Serialisierung einer Benutzer Online Liste

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von WeLoveBurgers.

    Serialisierung einer Benutzer Online Liste

    Hallo Leute,
    ich will meinen TCP Chat ein wenig verfeinern und eine Benutzer Online liste einfügen.
    Mir wurde in der Angelegenheit die Serialisierung ans Herz gelegt.

    Im Netz habe ich dazu jedoch nicht viel was finden können.

    Ich gehe mal davon aus das ich eine Klasse "Benutzer" basteln muss womit ich dann Arbeite.

    Das Hauptproblem liegt in der Serialisierung des ganzen.

    Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen

    Also ich würde es wie folgt machen.
    Eine Klasse erstellen (in diesem Fall Benutzer) und dort Deklariert man erst einmal die ganzen Eigenschaften (Alter, Name oder was auch immer du vom Benutzer abspeichern möchtest)
    Wenn du damit fertig bist erstellst du eine Liste des Typen Benutzer:

    VB.NET-Quellcode

    1. Dim lstBenutzer As New List(Of Benutzer)


    und fügst dann in diese Liste alle Benutzer die in deinem Chat sind (Ich denke mal du weißt wie man mit Listen umgeht).
    Danach musst du natürlich wissen in was du Serializieren möchtest.
    Es gibt da z.B. XML, JSon und etliche mehr.

    Ich hab jetzt mal XML genommen

    Für den XMLSerializer musst du dann folgendes deklarieren:

    VB.NET-Quellcode

    1. Dim ser As XmlSerializer = New XmlSerializer(GetType(List(Of Benutzer))) 'Den Serializer Selber mit dem Objekt Typen den du haben möchtest. In dem Fall eine Liste von Benutzern
    2. Dim sw As New IO.StreamWriter("./test.xml") 'Den StreamWriter um das ganze in eine Datei abzuspeichern


    und um deine Liste abzuspeichern machst du im Code folgendes:

    VB.NET-Quellcode

    1. ser.Serialize(sw, _benutzer) 'Serializiert die Liste und schreibt direkt in die Angegebene Datei die du dem StreamWriter zugewiesen hast
    2. sw.Close()


    Deine XML Datei sollte dann als Beispiel so aussehen:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <ArrayOfBenutzer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <Benutzer>
    4. <alter>32</alter>
    5. <name>Bernd</name>
    6. </Benutzer>
    7. <Benutzer>
    8. <alter>22</alter>
    9. <name>Janosh</name>
    10. </Benutzer>
    11. </ArrayOfBenutzer>


    Zum Deserialisieren, also zum Auslesen machst du folgendes:

    VB.NET-Quellcode

    1. Dim fs As New IO.FileStream("./test.xml", IO.FileMode.Open) 'Einen FileStream Deklarieren
    2. _benutzer = CType(ser.Deserialize(fs), List(Of Benutzer)) 'In die Benutzerliste Deserialisieren lassen.
    3. fs.Close()



    Mfg
    Conway's Game Of Life Monogame Sample: 80%

    Conway's Game Of Life Monogame Sample

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TheTrust3343“ ()

    Ja hab ich soweit hinbekommen nun stellt sich mir jedoch die Frage wie ich das ganze jetzt z.b immer wieder von alleine Aktualisiere sobald sich ein Benutzer ein oder ausloggt

    Du hast ja eine TCP Verbindung. Dann würde ich, nachdem der Client vom Server akzeptiert wurde, diesen in die Liste hinzufüge und dann wieder abspeichern.
    Das gleiche machst du dann sobald der Server merkt das die Verbindung zum Clienten unterbrochen wurde.
    Erstell dir zum abspeichern am besten eine Methode dazu.

    Mfg
    Conway's Game Of Life Monogame Sample: 80%

    Conway's Game Of Life Monogame Sample

    Patrick1993 schrieb:

    Ja hab ich soweit hinbekommen nun stellt sich mir jedoch die Frage wie ich das ganze jetzt z.b immer wieder von alleine Aktualisiere sobald sich ein Benutzer ein oder ausloggt

    Indem du den ganzen Schmarren halt aufrufst, wenn es was zum aktualisieren gibt. Aber wenn aufpassen, wenn du das Zeug auf mehreren Threads abarbeitest, immer schön synchronisieren. Wenn du mit zwei Threads gleichzeitig da rein schreiben willst, schießen sich diese verständlicherweise ab.
    Wäre von dem Ansatz die Liste zu serialisieren jedoch sowieso nicht grad begeistert. Recht viele IO Zugriffe für was? Was willste mit der Datei?


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    ok das ganze leuchtet mir langsam ein.

    Im Grunde genommen müsste man doch Klassen in ein ByteArray Umwandeln können so das die xml Geschichte entfällt oder ?

    Mal ein Einwurf aus einer ganz anderen Richtung:
    Wie wärs mit einer json-serialisierung(viel kompakter) und ping/update-requests seitens chatuser ?
    Demnach würde ich ganz auf json umsteigen, da kann man dann auch gleich sagen ob das jetzt geschrieben werden muss oder ob das ein command ist.
    Mfg
    Wer Rechtschreibfehler findet darf sie behalten :)