Example #1
0
    public byte[] WrapReliabilityPacket(byte[] packet, bool reliable, AcknowledgeChecker acknowledgeChecker, uint acknowledgeId = 0)
    {
        MemoryStream stream       = new MemoryStream();
        BinaryWriter binaryWriter = new BinaryWriter(stream);

        binaryWriter.Write(reliable);// escribo si es relaiable
        if (reliable)
        {
            binaryWriter.Write(acknowledgeId);// escribo el ackid
            uint lastAcknowledge;
            uint acknowledgeArray;
            bool hasToConfirm = acknowledgeChecker.GetAcknowledgeConfirmation(out lastAcknowledge, out acknowledgeArray);
            binaryWriter.Write(hasToConfirm); // si no hay que confirmar, solo mando un bool diciendo que no hay que hacerlo
            if (hasToConfirm)                 //si confirmas, mandas la data
            {
                binaryWriter.Write(lastAcknowledge);
                binaryWriter.Write(acknowledgeArray);
            }
        }
        stream.Close();
        byte[] reliability  = stream.ToArray();
        byte[] wrappedBytes = new byte[reliability.Length + packet.Length];
        reliability.CopyTo(wrappedBytes, 0);
        packet.CopyTo(wrappedBytes, reliability.Length);

        wrappedBytes = WrapCheckSumPacket(wrappedBytes);// creo el checksum para la verificacion de que llegue bien

        return(wrappedBytes);
    }
 public Client()
 {
     this.ipEndPoint         = null;
     this.id                 = 0;
     this.clientSalt         = 0;
     this.serverSalt         = 0;
     this.timeStamp          = 0;
     this.state              = State.ConnectionPending;
     this.acknowledgeChecker = new AcknowledgeChecker();
 }
 public Client(IPEndPoint ipEndPoint, uint id, float timeStamp)
 {
     this.ipEndPoint         = ipEndPoint;
     this.id                 = id;
     this.clientSalt         = 0;
     this.serverSalt         = 0;
     this.timeStamp          = timeStamp;
     this.state              = State.ConnectionPending;
     this.acknowledgeChecker = new AcknowledgeChecker();
 }
Example #4
0
    public void SendPacket <T>(NetworkPacket <T> packet, uint objectId, bool reliable)
    {
        byte[] bytes = Serialize(packet, objectId);

        if (ConnectionManager.Instance.isServer)
        {
            NetworkManager.Instance.Broadcast(bytes, reliable);
        }
        else
        {
            AcknowledgeChecker acknowledgeChecker = ConnectionManager.Instance.client.acknowledgeChecker;
            uint acknowledgeId = acknowledgeChecker.NextAcknowledge;
            bytes = WrapReliabilityPacket(bytes, reliable, acknowledgeChecker, acknowledgeId);
            NetworkManager.Instance.SendToServer(bytes);
            if (reliable)
            {
                ConnectionManager.Instance.QueuePacket(bytes, acknowledgeId);
            }
        }
    }
Example #5
0
    public void SendPacket <T>(OrderedNetworkPacket <T> packet, uint objectId, bool reliable, uint id)
    {
        byte[] bytes = Serialize(packet, objectId, id);// se serializa junto a su ID para conservar el orden

        if (ConnectionManager.Instance.isServer)
        {
            NetworkManager.Instance.Broadcast(bytes, reliable);
        }
        else
        {
            AcknowledgeChecker acknowledgeChecker = ConnectionManager.Instance.client.acknowledgeChecker;
            uint acknowledgeId = acknowledgeChecker.NextAcknowledge;// saco un nuevo ack
            bytes = WrapReliabilityPacket(bytes, reliable, acknowledgeChecker, acknowledgeId);
            NetworkManager.Instance.SendToServer(bytes);
            if (reliable)
            {
                ConnectionManager.Instance.QueuePacket(bytes, acknowledgeId);// todo lo que esta en esta lista se spamea
            }
        }
    }