コード例 #1
0
        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);
        }
コード例 #2
0
        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]);
            }
        }