public void TestSavePersistent()
        {
            string key1     = "key1";
            string toWrite1 = "val1";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite1));
            NtCore.SetEntryFlags(key1, EntryFlags.Persistent);

            string key2 = "key2";

            NtCore.SetEntryValue(key2, Value.MakeBoolean(true));
            NtCore.SetEntryFlags(key2, EntryFlags.Persistent);

            string fileName = "testfile.txt";

            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            NtCore.SavePersistent(fileName);

            string[] lines = File.ReadAllLines(fileName);

            Assert.That(lines.Length, Is.GreaterThanOrEqualTo(3));
            Assert.That(lines[0], Contains.Substring("[NetworkTables Storage 3.0]"));
            Assert.That(lines[1], Contains.Substring($"string \"{key1}\"=\"{toWrite1}\""));
            Assert.That(lines[2], Contains.Substring($"boolean \"{key2}\"=true"));
        }
Exemple #2
0
 public void FixtureSetUp()
 {
     NtCore.SetLogger((level, file, line, msg) =>
     {
         Console.WriteLine(msg);
     }, LogLevel.LogInfo);
 }
        public void TestGetEntriesOnlyString()
        {
            string key1     = "testKey";
            string toWrite1 = "written";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite1));

            string key2     = "testKey2";
            double toWrite2 = 3.58;

            NtCore.SetEntryValue(key2, Value.MakeDouble(toWrite2));

            string key3     = "testKey3";
            bool   toWrite3 = true;

            NtCore.SetEntryValue(key3, Value.MakeBoolean(toWrite3));

            Thread.Sleep(20);

            var entries = NtCore.GetEntryInfo("", NtType.String);

            Assert.That(1, Is.EqualTo(entries.Count));

            Assert.That(entries[0].Name, Is.EqualTo(key1));
            Assert.That(entries[0].Type, Is.EqualTo(NtType.String));
            Assert.That(entries[0].Flags, Is.EqualTo(EntryFlags.None));
            Assert.That(entries[0].LastChange, Is.GreaterThan(0));
        }
Exemple #4
0
        public void TestPersistentLoadError()
        {
            const string key1 = "key1";
            const string key2 = "key2";
            const string val1 = "val1";

            string[] toWrite = new[]
            {
                "[NetworkTables Storage 3.0]",
                $"string \"{key1}\"=\"{val1}\"",
                $"boolean \"{key2}\"=invalid",
                ""
            };

            string fileName = "testfile.txt";

            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            File.WriteAllLines(fileName, toWrite);

            string[] errors = NtCore.LoadPersistent(fileName);

            Assert.That(errors.Length, Is.EqualTo(1));
            Assert.That(errors[0], Contains.Substring("3: unrecognized boolean value, not 'true' or 'false'"));
        }
Exemple #5
0
        public void TestLoadPersistent()
        {
            const string key1 = "key1";
            const string key2 = "key2";
            const string val1 = "val1";

            string[] toWrite = new[]
            {
                "[NetworkTables Storage 3.0]",
                $"string \"{key1}\"=\"{val1}\"",
                $"boolean \"{key2}\"=true",
                ""
            };

            string fileName = "testfile.txt";

            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            File.WriteAllLines(fileName, toWrite);

            string[] errors = NtCore.LoadPersistent(fileName);

            Assert.That(errors.Length, Is.EqualTo(0));

            var entries = CoreMethods.GetEntryInfo("", 0);

            Assert.That(entries.Count, Is.EqualTo(2));

            Assert.That(CoreMethods.GetEntryString(key1, ""), Is.EqualTo(val1));
            Assert.That(CoreMethods.GetEntryBoolean(key2, false), Is.EqualTo(true));
        }
Exemple #6
0
 public static void DeleteAllWithPersistent()
 {
     foreach (var entryInfo in NtCore.GetEntryInfo("", 0))
     {
         NtCore.DeleteEntry(entryInfo.Name);
     }
 }
        public void TestContainsKeySuccess()
        {
            string key1     = "testKey";
            string toWrite1 = "written";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite1));

            Assert.That(NtCore.ContainsEntry(key1));
        }
        public void TestGetTypeSuccess()
        {
            string key1     = "testKey";
            string toWrite1 = "written";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite1));

            Assert.That(NtCore.GetType(key1), Is.EqualTo(NtType.String));
        }
        /// <inheritdoc cref="NtCore.GetEntryBooleanArray(string)"/>
        public bool[] GetEntryBooleanArray(string name)
        {
            var v = m_storage.GetEntryValue(name);

            if (v == null || !v.IsBooleanArray())
            {
                throw NtCore.GetValueException(name, v, NtType.BooleanArray);
            }
            return(v.GetBooleanArray());
        }
        /// <inheritdoc cref="NtCore.GetEntryDoubleArray(string)"/>
        public double[] GetEntryDoubleArray(string name)
        {
            var v = m_storage.GetEntryValue(name);

            if (v == null || !v.IsDoubleArray())
            {
                throw NtCore.GetValueException(name, v, NtType.DoubleArray);
            }
            return(v.GetDoubleArray());
        }
        /// <inheritdoc cref="NtCore.GetEntryStringArray(string)"/>
        public string[] GetEntryStringArray(string name)
        {
            var v = m_storage.GetEntryValue(name);

            if (v == null || !v.IsStringArray())
            {
                throw NtCore.GetValueException(name, v, NtType.StringArray);
            }
            return(v.GetStringArray());
        }
        /// <inheritdoc cref="NtCore.GetEntryRaw(string)"/>
        public byte[] GetEntryRaw(string name)
        {
            var v = m_storage.GetEntryValue(name);

            if (v == null || !v.IsRaw())
            {
                throw NtCore.GetValueException(name, v, NtType.Raw);
            }
            return(v.GetRaw());
        }
Exemple #13
0
        public void TestAddRemoveConnectionListener()
        {
            ConnectionListenerCallback callback = (uid, connected, conn) =>
            {
            };

            int id = NtCore.AddConnectionListener(callback, true);

            Assert.That(id, Is.Not.EqualTo(0));

            NtCore.RemoveEntryListener(id);
        }
Exemple #14
0
        public void TestAddEntryListener()
        {
            string key1     = "testKey";
            string toWrite1 = "written";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite1));

            int         count         = 0;
            string      recievedKey   = "";
            Value       recievedValue = null;
            NotifyFlags receivedFlags = 0;

            NotifyFlags f = NotifyFlags.NotifyNew | NotifyFlags.NotifyUpdate;

            if (true)
            {
                f |= NotifyFlags.NotifyLocal;
            }

            int listener = NtCore.AddEntryListener(key1, (uid, key, value, flags) =>
            {
                count++;
                recievedKey   = key;
                recievedValue = value;
                receivedFlags = flags;
            }, f);

            string toWrite2 = "NewNumber";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite2));

            Thread.Sleep(20);

            Assert.That(count, Is.GreaterThanOrEqualTo(1));
            Assert.That(recievedKey, Is.EqualTo(key1));
            Assert.That(recievedValue, Is.Not.Null);

            Assert.That(recievedValue.IsString);

            var retValue = recievedValue.GetString();

            Assert.That(retValue, Is.Not.Null);
            Assert.That(retValue, Is.EqualTo(toWrite2));

            Assert.That(receivedFlags.HasFlag(NotifyFlags.NotifyLocal));

            NtCore.RemoveEntryListener(listener);
        }
        public void TestGetEntryFlags()
        {
            string key = "testKey";

            NtCore.SetEntryValue(key, Value.MakeString("value"));

            EntryFlags flags = NtCore.GetEntryFlags(key);

            Assert.That(flags, Is.EqualTo(EntryFlags.None));

            NtCore.SetEntryFlags(key, EntryFlags.Persistent);

            flags = NtCore.GetEntryFlags(key);

            Assert.That(flags, Is.EqualTo(EntryFlags.Persistent));
        }
Exemple #16
0
        /// <summary>
        /// Initializes the singleton application object.  This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public App()
        {
            this.InitializeComponent();

            NtCoreHelper.LoadOnStaticInit = false;
            try
            {
                NtCore.LoadExisting(new NtCorePlatform());
            }
            catch (Exception ex)
            {
                throw ex;
            }


            this.Suspending += OnSuspending;
        }
Exemple #17
0
        public void TestEntryListenerBooleanArray()
        {
            string key1 = "testKey";

            bool[] toWrite1 = { true, true, true };
            NtCore.SetEntryValue(key1, Value.MakeBooleanArray(toWrite1));

            int         count         = 0;
            string      recievedKey   = "";
            Value       recievedValue = null;
            NotifyFlags receivedFlags = 0;

            NotifyFlags f = NotifyFlags.NotifyNew | NotifyFlags.NotifyUpdate;

            if (true)
            {
                f |= NotifyFlags.NotifyImmediate;
            }

            int listener = NtCore.AddEntryListener(key1, (uid, key, value, flags) =>
            {
                count++;
                recievedKey   = key;
                recievedValue = value;
                receivedFlags = flags;
            }, f);

            Thread.Sleep(300);

            Assert.That(count, Is.EqualTo(1));
            Assert.That(recievedKey, Is.EqualTo(key1));
            Assert.That(recievedValue, Is.Not.Null);

            Assert.That(recievedValue.IsBooleanArray());

            bool[] retValue = recievedValue.GetBooleanArray();

            for (int i = 0; i < retValue.Length; i++)
            {
                Assert.That(retValue[i], Is.EqualTo(toWrite1[i]));
            }

            Assert.That(receivedFlags.HasFlag(NotifyFlags.NotifyImmediate));

            NtCore.RemoveEntryListener(listener);
        }
        public void TestDeleteEntry()
        {
            string key1     = "testKey";
            string toWrite1 = "written";

            NtCore.SetEntryValue(key1, Value.MakeString(toWrite1));

            string key2     = "testKey2";
            double toWrite2 = 3.58;

            NtCore.SetEntryValue(key2, Value.MakeDouble(toWrite2));

            Assert.That(NtCore.GetEntryInfo("", 0).Count, Is.EqualTo(2));

            NtCore.DeleteEntry(key1);

            Assert.That(NtCore.GetEntryInfo("", 0).Count, Is.EqualTo(1));

            Assert.That(NtCore.GetEntryValue(key1), Is.Null);
        }
Exemple #19
0
        static void Main(string[] args)
        {
            NtCore.Initialize();
            NetworkTableInstance instance = NetworkTableInstance.Default;

            GC.KeepAlive(instance);
            //var i = SendableRegistry.Instance;

            //var map = new ConditionalWeakTable<HolderMethod, Container>();

            //var holder = new HolderMethod();
            //map.Add(holder, new Container(holder));
            ////holder = null;

            ////while (map.Any())
            ////{
            ////    //Console.WriteLine(map.Count());
            ////    GC.Collect();
            ////}
            //RobotBase.StartRobot<Robot>();
        }
Exemple #20
0
        private CameraServer()
        {
            m_defaultUsbDevice = 0;
            m_lockObject       = new object();
            m_sources          = new Dictionary <string, VideoSource>();
            m_sinks            = new Dictionary <string, VideoSink>();
            m_tables           = new Dictionary <int, ITable>();
            m_publishTable     = NetworkTable.GetTable(PublishName);
            m_nextPort         = BasePort;
            m_addresses        = new List <string>();

            m_videoListener = new VideoListener((vidEvent) =>
            {
                switch (vidEvent.Kind)
                {
                case EventKind.SourceCreated:
                    {
                        // Create subtable for the camera
                        ITable table = m_publishTable.GetSubTable(vidEvent.Name);
                        lock (m_lockObject)
                        {
                            m_tables.Add(vidEvent.SourceHandle, table);
                        }
                        table.PutString("source", MakeSourceValue(vidEvent.SourceHandle));
                        table.PutString("description",
                                        NativeMethods.GetSourceDescription(vidEvent.SourceHandle));
                        table.PutBoolean("connected", NativeMethods.IsSourceConnected(vidEvent.SourceHandle));
                        table.PutStringArray("streams", GetSourceStreamValues(vidEvent.SourceHandle));
                        try
                        {
                            VideoMode mode = NativeMethods.GetSourceVideoMode(vidEvent.SourceHandle);
                            table.SetDefaultString("mode", VideoModeToString(mode));
                            table.PutStringArray("modes", GetSourceModeValues(vidEvent.SourceHandle));
                        }
                        catch (VideoException)
                        {
                            // Do nothing
                        }
                        break;
                    }

                case EventKind.SourceDestroyed:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            table.PutString("source", "");
                            table.PutStringArray("streams", new string[0]);
                            table.PutStringArray("modes", new string[0]);
                        }
                        break;
                    }

                case EventKind.SourceConnected:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            // update the description too (as it may have changed)
                            table.PutString("description",
                                            NativeMethods.GetSourceDescription(vidEvent.SourceHandle));
                            table.PutBoolean("connected", true);
                        }
                        break;
                    }

                case EventKind.SourceDisconnected:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        table?.PutBoolean("connected", false);
                        break;
                    }

                case EventKind.SourceVideoModesUpdated:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            table.PutStringArray("modes", GetSourceModeValues(vidEvent.SourceHandle));
                        }
                        break;
                    }

                case EventKind.SourceVideoModeChanged:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            table.PutString("mode", VideoModeToString(vidEvent.Mode));
                        }
                        break;
                    }

                case EventKind.SourcePropertyCreated:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            PutSourcePropertyValue(table, vidEvent, true);
                        }
                        break;
                    }

                case EventKind.SourcePropertyValueUpdated:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            PutSourcePropertyValue(table, vidEvent, false);
                        }
                        break;
                    }

                case EventKind.SourcePropertyChoicesUpdated:
                    {
                        ITable table = GetSourceTable(vidEvent.SourceHandle);
                        if (table != null)
                        {
                            List <string> choices = NativeMethods.GetEnumPropertyChoices(vidEvent.PropertyHandle);
                            table.PutStringArray($"PropertyInfo/{vidEvent.Name}/choices", choices);
                        }
                        break;
                    }

                case EventKind.SinkSourceChanged:
                case EventKind.SinkCreated:
                case EventKind.SinkDestroyed:
                    {
                        UpdateStreamValues();
                        break;
                    }

                case EventKind.NetworkInterfacesChanged:
                    {
                        m_addresses = NativeMethods.GetNetworkInterfaces();
                        break;
                    }

                default:
                    break;
                }
            }, (EventKind)0x4fff, true);

            m_tableListener = NtCore.AddEntryListener($"{PublishName}/", (uid, key, value, flags) =>
            {
                string relativeKey = key.Substring(PublishName.Length + 1);

                int subKeyIndex = relativeKey.IndexOf('/');
                if (subKeyIndex == -1)
                {
                    return;
                }
                string sourceName = relativeKey.Substring(0, subKeyIndex);
                VideoSource source;
                if (!m_sources.TryGetValue(sourceName, out source))
                {
                    return;
                }

                relativeKey = relativeKey.Substring(subKeyIndex + 1);

                string propName;
                if (relativeKey == "mode")
                {
                    // reset to current mode
                    NtCore.SetEntryString(key, VideoModeToString(source.GetVideoMode()));
                    return;
                }
                else if (relativeKey.StartsWith("Property/"))
                {
                    propName = relativeKey.Substring(9);
                }
                else if (relativeKey.StartsWith("RawProperty/"))
                {
                    propName = relativeKey.Substring(12);
                }
                else
                {
                    return;
                }

                VideoProperty prop = source.GetProperty(propName);
                switch (prop.Kind)
                {
                case PropertyKind.None:
                    return;

                case PropertyKind.Boolean:
                    NtCore.SetEntryBoolean(key, prop.Get() != 0);
                    break;

                case PropertyKind.Integer:
                case PropertyKind.Enum:
                    NtCore.SetEntryDouble(key, prop.Get());
                    break;

                case PropertyKind.String:
                    NtCore.SetEntryString(key, prop.GetString());
                    break;

                default:
                    return;
                }
            }, NotifyFlags.NotifyImmediate | NotifyFlags.NotifyUpdate);
        }
Exemple #21
0
 public void FixtureTearDown()
 {
     NtCore.StopRpcServer();
 }
 public void TestGetTypeNonExistentKey()
 {
     Assert.That(NtCore.GetType("testKey"), Is.EqualTo(NtType.Unassigned));
 }
 public void TestContainsKeyNonExistentKey()
 {
     Assert.That(!NtCore.ContainsEntry("testKey"));
 }
Exemple #24
0
 public void FixtureTearDown()
 {
     NtCore.StopNotifier();
 }
Exemple #25
0
        public void TestAddEntryListenerDefaultTypes(object val)
        {
            string key1 = "testKey";

            if (val is double)
            {
                NtCore.SetEntryValue(key1, Value.MakeDouble((double)val));
            }
            else if (val is bool)
            {
                NtCore.SetEntryValue(key1, Value.MakeBoolean((bool)val));
            }
            else if (val is string)
            {
                NtCore.SetEntryValue(key1, Value.MakeString((string)val));
            }

            int         count         = 0;
            string      recievedKey   = "";
            Value       recievedValue = null;
            NotifyFlags receivedFlags = 0;

            NotifyFlags f = NotifyFlags.NotifyNew | NotifyFlags.NotifyUpdate;

            if (true)
            {
                f |= NotifyFlags.NotifyImmediate;
            }

            int listener = NtCore.AddEntryListener(key1, (uid, key, value, flags) =>
            {
                count++;
                recievedKey   = key;
                recievedValue = value;
                receivedFlags = flags;
            }, f);

            Thread.Sleep(20);

            Assert.That(count, Is.EqualTo(1));
            Assert.That(recievedKey, Is.EqualTo(key1));
            Assert.That(recievedValue, Is.Not.Null);

            if (val is double)
            {
                Assert.That(recievedValue.IsDouble());

                var retValue = recievedValue.GetDouble();
                Assert.That(retValue, Is.EqualTo((double)val));
                Assert.That(receivedFlags.HasFlag(NotifyFlags.NotifyImmediate));
            }
            else if (val is bool)
            {
                Assert.That(recievedValue.IsBoolean());

                var retValue = recievedValue.GetBoolean();
                Assert.That(retValue, Is.EqualTo((bool)val));

                Assert.That(receivedFlags.HasFlag(NotifyFlags.NotifyImmediate));
            }
            else if (val is string)
            {
                Assert.That(recievedValue.IsString);

                var retValue = recievedValue.GetString();
                Assert.That(retValue, Is.Not.Null);
                Assert.That(retValue, Is.EqualTo((string)val));

                Assert.That(receivedFlags.HasFlag(NotifyFlags.NotifyImmediate));
            }
            else
            {
                NtCore.RemoveEntryListener(listener);
                Assert.Fail("Unknown type");
                return;
            }

            NtCore.RemoveEntryListener(listener);
        }
        public void TestSetNetworkIdentity()
        {
            NtCore.SetNetworkIdentity("UnitTests");

            Assert.Pass();
        }
        public void TestFlush()
        {
            NtCore.Flush();

            Assert.Pass();
        }
 public void TestNow()
 {
     Assert.That(NtCore.Now(), Is.GreaterThan(0));
 }
        public void TestSetUpdateRate()
        {
            NtCore.SetUpdateRate(100);

            Assert.Pass();
        }
        public void TestGetConnections()
        {
            var connection = NtCore.GetConnections();

            Assert.That(connection.Count, Is.EqualTo(0));
        }