public int ReceiveMessagesOnListenSocket(ListenSocket socket, NetworkingMessage[] messages, int maxMessages) { if (maxMessages > Library.maxMessagesPerBatch) { throw new ArgumentOutOfRangeException("maxMessages"); } IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer(); int messagesCount = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnListenSocket(nativeSockets, socket, nativeMessages, maxMessages); for (int i = 0; i < messagesCount; i++) { messages[i] = (NetworkingMessage)Marshal.PtrToStructure(nativeMessages[i], typeof(NetworkingMessage)); messages[i].release = nativeMessages[i]; } return(messagesCount); }
public void ReceiveMessagesOnListenSocket(ListenSocket socket, MessageCallback callback, int maxMessages) { if (maxMessages > Library.maxMessagesPerBatch) { throw new ArgumentOutOfRangeException("maxMessages"); } IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer(); int messagesCount = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnListenSocket(nativeSockets, socket, nativeMessages, maxMessages); for (int i = 0; i < messagesCount; i++) { Span <NetworkingMessage> message; unsafe { message = new Span <NetworkingMessage>((void *)nativeMessages[i], 1); } callback(in message[0]); Native.SteamAPI_SteamNetworkingMessage_t_Release(nativeMessages[i]); } }