Ejemplo n.º 1
0
        public void Update()
        {
            Multiplayer.session?.netClient?.PollEvents();

            queue.RunQueue();

            if (SteamManager.Initialized)
            {
                SteamIntegration.UpdateRichPresence();
            }

            if (Multiplayer.Client == null)
            {
                return;
            }

            UpdateSync();

            if (!Multiplayer.arbiterInstance && Application.isFocused && Time.realtimeSinceStartup - lastCursorSend > 0.05f && TickPatch.skipTo < 0)
            {
                lastCursorSend = Time.realtimeSinceStartup;
                SendCursor();
            }

            if (Multiplayer.Client is SteamBaseConn steamConn && SteamManager.Initialized)
            {
                foreach (var packet in SteamIntegration.ReadPackets())
                {
                    if (steamConn.remoteId == packet.remote)
                    {
                        Multiplayer.HandleReceive(packet.data, packet.reliable);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void Update()
        {
            Multiplayer.session?.netClient?.PollEvents();

            queue.RunQueue();

            if (SteamManager.Initialized)
            {
                SteamIntegration.UpdateRichPresence();
            }

            if (Multiplayer.Client == null)
            {
                return;
            }

            UpdateSync();

            if (!Multiplayer.arbiterInstance && Application.isFocused && !TickPatch.Skipping && !Multiplayer.session.desynced)
            {
                SendVisuals();
            }

            if (Multiplayer.Client is SteamBaseConn steamConn && SteamManager.Initialized)
            {
                foreach (var packet in SteamIntegration.ReadPackets())
                {
                    if (steamConn.remoteId == packet.remote)
                    {
                        Multiplayer.HandleReceive(packet.data, packet.reliable);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public static void TryConnect(IPAddress address, int port)
        {
            EventBasedNetListener listener = new EventBasedNetListener();

            Multiplayer.session = new MultiplayerSession();
            NetManager netClient = new NetManager(listener);

            netClient.Start();
            netClient.ReconnectDelay     = 300;
            netClient.MaxConnectAttempts = 8;

            listener.PeerConnectedEvent += peer =>
            {
                IConnection conn = new MpNetConnection(peer);
                conn.username = Multiplayer.username;
                conn.State    = ConnectionStateEnum.ClientJoining;
                Multiplayer.session.client = conn;

                MpLog.Log("Net client connected");
            };

            listener.PeerDisconnectedEvent += (peer, info) =>
            {
                string reason;

                if (info.AdditionalData.AvailableBytes > 0)
                {
                    reason = info.AdditionalData.GetString();
                }
                else
                {
                    reason = DisconnectReasonString(info.Reason);
                    if (info.SocketErrorCode != SocketError.Success)
                    {
                        reason += ": " + info.SocketErrorCode;
                    }
                }

                Multiplayer.session.disconnectNetReason = reason;

                ConnectionStatusListeners.TryNotifyAll_Disconnected();

                OnMainThread.StopMultiplayer();
                MpLog.Log("Net client disconnected");
            };

            listener.NetworkReceiveEvent += (peer, reader, method) =>
            {
                byte[] data = reader.GetRemainingBytes();
                Multiplayer.HandleReceive(new ByteReader(data), method == DeliveryMethod.ReliableOrdered);
            };

            listener.NetworkErrorEvent += (endpoint, error) =>
            {
                Log.Warning($"Net client error {error}");
            };

            Multiplayer.session.netClient = netClient;
            netClient.Connect(address.ToString(), port, "");
        }
Ejemplo n.º 4
0
 public void OnNetworkReceive(NetPeer peer, NetPacketReader reader, DeliveryMethod method)
 {
     byte[] data = reader.GetRemainingBytes();
     Multiplayer.HandleReceive(new ByteReader(data), method == DeliveryMethod.ReliableOrdered);
 }