예제 #1
0
        public int ReceiveMessagesOnPollGroup(PollGroup pollGroup, 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_ReceiveMessagesOnPollGroup(nativeSockets, pollGroup, 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 ReceiveMessagesOnPollGroup(PollGroup pollGroup, MessageCallback callback, int maxMessages)
        {
            if (maxMessages > Library.maxMessagesPerBatch)
            {
                throw new ArgumentOutOfRangeException("maxMessages");
            }

            IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer();
            int      messagesCount  = Native.SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnPollGroup(nativeSockets, pollGroup, 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]);
            }
        }
예제 #3
0
 internal static extern bool SteamAPI_ISteamNetworkingSockets_DestroyPollGroup(IntPtr sockets, PollGroup pollGroup);
예제 #4
0
 public bool SetConnectionPollGroup(PollGroup pollGroup, Connection connection)
 {
     return(Native.SteamAPI_ISteamNetworkingSockets_SetConnectionPollGroup(nativeSockets, connection, pollGroup));
 }
예제 #5
0
 public bool DestroyPollGroup(PollGroup pollGroup)
 {
     return(Native.SteamAPI_ISteamNetworkingSockets_DestroyPollGroup(nativeSockets, pollGroup));
 }
예제 #6
0
 internal static extern int SteamAPI_ISteamNetworkingSockets_ReceiveMessagesOnPollGroup(IntPtr sockets, PollGroup pollGroup, IntPtr[] messages, int maxMessages);
예제 #7
0
 internal static extern bool SteamAPI_ISteamNetworkingSockets_SetConnectionPollGroup(IntPtr sockets, Connection connection, PollGroup pollGroup);