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
|
|
}
|
|
}
|