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