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(); }
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); } } }
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 } } }