namespace Oculus.Platform { using System; using System.Runtime.InteropServices; public sealed class Packet : IDisposable { private readonly ulong size; private readonly IntPtr packetHandle; public Packet(IntPtr packetHandle) { this.packetHandle = packetHandle; size = (ulong) CAPI.ovr_Packet_GetSize(packetHandle); } /** * Copies all the bytes in the payload into byte[] destination. ex: * Package package ... * byte[] destination = new byte[package.Size]; * package.ReadBytes(destination); */ public ulong ReadBytes(byte[] destination) { if ((ulong) destination.LongLength < size) { throw new System.ArgumentException(String.Format("Destination array was not big enough to hold {0} bytes", size)); } Marshal.Copy(CAPI.ovr_Packet_GetBytes(packetHandle), destination, 0, (int) size); return size; } public UInt64 SenderID { get { return CAPI.ovr_Packet_GetSenderID(packetHandle); } } public ulong Size { get { return size; } } public SendPolicy Policy { get { return (SendPolicy)CAPI.ovr_Packet_GetSendPolicy(packetHandle); } } #region IDisposable ~Packet() { Dispose(); } public void Dispose() { CAPI.ovr_Packet_Free(packetHandle); GC.SuppressFinalize(this); } #endregion } }