Exemplo n.º 1
0
        public async Task NetworkDeviceSendAndReceive()
        {
            await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings { NoClient = true, ExtraPrototypes = Prototypes });

            var server = pairTracker.Pair.Server;

            var mapManager          = server.ResolveDependency <IMapManager>();
            var entityManager       = server.ResolveDependency <IEntityManager>();
            var deviceNetSystem     = entityManager.EntitySysManager.GetEntitySystem <DeviceNetworkSystem>();
            var deviceNetTestSystem = entityManager.EntitySysManager.GetEntitySystem <DeviceNetworkTestSystem>();


            EntityUid device1 = default;
            EntityUid device2 = default;
            DeviceNetworkComponent networkComponent1 = null;
            DeviceNetworkComponent networkComponent2 = null;

            var testValue = "test";
            var payload   = new NetworkPayload
            {
                ["Test"]       = testValue,
                ["testnumber"] = 1,
                ["testbool"]   = true
            };

            await server.WaitAssertion(() => {
                mapManager.CreateNewMapEntity(MapId.Nullspace);

                device1 = entityManager.SpawnEntity("DummyNetworkDevice", MapCoordinates.Nullspace);

                Assert.That(entityManager.TryGetComponent(device1, out networkComponent1), Is.True);
                Assert.That(networkComponent1.ReceiveFrequency != null, Is.True);
                Assert.That(networkComponent1.Address, Is.Not.EqualTo(string.Empty));

                device2 = entityManager.SpawnEntity("DummyNetworkDevice", MapCoordinates.Nullspace);

                Assert.That(entityManager.TryGetComponent(device2, out networkComponent2), Is.True);
                Assert.That(networkComponent1.ReceiveFrequency != null, Is.True);
                Assert.That(networkComponent2.Address, Is.Not.EqualTo(string.Empty));

                Assert.That(networkComponent1.Address, Is.Not.EqualTo(networkComponent2.Address));

                deviceNetSystem.QueuePacket(device1, networkComponent2.Address, payload, networkComponent2.ReceiveFrequency.Value);
            });

            await server.WaitRunTicks(1);

            await server.WaitIdleAsync();

            await server.WaitAssertion(() => {
                CollectionAssert.AreEquivalent(deviceNetTestSystem.LastPayload, payload);
            });

            await pairTracker.CleanReturnAsync();
        }
    /// <summary>
    /// Powerful. Funny alt interact using.
    /// Adds an alternative verb for saving a device on the configurator for entities with the <see cref="DeviceListComponent"/>.
    /// Allows alt clicking entities with a network configurator that would otherwise trigger a different action like entities
    /// with a <see cref="DeviceListComponent"/>
    /// </summary>
    private void OnAddAlternativeSaveDeviceVerb(EntityUid uid, DeviceNetworkComponent component, GetVerbsEvent <AlternativeVerb> args)
    {
        if (!args.CanAccess || !args.CanInteract || !args.Using.HasValue || !HasComp <NetworkConfiguratorComponent>(args.Using.Value) ||
            !HasComp <DeviceListComponent>(args.Target))
        {
            return;
        }

        AlternativeVerb verb = new()
        {
            Text        = Loc.GetString("network-configurator-save-device"),
            IconTexture = "/Textures/Interface/VerbIcons/in.svg.192dpi.png",
            Act         = () => TryAddNetworkDevice(args.Target, args.Using.Value, args.User),
            Impact      = LogImpact.Low
        };

        args.Verbs.Add(verb);
    }
 private void OnPacketReceived(EntityUid uid, DeviceNetworkComponent component, DeviceNetworkPacketEvent args)
 {
     LastPayload = args.Data;
 }
        public async Task NetworkDeviceSendAndReceive()
        {
            var options = new ServerContentIntegrationOption
            {
                ExtraPrototypes  = Prototypes,
                ContentBeforeIoC = () => {
                    IoCManager.Resolve <IEntitySystemManager>().LoadExtraSystemType <DeviceNetworkTestSystem>();
                }
            };

            var server = StartServerDummyTicker(options);

            await server.WaitIdleAsync();

            var mapManager          = server.ResolveDependency <IMapManager>();
            var entityManager       = server.ResolveDependency <IEntityManager>();
            var deviceNetSystem     = entityManager.EntitySysManager.GetEntitySystem <DeviceNetworkSystem>();
            var deviceNetTestSystem = entityManager.EntitySysManager.GetEntitySystem <DeviceNetworkTestSystem>();


            IEntity device1 = null;
            IEntity device2 = null;
            DeviceNetworkComponent networkComponent1 = null;
            DeviceNetworkComponent networkComponent2 = null;

            var testValue = "test";
            var payload   = new NetworkPayload
            {
                ["Test"]       = testValue,
                ["testnumber"] = 1,
                ["testbool"]   = true
            };

            server.Assert(() => {
                mapManager.CreateNewMapEntity(MapId.Nullspace);

                device1 = entityManager.SpawnEntity("DummyNetworkDevice", MapCoordinates.Nullspace);

                Assert.That(device1.TryGetComponent(out networkComponent1), Is.True);
                Assert.That(networkComponent1.Open, Is.True);
                Assert.That(networkComponent1.Address, Is.Not.EqualTo(string.Empty));

                device2 = entityManager.SpawnEntity("DummyNetworkDevice", MapCoordinates.Nullspace);

                Assert.That(device2.TryGetComponent(out networkComponent2), Is.True);
                Assert.That(networkComponent2.Open, Is.True);
                Assert.That(networkComponent2.Address, Is.Not.EqualTo(string.Empty));

                Assert.That(networkComponent1.Address, Is.Not.EqualTo(networkComponent2.Address));

                deviceNetSystem.QueuePacket(device1.Uid, networkComponent2.Address, networkComponent2.Frequency, payload);
            });

            await server.WaitRunTicks(1);

            await server.WaitIdleAsync();

            server.Assert(() => {
                CollectionAssert.AreEquivalent(deviceNetTestSystem.LastPayload, payload);
            });
        }
Exemplo n.º 5
0
        public async Task WiredNetworkDeviceSendAndReceive()
        {
            var options = new ServerContentIntegrationOption
            {
                ExtraPrototypes  = Prototypes,
                ContentBeforeIoC = () => {
                    IoCManager.Resolve <IEntitySystemManager>().LoadExtraSystemType <DeviceNetworkTestSystem>();
                }
            };

            var server = StartServer(options);

            await server.WaitIdleAsync();

            var mapManager          = server.ResolveDependency <IMapManager>();
            var entityManager       = server.ResolveDependency <IEntityManager>();
            var deviceNetSystem     = entityManager.EntitySysManager.GetEntitySystem <DeviceNetworkSystem>();
            var deviceNetTestSystem = entityManager.EntitySysManager.GetEntitySystem <DeviceNetworkTestSystem>();


            EntityUid device1 = default;
            EntityUid device2 = default;
            DeviceNetworkComponent networkComponent1     = null;
            DeviceNetworkComponent networkComponent2     = null;
            WiredNetworkComponent  wiredNetworkComponent = null;
            IMapGrid grid = null;

            var testValue = "test";
            var payload   = new NetworkPayload
            {
                ["Test"]       = testValue,
                ["testnumber"] = 1,
                ["testbool"]   = true
            };

            await server.WaitRunTicks(1);

            await server.WaitIdleAsync();

            server.Assert(() => {
                var map = mapManager.CreateNewMapEntity(MapId.Nullspace);
                grid    = mapManager.CreateGrid(MapId.Nullspace);

                device1 = entityManager.SpawnEntity("DummyWiredNetworkDevice", MapCoordinates.Nullspace);

                Assert.That(entityManager.TryGetComponent(device1, out networkComponent1), Is.True);
                Assert.That(entityManager.TryGetComponent(device1, out wiredNetworkComponent), Is.True);
                Assert.That(networkComponent1.Open, Is.True);
                Assert.That(networkComponent1.Address, Is.Not.EqualTo(string.Empty));

                device2 = entityManager.SpawnEntity("DummyWiredNetworkDevice", new MapCoordinates(new Robust.Shared.Maths.Vector2(0, 2), MapId.Nullspace));

                Assert.That(entityManager.TryGetComponent(device2, out networkComponent2), Is.True);
                Assert.That(networkComponent2.Open, Is.True);
                Assert.That(networkComponent2.Address, Is.Not.EqualTo(string.Empty));

                Assert.That(networkComponent1.Address, Is.Not.EqualTo(networkComponent2.Address));

                deviceNetSystem.QueuePacket(device1, networkComponent2.Address, networkComponent2.Frequency, payload);
            });

            await server.WaitRunTicks(1);

            await server.WaitIdleAsync();

            server.Assert(() => {
                //CollectionAssert.AreNotEqual(deviceNetTestSystem.LastPayload, payload);

                entityManager.SpawnEntity("CableApcExtension", grid.MapToGrid(new MapCoordinates(new Robust.Shared.Maths.Vector2(0, 1), MapId.Nullspace)));

                deviceNetSystem.QueuePacket(device1, networkComponent2.Address, networkComponent2.Frequency, payload);
            });

            await server.WaitRunTicks(1);

            await server.WaitIdleAsync();

            server.Assert(() => {
                CollectionAssert.AreEqual(deviceNetTestSystem.LastPayload, payload);
            });

            await server.WaitIdleAsync();
        }