Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jun 08, 2024 07:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Netzwerkspielobjekt
BeitragVerfasst: Sa Dez 02, 2006 23:21 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Ich arbeite momentan an einer Klasse, die die Netzwerkfunktionen wie sie in den meisten Spielen verwendet werden kapselt. Also ähnlich wie DirectPlay. Momentan habe ich das Grundgerüst für die abstrakte Vorfahrenklasse entwickelt, die Protokoll unabhänig ist. Bevor ich mich an die Implementierung eines SDL_NET basierten abgeleiteten Klasse mache, würde ich um etwas feedback zum interface bitten. Also ob ich etwas vergessen habe, oder irgendetwas ungünstig gelöst habe. Die Ereignisse sind als Pseudocode dargestellt, natürlich handelt es sich um properties aus typisierten Methodenzeigern.
Code:
  1.  
  2. unit NetworkGames;
  3.  
  4. interface
  5. uses classes,sysutils;
  6. Type TPlayerID=integer;
  7. const pidGame  =-1;
  8.         //ID des Spiels, für Änderung an Spieleigenschaften
  9.       pidHost  =-2;
  10.         //An Host senden
  11.       pidOthers=-3;
  12.         //An alle anderen senden
  13.        pidAll   =-4;
  14.         //An alle senden
  15.       pidSelf  =-5;
  16.         //An sich selbst senden
  17.  
  18. // TNetPropertyList=assoziatives array
  19. Type
  20.  TNetPropertyList=class;
  21.    ...
  22.   end;
  23.  
  24. //Ein Netwerkspiel
  25. Type TNetProcess=(npOpen,npJoin,npSend,npKick,npClose,npCheckEvents);
  26. type TCustomNetworkGame=class
  27.   protected
  28.   public
  29.    //Eigenschaften
  30.    property AutoCheckEvents:boolean;
  31.      //Thread verwenden um regelmäßig auf ereignisse zu prüfen, und die Ergeignisshandler aufrufen
  32.    property RaiseException:boolean;
  33.      //Exceptions bei Fehlern generieren?
  34.    property Host:TPlayerID;
  35.      //SpielerID des Hosts
  36.    property IsHost:boolean;
  37.      //Bin ich Host?
  38.    property MyID:TPlayerID;
  39.      //Meine SpielerID
  40.    property GameProperties:TNetPropertyList;
  41.      //Eigenschaften des Spiels, normal nur als Host änderbar
  42.    property MyProperties:TNetPropertyList;
  43.      //Meine Eigenschaften, änderbar
  44.    property Player[PlayerID:integer]:TNetPropertyList;
  45.      //Eigenschaften der Spieler, nicht änderbar
  46.    property Players[PlayerIndex:integer]:TPlayerID;
  47.      //Index->SpielerID
  48.    property PlayerCount:integer;
  49.      //Anzahl der Spieler
  50.  
  51.    //Ereignisse
  52.    event OnError(Sender:TCustomNetworkGame;Process:TNetProcess;ErrorCode:integer;ErrorMessage:String);
  53.      //Ein Fehler ist aufgetreten
  54.    event OnConnect(Sender:TCustomNetworkGame);
  55.      //Verbindung hergestellt, Daten empfangen
  56.    event OnClose(Sender:TCustomNetworkGame);
  57.      //Ordentliche Trennung, Daten und Verbindung noch vorhanden
  58.    event OnDisconnect(Sender:TCustomNetworkGame);
  59.      //Bei jeder Trennung, Verbindung bereits weg
  60.    event OnAcceptPlayer(Sender:TCustomNetworkGame;PlayerID:TPlayerID;Props:TNetPropertyList;var Accept:boolean);
  61.      //Soll neuer Spieler angenommen werden, wird normal wohl nur beim Host aufgerufen
  62.    event OnPlayerJoin(Sender:TCustomNetworkGame;PlayerID:TPlayerID);
  63.      //Neuer Spieler, Spielereigenschaften bereits vorhanden
  64.    event OnPlayerLeave(Sender:TCustomNetworkGame;PlayerID:TPlayerID);
  65.      //Spieler verlässt, Daten noch da
  66.    event OnHostDisconnect(Sender:TCustomNetworkGame;PlayerID:TPlayerID);
  67.      //Host weg, Effekt ist implementierungsabhängig
  68.    event OnReceiveMessage(Sender:TCustomNetworkGame;PlayerID:TPlayerID;Data:TCustomMemorystream);
  69.      //Nachricht empfangen (immer komplett und als ein Paket), Reihenfolge und Verlässlichkeit implementierungsabhängig
  70.    event OnAcceptPropertyChange(Sender:TCustomNetworkGame;PlayerID:TPlayerID;Name,NewValue:String;var Accept:boolean);
  71.      //Änderung einer Spielereigenschaft oder Spieleigenschaft annehmen? (meist nur bei Host aufgerufen)(PlayerID=pidGame)
  72.    event OnPropertyChange(Sender:TCustomNetworkGame;PlayerID:TPlayerID;Name,NewValue:String);
  73.      //Änderung einer Spielereigenschaft oder Spieleigenschaft(PlayerID=pidGame)
  74.  
  75.    //Methoden
  76.    procedure Join;virtual;abstract;
  77.      //Einem Spiel beitreten, Adresse etc auf Eigenschaften der abgeleiteten Klasse
  78.    procedure Open;virtual;abstract;
  79.      //Spiel eröffnen
  80.    procedure Close;virtual;abstract;
  81.      //Verbindung trennen, ruft OnClose auf
  82.    procedure Send(const Buf;const Size:integer;const Reliable=true);virtual;abstract;
  83.      //Paket senden, Reliable=false kann von implementierung ignoriert werden
  84.    procedure Kick(const PlayerID:TPlayerID);virtual;abstract;
  85.      //Spieler kicken, normal nur als Host möglich
  86.    procedure CheckEvents;virtual;abstract;
  87.      //Prüft auf angefallene Ereignisse (Nachrichtenempfang etc)
  88.  end;
  89.  


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 39 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.053s | 14 Queries | GZIP : On ]