public int ReceiveMessagesOnConnection(Connection connection, ref NetworkingMessage[] messages, int maxMessages)
        {
            IntPtr nativeMessages = IntPtr.Zero;
            int    messagesCount  = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection(nativeSockets, connection, out nativeMessages, maxMessages);

            MarshalMessages(nativeMessages, ref messages, messagesCount);

            return(messagesCount);
        }
        public unsafe NativeArray <NetworkingMessage> ReceiveMessagesOnConnection(Connection connection, Allocator allocator = Allocator.Temp, int maxMessages = 255)
        {
            if (maxMessages > Library.maxMessagesPerBatch)
            {
                throw new ArgumentOutOfRangeException(nameof(maxMessages));
            }

            var nativeMessages = new NativeArray <IntPtr>(maxMessages, Allocator.Temp);
            var messagesCount  = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection(nativeSockets, connection, (IntPtr *)nativeMessages.GetUnsafePtr(), maxMessages);

            if (messagesCount <= 0)
            {
                return(default);
Beispiel #3
0
        public int ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
        {
            if (maxMessages > Library.maxMessagesPerBatch)
            {
                throw new ArgumentOutOfRangeException("maxMessages");
            }

            IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer();
            int      messagesCount  = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection(nativeSockets, connection, nativeMessages, maxMessages);

            MarshalMessages(nativeMessages, messages, messagesCount);

            return(messagesCount);
        }
        public int ReceiveMessagesOnConnection(Connection connection, NetworkingMessage[] messages, int maxMessages)
        {
            if (messages == null)
                    throw new ArgumentNullException("messages");

                if (maxMessages > Library.maxMessagesPerBatch)
                    throw new ArgumentOutOfRangeException("maxMessages");

                IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer();
                int messagesCount = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection(nativeSockets, connection, 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 ReceiveMessagesOnConnection(Connection connection, MessageCallback callback, int maxMessages)
        {
            if (maxMessages > Library.maxMessagesPerBatch)
                    throw new ArgumentOutOfRangeException("maxMessages");

                IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer();
                int messagesCount = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnConnection(nativeSockets, connection, 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]);
                }
        }