AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Chat mit PM

Ein Thema von hans ditter · begonnen am 3. Okt 2010 · letzter Beitrag vom 10. Okt 2010
 
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

AW: Chat mit PM

  Alt 6. Okt 2010, 18:09
Moin,
Also meine Lösung ist nur eine einfachere als die von Zacherl. Weil du immer weißt womit du hantierst und nicht mit Pointern arbeitest.

Vielleicht habe ich das übersehen, aber womit überträgst du die Daten? Zum Beispiel wenn du IdTCP (oder IdUDP) nutzt dann hätte ich es so gespeichert:
Delphi-Quellcode:
type
  TClientConnection = class
  private
    FSocket : TIdTCP;
    FNickname : string;

    function GetIP : string; // Hier halt die Ip mithilfe des Sockets zurückgeben oder irgendwie anders :)
  public
    property Socket : TIdTCP read FSocket;
    property Nickname : string read FNickname write FNickname;
    property IP : string read GetIP;
  end;

  TClientList = class
  private
    FClients : TObjectList; // Im Konstruktor erstellen & im Destruktor freigeben.
  public
    procedure ClientConnect(Connection : TClientConnection);
    procedure ClientDisconnect(Connection : TClientConnection);
  end;
Und wie du dein Protokoll schreibst, musst du wie gesagt immer selber wissen. Meine Möglichkeit hat den Vorteil, dass du sie mit einer TStringList lesen/interpretieren kannst. So könnte zum Beispiel eine private Nachricht aussehen:
Code:
PRIVATE
hans ditter
Hallo hans ditter! Dies ist eine private Nachricht
PRIVATE als Kennzeichner, dass es eine PM ist, dann der Nickname und dann der Text. Die Nachricht bekommst du dann und musst dann nur noch folgendes machen (Pseudoquelltext):
Code:
Wenn Typ = PM dann:
  Suche in der Clientliste nach den Nickname
  Ist der Nickname vorhanden
    Schicke die PM an den Client (Empfänger)
  ansonsten
    Schicke eine Fehlermeldung an den Sender
Die könnte dann so aussehen:
Code:
PRIVATE-RECV
xZise
Hallo hans ditter! Dies ist eine private Nachricht
Und die Fehlermeldung z.B.:
Code:
PRIVATE-ERR
Benutzername "hans ditter" nicht im Netzwerk vorhanden!
Bei diesem System hat man den Nachteil, dass man viel Platz verschwendet, durch die Zeilenumbrüche und den sprechenden Befehlen (PRIVATE, PRIVATE-RECV und PRIVATE-ERR). Aber dafür kann jeder Administrator sehen, wenn was schief geht was schief geht (z.B. hat jemand PRIVAT statt PRIVATE stehen oder so ).
Ein anderes Format wäre im IRC Stil:
Code:
msg <Reciever> <Content>
Hier wäre der Trenner das Leerzeichen, aber wieder sprechende Befehle, und Nicknames mit Leerzeichen sind nicht möglich.

Ansonsten kannst du dir auch XMPP anschauen. Die nutzen XML, was natürlich noch mehr Platz verschwendet. Aber dadurch ist es sehr leicht zu sehen, was verschickt wird, und das Protokoll kann einfach erweitert werden.

[redbox]Irgendwo speicherst du doch, die verschiedenen Verbindungen oder?[/redbox]

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz