[C#] Packets van server

Status
Niet open voor verdere reacties.

jimowns

Gebruiker
Lid geworden
2 sep 2006
Berichten
341
Hi,

ik zit met het volgende in mijn hoofd, het is wel te hoog gegrepen voor mij :p maar ik wil dit toch proberen.

Ik wil een server maken van een spel.
Het gaat om Fiesta online.
Ik heb document packets gevonden, site: http://titanfiesta.wikidot.com/basic
Dit wil ik maken in C#.
Je hebt een packet structuur, maar ik weet zelf niet wat dit betekend:
Is dit hoe je u packet moet uitvoeren ?.
De voorbeeld:
Code:
The basic packet structure for Fiesta Online is
:IF( size > 0xFF)
  BYTE 0x00
  WORD size
:ELSE
  BYTE size
:ENDIF
WORD command
BYTE[size] Buffer
0x8000 is the max buffer size that the client supports.

Dan is de packet van fiesta online ingedeeld in: Login Packet | Char Packet | World Packet.

Als je bijvoorbeeld naar Login Packet ga.
Zie je “ Incomming Packets en Outcomming Packets en uncatogorized packets “.
Het verschil van die packets weet ik totaal niet.

En voor de eerste packet van login: [Login] 0x0c01 - Unknown
Wanneer je erop drukt zie je dit.
Code:
Direction	Client -> Login
Size	8 bytes
Format	07 01 0C D6 07 04 1B 00
Description	The contents of this packet are unknown.
Response
Packet	0x0c03 - Unknown

Direction	Login -> Client
Hier snap ik ook niet veel van.

Hopelijk kan iemand mij hierbij helpen voor het uit te leggen, hoe ik dit best kan doen en voor mij op weg te zetten.


Mvg, Jim
 
Laatst bewerkt:
Iemand die mij kan helpen hier ? ;).

ik heb iets gemaakt, maar ik weet niet of dit wel klopt.

Ik hoop dat iemand mij hierbij kan helpen en uitleggen, hoe ik zoiets kan doen en wat voor wat dient :p want ik ben hier heel slecht in en ik wil mijn kennis uitbreiden ;).

Code:
de packet van login = 0x0c01
Direction	Client -> Login
Size	8 bytes
Format	07 01 0C D6 07 04 1B 00
Description	The contents of this packet are unknown.
Response
Packet	0x0c03 - Unknown
Direction	Login -> Client

packet.cs
Code:
        public ushort Groote;
        public ushort nummer;
        public ushort Gebruik;

        public Packet(ushort mijnnummer) 
        {
            nummer = mijnnummer;
            Gebruik = 0;
            Groote = 6;
        }
        public void AddByte(byte Waarde)
        {
             Groote = Waarde;
             Groote += 1;
        }

login.cs
Code:
      Packet packet = new Packet(0x0c01);  // dit word verzonden naar de Client
      packet.AddByte(8);
      /* 
      switch(format)
      {
            case 0x07:
                //   Hier moet bericht inkomen. 
                break;
            case 0x01:
                break; 
              .......
      } */
 
Laatst bewerkt:
Wat je zou moeten doen is dit:

Voor elk type packet maak je een packet handler die het packet uitvoert/er iets mee doet.

Elk packet heeft een code bijvoorbeeld:
http://titanfiesta.wikidot.com/login:0x0c06

Direction Client -> Login
Size 37 bytes
Format
CHAR[0x12] Username
CHAR[0x10] Password
Description Send a username/password combination for logging in.
Response
Packet 0x0c0a - Server List for valid authentication
0x0c09 - Invalid Auth for invalid authentication
Direction Login -> Client

Dus als het packet deze code heeft dan bevatten dus de laatste 22 bytes de login en password.

Als je login dan valid is dan stuur je dus 0x0c0a terug als code.

Je leest dus de eerste byte.
Als deze byte 00 is dan lees je nog 2 bytes.
Dat is dan de grote van je packet.

Daarna lees je nog 2 bytes.
Dit is de code van je packet.

Nu moet je voor elke code die een packet kan hebben moet je deze handlen.

Dit is heel veel werk!

De Unknown packets weten ze nog steeds niet wat die doen. Daar kan je dus nog niks mee. Dus het is moeilijk om nu al een compleet functionerende server te maken.
 
Code:
Voor elk type packet maak je een packet handler die het packet uitvoert/er iets mee doet.

Elk packet heeft een code bijvoorbeeld:
http://titanfiesta.wikidot.com/login:0x0c06

Direction Client -> Login
Size 37 bytes
Format 
CHAR[0x12] Username
CHAR[0x10] Password
Description Send a username/password combination for logging in.
Response
Packet 0x0c0a - Server List for valid authentication
0x0c09 - Invalid Auth for invalid authentication
Direction Login -> Client

Dus als het packet deze code heeft dan bevatten dus de laatste 22 bytes de login en password.

Als je login dan valid is dan stuur je dus 0x0c0a terug als code.

Dankuwel ;) Dit snap ik nu, maar het andere gedeelte begrijp ik niet.



Code:
Je leest dus de eerste byte. 
Als deze byte 00 is dan lees je nog 2 bytes.
Dat is dan de grote van je packet.

Daarna lees je nog 2 bytes.
Dit is de code van je packet.

Nu moet je voor elke code die een packet kan hebben moet je deze handlen.

Wat bedoel je met 2bytes ? want dit begrijp ik niet goed.





Met vriendelijke groeten, Jim ;)
 
een byte is 8 bits

het is een data structure.

Het bevat dus een getal tussen 0 en 256 (0 t/m 255).
2 bytes houdt dus in dat je 16 bits leest.

Dus uit het packet dat je hebt ontvangen doe je dus die stappen.

Een byte is net eigenlijk zoals een integer maar dan kleiner (integer is 4 bytes: 4 * 8 = 32 bits).
Dat houdt in dat een byte dus 8 1/0 bevat bijv 10110100 in binair, dat is 180 in ons stelsel, dat is B4 in hexadecimaal.
Een integer bevat 32 1/0.

1. Lees de eerste 8 1/0en.
2. Als de byte 0 is (oftewel: 00000000 in bin, 0x0 in hex) dan lees je een short (2 bytes), dit is dan de grote van je packet. Als de byte niet 0 is, is de byte de buffersize.
3. Lees je nog een short (2 bytes (16 bits) (een short heet in C/C++ een word)). Dit is het command.
4. Maak een buffer (een byte-array dus "byte buffer = new byte[buffersize];") aan met grote buffersize en vul deze met data uit je packet.
5. Doe wat je wil doen met je packet (execute command/update data/stuur een response terug, hangt er vanaf wat de command is van je packet
 
Dankuwel, dus zo kom je aan die 2bytes ;).
door de primitieve type van short dat 16-bits waarde bevat.
ik dacht dat het er niets mee temaken had :p Blijkbaar toch.

Haretlijk bedankt voor de nuttige informatie, nu begrijp ik het helemaal ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan