Einzelnen Beitrag anzeigen

DArc

Registriert seit: 3. Jun 2009
48 Beiträge
 
Delphi 7 Enterprise
 
#1

TIdTCPServer Byte Packets (Indy10)

  Alt 9. Okt 2011, 17:48
Hey Delphianer!

Ich möchte eine Server Anwendung schreiben, die mit einem Game Client kommuniziert.
Das Problem ist, das ich nicht weiß wie ich ganze Packets empfange.

Im moment mach ich das so:
Delphi-Quellcode:
  myByte := AContext.Connection.IOHandler.ReadByte;

  if (myByte = 2) then // 0x02 (Connect)
    begin
      Log.Lines.Add('Received: Packet 0x02');
      // usw.
    end
  else if // usw.
Ich empfange also im moment einzelne Bytes was heißen soll, dass ich dann schauen muss was dieses Paket beinhalten kann und
schließlich auswerten msus wieviel Pakete tatsächlich angekommen sind. So habe ich sehr viele If bzw. Case Abfragen.
Würde das Problem gerne mit nem Array oder 'nem Record lösen, kriege das aber nicht wirklich hin.

Wäre cool wenn ihr mir ein Codeschnippsel posten könntet, am besten vllt noch mit folgenden Daten (damit ich die anderen 66 Packets auswerten kann ):
Code:
Packet ID ++++++ Field Name +++++++ Field Type +++++++ Example +++++++ Notes
0x01 . . . . . . Protocol Version . int . . . . . . .. 19 . . . . . .. The latest version of the protocol is 19
0x01 . . . . . . Username . . . . . string16 . . . . . TkTech . . . .. The name of the user attempting to login, max length of 16
0x01 . . . . . . Not used . . . . . long . . . . . . . 0 . . . . . ..
0x01 . . . . . . Not used . . . . . int . . . . . . .. 0 . . . . . ..
0x01 . . . . . . Not used . . . . . byte . . . . . . . 0 . . . . . ..
0x01 . . . . . . Not used . . . . . byte . . . . . . . 0 . . . . . ..
0x01 . . . . . . Not used . . . . . unsigned byte. . . 0 . . . . . ..
0x01 . . . . . . Not used . . . . . unsigned byte. . . 0 . . . . . ..
--------------------------------------------------------------------------------------------------------------------------
Total Size:    23 bytes + length of strings
und zurückschicken müsste ich:
Code:
Packet ID ++++++ Field Name +++++++ Field Type +++++++ Example +++++++ Notes
0x01 . . . . . . Entity ID . . . . . int . . . . . . .. 1298 . . . . . .. The Players Entity ID
0x01 . . . . . . Not used . . . . . string16 . . . . . (empty string). .. Not used
0x01 . . . . . . Map Seed . . . . . long . . . . . . . 971768181197178410 The server's map seed. Must be sent in respawn packets by the client.
0x01 . . . . . . Server mode . . . . . int . . . . . . .. 0 . . . . . .. . 0 for survival, 1 for creative
0x01 . . . . . . Dimension . . . . . byte . . . . . . . . 0 . . . . . .. . Used for specifying the players dimension -1 for hell, 0 otherwise
0x01 . . . . . . Difficulty . . . . . byte . . . . . . . 1 . . . . . .. . .0 thru 3 for Peaceful, Easy, Normal, Hard
0x01 . . . . . . World height . . . unsigned byte. . . 128 . . . . . .. . .Defaults to 128 
0x01 . . . . . . Max players . . . .unsigned byte. . . 8 . . . . . .. . . .Used by the client to draw the player list
--------------------------------------------------------------------------------------------------------------------------
Total Size:    23 bytes + length of strings
wäre total super wenn ihr mir helfen könntet ... ein winziges beispiel genügt, es müssen nicht alle Daten benutzt werden

Mfg DArc
Ich würde gerne die Welt verändern, doch Gott hat
vergessen mir die Quellcodes zu geben ... !
  Mit Zitat antworten Zitat