internal static extern UInt32 PartyNetworkCreateEndpoint(
     PARTY_NETWORK_HANDLE network,
     PARTY_LOCAL_USER_HANDLE localUser,
     UInt32 propertyCount,
     IntPtr keys,
     IntPtr values,
     IntPtr asyncIdentifier,
     out PARTY_ENDPOINT_HANDLE endpoint);
 internal static UInt32 WrapAndReturnError(UInt32 error, Interop.PARTY_NETWORK_HANDLE interopHandle, out PARTY_NETWORK_HANDLE handle)
 {
     if (PartyError.SUCCEEDED(error))
     {
         handle = new PARTY_NETWORK_HANDLE(interopHandle);
     }
     else
     {
         handle = default(PARTY_NETWORK_HANDLE);
     }
     return(error);
 }
 internal static extern UInt32 PartyNetworkKickDevice(
     PARTY_NETWORK_HANDLE network,
     PARTY_DEVICE_HANDLE targetDevice,
     IntPtr asyncIdentifier);
 unsafe internal static extern UInt32 PartyNetworkGetDevices(
     PARTY_NETWORK_HANDLE network,
     out UInt32 deviceCount,
     out IntPtr devices);
 internal static extern UInt32 PartyNetworkGetCustomContext(
     PARTY_NETWORK_HANDLE network,
     out IntPtr customContext);
 internal static extern UInt32 PartyNetworkDestroyEndpoint(
     PARTY_NETWORK_HANDLE network,
     PARTY_ENDPOINT_HANDLE localEndpoint,
     IntPtr asyncIdentifier);
 unsafe internal static extern UInt32 PartyNetworkCreateInvitation(
     PARTY_NETWORK_HANDLE network,
     PARTY_LOCAL_USER_HANDLE localUser,
     PARTY_INVITATION_CONFIGURATION *invitationConfiguration,
     IntPtr asyncIdentifier,
     out PARTY_INVITATION_HANDLE invitation);
 internal static extern UInt32 PartyNetworkRemoveLocalUser(
     PARTY_NETWORK_HANDLE network,
     PARTY_LOCAL_USER_HANDLE localUser,
     IntPtr asyncIdentifier);
 internal static extern UInt32 PartyNetworkFindEndpointByUniqueIdentifier(
     PARTY_NETWORK_HANDLE network,
     UInt16 uniqueIdentifier,
     out PARTY_ENDPOINT_HANDLE endpoint);
 unsafe internal static extern UInt32 PartyNetworkGetChatControls(
     PARTY_NETWORK_HANDLE network,
     out UInt32 chatControlCount,
     out IntPtr chatControls);
 internal static extern UInt32 PartyNetworkRevokeInvitation(
     PARTY_NETWORK_HANDLE network,
     PARTY_LOCAL_USER_HANDLE localUser,
     PARTY_INVITATION_HANDLE invitation,
     IntPtr asyncIdentifier);
 internal static extern UInt32 PartyNetworkSetProperties(
     PARTY_NETWORK_HANDLE network,
     UInt32 propertyCount,
     [In] UTF8StringPtr[] keys,
     [In] PARTY_DATA_BUFFER[] values);
 unsafe internal static extern UInt32 PartyNetworkGetPropertyKeys(
     PARTY_NETWORK_HANDLE network,
     out UInt32 propertyCount,
     out UTF8StringPtr *keys);
 internal static extern UInt32 PartyNetworkKickUser(
     PARTY_NETWORK_HANDLE network,
     Byte[] targetEntityId,
     IntPtr asyncIdentifier);
 internal static extern UInt32 PartyNetworkGetNetworkStatistics(
     PARTY_NETWORK_HANDLE network,
     UInt32 statisticCount,
     PARTY_NETWORK_STATISTIC[] statisticTypes,
     UInt64[] statisticValues);
 internal static extern UInt32 PartyNetworkGetNetworkDescriptor(
     PARTY_NETWORK_HANDLE network,
     out PARTY_NETWORK_DESCRIPTOR networkDescriptor);
 unsafe internal static extern UInt32 PartyNetworkGetLocalUsers(
     PARTY_NETWORK_HANDLE network,
     out UInt32 userCount,
     out IntPtr users);
 internal static extern UInt32 PartyNetworkAuthenticateLocalUser(
     PARTY_NETWORK_HANDLE network,
     PARTY_LOCAL_USER_HANDLE localUser,
     Byte[] invitationIdentifier,
     IntPtr asyncIdentifier);
 unsafe internal static extern UInt32 PartyNetworkGetInvitations(
     PARTY_NETWORK_HANDLE network,
     out UInt32 invitationCount,
     out IntPtr invitations);
 unsafe internal static extern UInt32 PartyNetworkGetNetworkConfiguration(
     PARTY_NETWORK_HANDLE network,
     out IntPtr networkConfiguration);
 unsafe internal static extern UInt32 PartyNetworkGetEndpoints(
     PARTY_NETWORK_HANDLE network,
     out UInt32 endpointCount,
     out IntPtr endpoints);
 internal static extern UInt32 PartyNetworkDisconnectChatControl(
     PARTY_NETWORK_HANDLE network,
     PARTY_CHAT_CONTROL_HANDLE chatControl,
     IntPtr asyncIdentifier);
 unsafe internal static extern UInt32 PartyNetworkGetProperty(
     PARTY_NETWORK_HANDLE network,
     Byte[] key,
     out PARTY_DATA_BUFFER *value);
 unsafe internal static extern UInt32 PartyConnectToNetwork(
     PARTY_HANDLE handle,
     PARTY_NETWORK_DESCRIPTOR *networkDescriptor,
     IntPtr asyncIdentifier,
     out PARTY_NETWORK_HANDLE network);
 internal static extern UInt32 PartyNetworkLeaveNetwork(
     PARTY_NETWORK_HANDLE network,
     IntPtr asyncIdentifier);
 internal PARTY_NETWORK_HANDLE(Interop.PARTY_NETWORK_HANDLE interopHandle)
 {
     this.InteropHandle = interopHandle;
 }
 internal static extern UInt32 PartyEndpointGetNetwork(
     PARTY_ENDPOINT_HANDLE endpoint,
     out PARTY_NETWORK_HANDLE network);