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);
            //    }
            //}
        }
Example #2
0
 public bool RemoveConnection(CSteamID id)
 {
     if (connectedPeers.TryGetValue(id, out var conn))
     {
         SteamNetworkingMessages.CloseSessionWithUser(ref conn.identity);
     }
     return(connectedPeers.Remove(id));
 }
Example #3
0
        /// <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})"); }
                //}
            }
        }
Example #4
0
        /// <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());
            }
        }
Example #5
0
        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);
                }
            }
        }