Пример #1
0
    public byte[] WrapReliabilityOntoPacket(byte[] packet, bool reliable, AckChecker ackChecker, uint ackId = 0)
    {
        MemoryStream stream       = new MemoryStream();
        BinaryWriter binaryWriter = new BinaryWriter(stream);

        binaryWriter.Write(reliable);
        if (reliable)
        {
            binaryWriter.Write(ackId);
            uint lastAck, ackArray;
            bool hasToConfirm = ackChecker.GetAckConfirmation(out lastAck, out ackArray);
            binaryWriter.Write(hasToConfirm);
            if (hasToConfirm)
            {
                binaryWriter.Write(lastAck);
                binaryWriter.Write(ackArray);
            }
        }
        stream.Close();
        byte[] reliability  = stream.ToArray();
        byte[] wrappedBytes = new byte[reliability.Length + packet.Length];
        reliability.CopyTo(wrappedBytes, 0);
        packet.CopyTo(wrappedBytes, reliability.Length);

        wrappedBytes = WrapCheckSumOntoPacket(wrappedBytes);

        return(wrappedBytes);
    }
Пример #2
0
 public Client()
 {
     this.ipEndPoint = null;
     this.id         = 0;
     this.clientSalt = 0;
     this.serverSalt = 0;
     this.timeStamp  = 0;
     this.state      = State.ConnectionPending;
     this.ackChecker = new AckChecker();
 }
Пример #3
0
 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.ackChecker = new AckChecker();
 }
Пример #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
        {
            AckChecker ackChecker = ConnectionManager.Instance.OwnClient.ackChecker;
            uint       ackId      = ackChecker.NewAck;
            bytes = WrapReliabilityOntoPacket(bytes, reliable, ackChecker, ackId);
            NetworkManager.Instance.SendToServer(bytes);
            if (reliable)
            {
                ConnectionManager.Instance.QueuePacket(bytes, ackId);
            }
        }
    }