Register for your free account! | Forgot your password?

You last visited: Today at 06:26

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C# - PacketStream

Discussion on C# - PacketStream within the Coding Snippets forum part of the Coding Releases category.

Reply
 
Old   #1


 
Lawliet's Avatar
 
elite*gold: 2
Join Date: Jul 2009
Posts: 14,456
Received Thanks: 4,685
C# - PacketStream

You,

wenn ihr mal ein lanfähiges Spiel oderso programmieren wollt und noch nicht genau wisst, wie die Kommunikation zwischen Client und Server oder zwischen Client und Client ablaufen soll, dann könnt ihr euch ja mal meinen ersten Versuch dafür anschaun
Ist Teil eines Spiels, ich hab mal ein paar Packets als Beispiel dort gelassen.


Errzeugen eines PacketStreams:

Code:
PacketStream.Create( <IPEndPoint / TcpClient> )

oder

new PacketStream( <IPEndPoint / TcpClient> )
Schreiben eines Packets:

Code:
var packetStream = new PacketStream(sampleTcpClient)
if(!packetStream.Connected)
packetStream.Connect();

packetStream.WritePacket( <SomeClassInerhitsFromPacketBase> )

Lesen:
Code:
packetStream.ReadPacket();

Definieren eines Packets:
Code:
using PacketStreamLib.GameStream.Packets.Answer.Interface;
using PacketStreamLib.GameStream.Packets.Attribute;
using PacketStreamLib.GameStream.Packets.Base;
using PacketStreamLib.GameStream.Packets.Enum;

namespace PacketStreamLib.GameStream.Packets.Answer
{
    public class EntityCreatedPacket : PacketBase, IAmAnswer
    {
        public override PacketType PacketType {
            get { return Enum.PacketType.EntityCreated; }
        }
        
        [PropertyIndex(0)]
        public override string PacketGuid { get; set; }
        
        [PropertyIndex(1)]
        public string RequestPacketGuid { get; set; }

        [PropertyIndex(2)]
        public string EntityGuid { get; set; }
    }
}
PropertyIndex muss einfach immer +1 gezählt werden und über jeder Eigenschaft stehen, die übermittelt werden soll.

Alles Packets erben von PacketBase.
IAmAnswer definiert eine Antwort auf ein Packet, welches IAmRequest implementiert.

PacketType gibt den Typ an und wird aus PacketBase überschrieben. Darüber kann man auch das Ergebnis von ReadPacket ermitteln und casten.

Damit das Packet gelesen werden kann, müsst ihr nur bei ReadPacket ein case einbauen:
Code:
public PacketBase ReadPacket() {
            var packetTypeInt = new byte[sizeof (int)];
            _networkStream.Read( packetTypeInt, 0, sizeof (int) );
            var packetType = (PacketType) BitConverter.ToInt32( packetTypeInt, 0 );
            switch (packetType) {
                case PacketType.LoginPacket:
                    return new LoginPacket().Read( _networkStream );
                case PacketType.EntityAttacked:
                    return new EntityAttackedPacket().Read( _networkStream );
                case PacketType.EntityCreated:
                    return new EntityCreatedPacket().Read( _networkStream );
[TOADD]
case PacketType.<Euer PacketType>:
                    return new EuerNeuesPacket().Read( _networkStream );
[/TOADD]
                default:
                    throw new NotImplementedException();
            }
        }

und den neuen Enum Member für den PacketType anlegen:

Code:
public enum PacketType
    {
        None = 0,
<YourNewPacketType> = 1,
Attached Files
File Type: rar PacketStream.rar (8.4 KB, 10 views)
Lawliet is offline  
Thanks
8 Users
Old 01/18/2014, 18:16   #2
 
elite*gold: 0
Join Date: Jan 2014
Posts: 13
Received Thanks: 3
Thanks for Sharing.
єтєяηιту is offline  
Reply




All times are GMT +2. The time now is 06:26.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.