protected void LateUpdate() { if (!isRunning) { return; } IntPtr[] nativeMessages = ArrayPool.GetPointerBuffer(); int msgCount = SteamNetworkingMessages.ReceiveMessagesOnChannel(0, nativeMessages, 256); for (int i = 0; i < msgCount; i++) { RecieveMessage(nativeMessages[i]); } //while (SteamNetworking.IsP2PPacketAvailable(out uint _PacketSize) && _PacketSize > 0) //{ // // size of the new buffer // if (SteamNetworking.ReadP2PPacket(msgBuffer, _PacketSize, out uint bufferSize, out CSteamID _IDofSender)) // { // ArraySegment<byte> segment = new ArraySegment<byte>(msgBuffer, 0, (int)bufferSize); // HandleData(_IDofSender, segment); // } //} }
public bool RemoveConnection(CSteamID id) { if (connectedPeers.TryGetValue(id, out var conn)) { SteamNetworkingMessages.CloseSessionWithUser(ref conn.identity); } return(connectedPeers.Remove(id)); }
/// <summary> /// Sends a message to the target. /// </summary> /// <param name="msg"></param> /// <param name="qos"></param> public void Send(short opcode, ISerializablePacket packet, SteamNetworkingIdentity target)/* OutgoingMessage msg)*/ { if (!IsConnected) { return; } if (!IsLocal) { return; } using (PooledNetWriter w = NetWriterPool.GetWriter()) { MessageHelper.CreateAndFinalize(w, opcode, packet); var segment = w.ToArray(); //if (NetLogFilter.messageDiagnostics) { NetDiagnostics.OnSend(opcode, segment.Count, 1); } // Initialize unmanaged memory to hold the array. int size = Marshal.SizeOf(segment[0]) * segment.Length; IntPtr pnt = Marshal.AllocHGlobal(size); try { // Copy the array to unmanaged memory. Marshal.Copy(segment, 0, pnt, segment.Length); EResult result = SteamNetworkingMessages.SendMessageToUser(ref target, pnt, (uint)size, Constants.k_nSteamNetworkingSend_ReliableNoNagle, 0); if (NetLogFilter.logInfo) { Debug.Log($"Packet to {SteamFriends.GetFriendPersonaName(target.GetSteamID())} was sent with resilt: {result}. ({Time.time})"); } } finally { // Free the unmanaged memory. Marshal.FreeHGlobal(pnt); } //if (SteamNetworking.SendP2PPacket(target, segment, (uint)segment.Length, EP2PSend.k_EP2PSendReliable)) //{ // if (NetLogFilter.logInfo) { Debug.Log($"Packet to {SteamFriends.GetFriendPersonaName(target)} was successfully sent. ({Time.time})"); } //} //else //{ // if (NetLogFilter.logInfo) { Debug.Log($"Packet to {SteamFriends.GetFriendPersonaName(target)} failed to send. ({Time.time})"); } //} } }
/// <summary> /// Called when a request to create a p2p connection occurs. /// </summary> /// <param name="pCallback"></param> private void OnSessionRequest(SteamNetworkingMessagesSessionRequest_t pCallback) { if (NetLogFilter.logInfo) { Debug.Log($"Session request from {pCallback.m_identityRemote.GetSteamID()}. ({Time.time})"); } if (connectedPeers.TryGetValue(pCallback.m_identityRemote.GetSteamID(), out var conn)) { conn.IsConnected = true; conn.identity = pCallback.m_identityRemote; SteamNetworkingMessages.AcceptSessionWithUser(ref conn.identity); //SteamNetworking.AcceptP2PSessionWithUser(pCallback.m_identityRemote.GetSteamID()); } }
public void Send(short opcode, ISerializablePacket packet) { if (!IsConnected) { return; } if (!IsLocal) { return; } using (PooledNetWriter w = NetWriterPool.GetWriter()) { MessageHelper.CreateAndFinalize(w, opcode, packet); var segment = w.ToArray(); //if (NetLogFilter.messageDiagnostics) { NetDiagnostics.OnSend(opcode, segment.Count, 1); } // Initialize unmanaged memory to hold the array. int size = Marshal.SizeOf(segment[0]) * segment.Length; IntPtr pnt = Marshal.AllocHGlobal(size); try { foreach (var conn in connectedPeers.Values) { Marshal.Copy(segment, 0, pnt, segment.Length); EResult result = SteamNetworkingMessages.SendMessageToUser(ref conn.identity, pnt, (uint)size, Constants.k_nSteamNetworkingSend_ReliableNoNagle, 0); if (NetLogFilter.logInfo) { Debug.Log($"Packet to {SteamFriends.GetFriendPersonaName(conn.identity.GetSteamID())} was sent with resilt: {result}. ({Time.time})"); } } // Copy the array to unmanaged memory. } finally { // Free the unmanaged memory. Marshal.FreeHGlobal(pnt); } } }