// This file is provided under The MIT License as part of Steamworks.NET. // Copyright (c) 2013-2022 Riley Labrecque // Please see the included LICENSE.txt for additional information. // This file is automatically generated. // Changes to this file will be reverted when you update Steamworks.NET #if !(UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX) #define DISABLESTEAMWORKS #endif #if !DISABLESTEAMWORKS using System.Runtime.InteropServices; using IntPtr = System.IntPtr; namespace Steamworks { public static class SteamNetworkingMessages { /// /// / Sends a message to the specified host. If we don't already have a session with that user, /// / a session is implicitly created. There might be some handshaking that needs to happen /// / before we can actually begin sending message data. If this handshaking fails and we can't /// / get through, an error will be posted via the callback SteamNetworkingMessagesSessionFailed_t. /// / There is no notification when the operation succeeds. (You should have the peer send a reply /// / for this purpose.) /// / /// / Sending a message to a host will also implicitly accept any incoming connection from that host. /// / /// / nSendFlags is a bitmask of k_nSteamNetworkingSend_xxx options /// / /// / nRemoteChannel is a routing number you can use to help route message to different systems. /// / You'll have to call ReceiveMessagesOnChannel() with the same channel number in order to retrieve /// / the data on the other end. /// / /// / Using different channels to talk to the same user will still use the same underlying /// / connection, saving on resources. If you don't need this feature, use 0. /// / Otherwise, small integers are the most efficient. /// / /// / It is guaranteed that reliable messages to the same host on the same channel /// / will be be received by the remote host (if they are received at all) exactly once, /// / and in the same order that they were sent. /// / /// / NO other order guarantees exist! In particular, unreliable messages may be dropped, /// / received out of order with respect to each other and with respect to reliable data, /// / or may be received multiple times. Messages on different channels are *not* guaranteed /// / to be received in the order they were sent. /// / /// / A note for those familiar with TCP/IP ports, or converting an existing codebase that /// / opened multiple sockets: You might notice that there is only one channel, and with /// / TCP/IP each endpoint has a port number. You can think of the channel number as the /// / *destination* port. If you need each message to also include a "source port" (so the /// / recipient can route the reply), then just put that in your message. That is essentially /// / how UDP works! /// / /// / Returns: /// / - k_EREsultOK on success. /// / - k_EResultNoConnection, if the session has failed or was closed by the peer and /// / k_nSteamNetworkingSend_AutoRestartBrokenSession was not specified. (You can /// / use GetSessionConnectionInfo to get the details.) In order to acknowledge the /// / broken session and start a new one, you must call CloseSessionWithUser, or you may /// / repeat the call with k_nSteamNetworkingSend_AutoRestartBrokenSession. See /// / k_nSteamNetworkingSend_AutoRestartBrokenSession for more details. /// / - See ISteamNetworkingSockets::SendMessageToConnection for more possible return values /// public static EResult SendMessageToUser(ref SteamNetworkingIdentity identityRemote, IntPtr pubData, uint cubData, int nSendFlags, int nRemoteChannel) { InteropHelp.TestIfAvailableClient(); return NativeMethods.ISteamNetworkingMessages_SendMessageToUser(CSteamAPIContext.GetSteamNetworkingMessages(), ref identityRemote, pubData, cubData, nSendFlags, nRemoteChannel); } /// /// / Reads the next message that has been sent from another user via SendMessageToUser() on the given channel. /// / Returns number of messages returned into your list. (0 if no message are available on that channel.) /// / /// / When you're done with the message object(s), make sure and call SteamNetworkingMessage_t::Release()! /// public static int ReceiveMessagesOnChannel(int nLocalChannel, IntPtr[] ppOutMessages, int nMaxMessages) { InteropHelp.TestIfAvailableClient(); return NativeMethods.ISteamNetworkingMessages_ReceiveMessagesOnChannel(CSteamAPIContext.GetSteamNetworkingMessages(), nLocalChannel, ppOutMessages, nMaxMessages); } /// /// / Call this in response to a SteamNetworkingMessagesSessionRequest_t callback. /// / SteamNetworkingMessagesSessionRequest_t are posted when a user tries to send you a message, /// / and you haven't tried to talk to them first. If you don't want to talk to them, just ignore /// / the request. If the user continues to send you messages, SteamNetworkingMessagesSessionRequest_t /// / callbacks will continue to be posted periodically. /// / /// / Returns false if there is no session with the user pending or otherwise. If there is an /// / existing active session, this function will return true, even if it is not pending. /// / /// / Calling SendMessageToUser() will implicitly accepts any pending session request to that user. /// public static bool AcceptSessionWithUser(ref SteamNetworkingIdentity identityRemote) { InteropHelp.TestIfAvailableClient(); return NativeMethods.ISteamNetworkingMessages_AcceptSessionWithUser(CSteamAPIContext.GetSteamNetworkingMessages(), ref identityRemote); } /// /// / Call this when you're done talking to a user to immediately free up resources under-the-hood. /// / If the remote user tries to send data to you again, another SteamNetworkingMessagesSessionRequest_t /// / callback will be posted. /// / /// / Note that sessions that go unused for a few minutes are automatically timed out. /// public static bool CloseSessionWithUser(ref SteamNetworkingIdentity identityRemote) { InteropHelp.TestIfAvailableClient(); return NativeMethods.ISteamNetworkingMessages_CloseSessionWithUser(CSteamAPIContext.GetSteamNetworkingMessages(), ref identityRemote); } /// /// / Call this when you're done talking to a user on a specific channel. Once all /// / open channels to a user have been closed, the open session to the user will be /// / closed, and any new data from this user will trigger a /// / SteamSteamNetworkingMessagesSessionRequest_t callback /// public static bool CloseChannelWithUser(ref SteamNetworkingIdentity identityRemote, int nLocalChannel) { InteropHelp.TestIfAvailableClient(); return NativeMethods.ISteamNetworkingMessages_CloseChannelWithUser(CSteamAPIContext.GetSteamNetworkingMessages(), ref identityRemote, nLocalChannel); } /// /// / Returns information about the latest state of a connection, if any, with the given peer. /// / Primarily intended for debugging purposes, but can also be used to get more detailed /// / failure information. (See SendMessageToUser and k_nSteamNetworkingSend_AutoRestartBrokenSession.) /// / /// / Returns the value of SteamNetConnectionInfo_t::m_eState, or k_ESteamNetworkingConnectionState_None /// / if no connection exists with specified peer. You may pass nullptr for either parameter if /// / you do not need the corresponding details. Note that sessions time out after a while, /// / so if a connection fails, or SendMessageToUser returns k_EResultNoConnection, you cannot wait /// / indefinitely to obtain the reason for failure. /// public static ESteamNetworkingConnectionState GetSessionConnectionInfo(ref SteamNetworkingIdentity identityRemote, out SteamNetConnectionInfo_t pConnectionInfo, out SteamNetConnectionRealTimeStatus_t pQuickStatus) { InteropHelp.TestIfAvailableClient(); return NativeMethods.ISteamNetworkingMessages_GetSessionConnectionInfo(CSteamAPIContext.GetSteamNetworkingMessages(), ref identityRemote, out pConnectionInfo, out pQuickStatus); } } } #endif // !DISABLESTEAMWORKS