Facepunch.Steamworks Wiki

Revision Difference

Sending_P2P_Messages#562966

<deprecated> This has been depreceated and https://wiki.facepunch.com/steamworks/SteamNetworkingSockets should be used instead. </deprecated>⤶ <cat>code.networking</cat> <title>P2P Networking</title> Steam has a mechanism allowing you to send packets to another Steam user. It's totally feasible to create a game's netcode using this system. <note>In the past we used this in Rust to send voice communications instead of bouncing it off the server. We ultimately stopped doing this because it revealed your IP.</note> # Sending Messages ``` byte[] mydata = ... SteamId TargetSteamId = ... var sent = SteamNetworking.SendP2PPacket( TargetSteamId, mydata ); // if sent is true - the data was sent ! ``` # Receiving Messages You need to set up a callback so you can authorize who can send you messages ``` SteamNetworking.OnP2PSessionRequest = ( steamid ) => { // If we want to let this steamid talk to us SteamNetworking.AcceptP2PSessionWithUser( steamid ); } ``` Then just call something like this regularly ``` while ( SteamNetworking.IsP2PPacketAvailable() ) { var packet = SteamNetworking.ReadP2PPacket(); if ( packet.HasValue ) { HandleMessageFrom( packet.Value.SteamId, packet.Value.Data ); } } ``` Your HandleMessageFrom function should look like this ``` void HandleMessageFrom( SteamId steamid, Data data ) { .. do stuff } ``` # Further Reading There are less garbage creating versions of some of the functions here on the <page>SteamNetworking</page> class. Although the p2p stuff is easy and will work out for a lot of situations, you should look at <page>SteamNetworkingSockets</page> if you're planning to make a game with client/server architecture with 10+ players sending updates multiple times a second.