Esempio n. 1
0
 public AutosaveHUD(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, config)
 {
     _autosaveFile = Path.Combine(Topology.GetFolder(Factory.Owner), AUTOSAVE_NAME);
     if (File.Exists(_autosaveFile))
         Topology.LoadTopology(Factory.Owner, Factory.Host.Owner, _autosaveFile);
 }
Esempio n. 2
0
        public LinkStateNode(IMNodeInternal node, IKeyTableFactory tableFactory, IAsynchQueue dijkstraQ, IAsynchQueue packetQ, ForwardDelegate forwardMethod, IConfigSource config)
            : base(node, tableFactory, dijkstraQ, config)
        {
            _eventQ          = packetQ;
            _forwardMethod   = forwardMethod;
            _processedEvents = new HashSet <int>();

            OnRouteChange += (alg, target, oldRoute, newRoute, oldDistance, distance) => {
                _changed = true;
                if (!Model.IsPaused)
                {
                    return;
                }
                if (oldRoute != null && newRoute != null)
                {
                    Say("Link State changed route to " + target.Name + " from " + oldRoute.OtherEnd(Node).Name + " to " + newRoute.OtherEnd(Node).Name + ".");
                }
                else if (oldRoute == null)
                {
                    Say("Link State added route to " + target.Name + " via " + newRoute.OtherEnd(Node).Name + " with distance " + distance + ".");
                }
                else if (newRoute == null)
                {
                    Say("Link State removed route to " + target.Name + ". " + oldRoute.OtherEnd(Node).Name + " is no longer a valid first hop and no other route was found.");
                }
                else
                {
                    Say("Link State changed weight of route to " + target.Name + " from " + oldDistance + " to " + distance + ".");
                }
            };
        }
        public SandboxControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            _tableFactory = tableFactory;

            //IsOn

            int chatChannel = ControlConfig.GetInt("PublicInputChannel", 46);

            if (chatChannel < 0)
            {
                chatChannel = 46;
            }
            Dialog.SetChatChannel(chatChannel);

            //Misc
            _reposition = ControlConfig.GetBoolean("RepositionControls", false);
            float scale = ControlConfig.GetFloat("DefaultScale", .5f);


            if (ControlConfig.GetBoolean("AutoRecord", false))
            {
                Record.StartRecording();
            }

            InitControls();
        }
        public CreateTopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            /*
            //Touch Button
            IButton floor = Factory.MakeButton("Floor", Permissions, HostPrim.ID);
            floor.OnTouched += (source, args) =>  AddRouter(args.AvatarName, args.AvatarID, args.TouchPosition);
            */
            IConfig controlConfig = config.Configs["Control"];

            string god = controlConfig.Get(GOD_KEY, GOD);
            string topologyDefault = controlConfig.Get(TOPOLOGY_KEY, GOD);

            _listener = (name, id, text, channel) => {
                string[] args = text.Split(' ');
                if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE")) {
                    if (args.Length > 1) {
                        HostPrim.Say("Saving topology as " + args[1]);
                        Topology.SaveTopology(name, id, args[1]);
                    } else {
                        HostPrim.Say("Showing Dialog");
                        SaveDialog save = new SaveDialog(HostPrim, primFactory, "Topology", topologyDefault, user => Topology.GetUserFolder(god));
                        save.OnSave += (userName, userID, file) => Topology.SaveTopology(name, id, file);
                        save.Show(name, id);
                    }
                }
            };

            primFactory.OnChat += _listener;
        }
        public CreateTopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            /*
             * //Touch Button
             * IButton floor = Factory.MakeButton("Floor", Permissions, HostPrim.ID);
             * floor.OnTouched += (source, args) =>  AddRouter(args.AvatarName, args.AvatarID, args.TouchPosition);
             */
            IConfig controlConfig = config.Configs["Control"];

            string god             = controlConfig.Get(GOD_KEY, GOD);
            string topologyDefault = controlConfig.Get(TOPOLOGY_KEY, GOD);

            _listener = (name, id, text, channel) => {
                string[] args = text.Split(' ');
                if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE"))
                {
                    if (args.Length > 1)
                    {
                        HostPrim.Say("Saving topology as " + args[1]);
                        Topology.SaveTopology(name, id, args[1]);
                    }
                    else
                    {
                        HostPrim.Say("Showing Dialog");
                        SaveDialog save = new SaveDialog(HostPrim, primFactory, "Topology", topologyDefault, user => Topology.GetUserFolder(god));
                        save.OnSave += (userName, userID, file) => Topology.SaveTopology(name, id, file);
                        save.Show(name, id);
                    }
                }
            };

            primFactory.OnChat += _listener;
        }
Esempio n. 6
0
        internal DVNode(IMNodeInternal node, ForwardDelegate forwardMethod, IAsynchQueue queue, IKeyTableFactory tableFactory, int TTL, IConfigSource config)
            : base(node, tableFactory, config)
        {
            _queue = queue;
            _forwardMethod = forwardMethod;
            this.TTL = TTL;

            distanceVector = new DistanceVector();

            neighbourVectors = tableFactory.MakeKeyTable<DistanceVector>();
            highlightParameters = new Parameters(new object[] { "HColour", node.Colour });

            IConfig dvConfig = config.Configs["DV"];
            if (dvConfig == null)
                dvConfig = config.Configs["DistanceVector"];
            if (dvConfig == null)
                dvConfig = config.Configs["Algorithm"];
            if (dvConfig == null)
                dvConfig = config.Configs[0];

            _poison = dvConfig.GetBoolean("PoisonReverse", true);
            _everPrint = dvConfig.GetBoolean("EverPrint", false);
            _alwaysPrint = dvConfig.GetBoolean("AlwaysPrint", false);
            highlightPrintText = dvConfig.GetBoolean("HighlightPrint", false);
        }
 public SandboxControlLink(ILink link, INode from, INode to, SandboxControl control, IKeyTableFactory tableFactory, IPrimFactory primFactory, IPermissions permissions)
     : base(link, from, to, control, permissions)
 {
     _control = control;
     _bufferedChanges = tableFactory.MakeKeyTable<double>();
     _dialog = new Dialog(control.HostPrim, primFactory, LINK_BUTTONS);
     _dialog.ResponseReceived += DialogPressed;
 }
Esempio n. 8
0
        public View(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IConfigSource config)
            : base(tableFactory, queueFactory)
        {
            _factory          = primFactory;
            _displayingBoards = tableFactory.MakeKeyTable <IEnumerable <UUID> >();
            _moveQ            = queueFactory.MakeQueue();
            _deliverQ         = queueFactory.MakeQueue();
            //_moveQ = new SmartThreadPool(int.MaxValue, 30, 3);

            IConfig viewConfig = config.Configs["View"];

            if (viewConfig == null)
            {
                viewConfig = config.Configs[0];
            }

            _wait           = viewConfig.GetInt("Wait", _wait);
            _waitMultiplier = viewConfig.GetFloat("WaitMultiplier", 5f);
            _displayChannel = viewConfig.GetInt("ListeningChannel", -43);
            _autoUpdate     = viewConfig.GetBoolean("AutoUpdateTables", false);
            int tableResolution = viewConfig.GetInt("TableResolution", -1);

            if (tableResolution > 0)
            {
                VNode.SetTableResolution(tableResolution);
            }

            _moveQ.Start("View Move Queue" /*, viewConfig.GetInt("PacketsPerThread", PACKETS_PER_THREAD)*/);
            _deliverQ.Start("View Deliver Queue");
            //_moveQ.Start();

            VLink.MaxWidth              = viewConfig.GetFloat("maxLinkWidth", VLink.MaxWidth);
            VLink.MinWidth              = viewConfig.GetFloat("minLinkWidth", VLink.MinWidth);
            VPacket.MaxMovesPerUnit     = viewConfig.GetInt("maxNumPacketMovesPerUnit", VPacket.MaxMovesPerUnit);
            VPacket.MinMovesPerUnit     = viewConfig.GetInt("minNumPacketMovesPerUnit", VPacket.MinMovesPerUnit);
            VPacket.DefaultMovesPerUnit = viewConfig.GetInt("defaultNumPacketMovesPerUnit", VPacket.DefaultMovesPerUnit);

            _tickThread = new Thread(() => {
                _cont    = true;
                int wait = (int)(Wait * _waitMultiplier);
                int tick = 0;
                while (_cont)
                {
                    Util.Wait(wait, _cont && wait > 0, this);
                    DateTime start = DateTime.Now;
                    if (_cont && OnTick != null)
                    {
                        OnTick();
                    }
                    wait = (int)((Wait * _waitMultiplier) - DateTime.Now.Subtract(start).TotalMilliseconds);
                    tick++;
                }
            });
            _tickThread.Name = "View Tick Thread";
            _tickThread.Start();

            Logger.Info("View started.");
        }
 public AdvancedControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, hostID, config)
 {
     IConfig controlConfig = config.Configs["Control"];
     if (controlConfig == null)
         controlConfig = config.Configs[0];
     _defaultTopologyName = controlConfig.Get("DefaultTopologyName", "Topology");
     _defaultRecordingName = controlConfig.Get("DefaultSequenceName", "Sequence");
 }
        public SequenceControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            IConfig controlConfig = config.Configs[CONTROL_CONFIG];
            if (controlConfig == null)
                controlConfig = config.Configs[0];

            Init(controlConfig, HostPrim.Owner, this, Factory);
        }
        public IndividualState(Module.Control control, IKeyTableFactory tableFactory)
        {
            _control = control;

            _state = new Dictionary<string, string>();
            _selectedEntities = new Dictionary<string, IControlEntity>();
            _toggles = tableFactory.MakeKeyTable<Dictionary<string, Toggle>>();
            _stateButtons = tableFactory.MakeKeyTable<List<IButton>>();
        }
        public IndividualState(Module.Control control, IKeyTableFactory tableFactory)
        {
            _control = control;

            _state            = new Dictionary <string, string>();
            _selectedEntities = new Dictionary <string, IControlEntity>();
            _toggles          = tableFactory.MakeKeyTable <Dictionary <string, Toggle> >();
            _stateButtons     = tableFactory.MakeKeyTable <List <IButton> >();
        }
Esempio n. 13
0
 public AutosaveHUD(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, config)
 {
     _autosaveFile = Path.Combine(Topology.GetUserFolder(Factory.Owner), AUTOSAVE_NAME);
     if (File.Exists(_autosaveFile))
     {
         Topology.LoadTopology(Factory.Owner, Factory.Host.Owner, _autosaveFile);
     }
 }
Esempio n. 14
0
 public LinkState(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource config)
 {
     _tableFactory = tableFactory;
     _config       = config;
     //_dijkstraQ = queueFactory.MakeQueue();
     _dijkstraQ = queueFactory.SharedQueue;
     _eventQ    = queueFactory.MakeQueue();
     //_dijkstraQ.Start("Link State dijkstra queue");
     _eventQ.Start("Link State packet queue");
     _eventQ.UseStack     = true;
     Model.OnWaitChanged += (oldWait, wait, paused) => _eventQ.Paused = paused;
 }
Esempio n. 15
0
 public LinkState(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource config)
 {
     _tableFactory = tableFactory;
     _config = config;
     //_dijkstraQ = queueFactory.MakeQueue();
     _dijkstraQ = queueFactory.SharedQueue;
     _eventQ = queueFactory.MakeQueue();
     //_dijkstraQ.Start("Link State dijkstra queue");
     _eventQ.Start("Link State packet queue");
     _eventQ.UseStack = true;
     Model.OnWaitChanged += (oldWait, wait, paused) => _eventQ.Paused = paused;
 }
Esempio n. 16
0
        public AdvancedControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, hostID, config)
        {
            IConfig controlConfig = config.Configs["Control"];

            if (controlConfig == null)
            {
                controlConfig = config.Configs[0];
            }
            _defaultTopologyName  = controlConfig.Get("DefaultTopologyName", "Topology");
            _defaultRecordingName = controlConfig.Get("DefaultSequenceName", "Sequence");
        }
Esempio n. 17
0
        public CreateSequenceControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            IConfig controlConfig = config.Configs["Control"];

            string god             = controlConfig.Get(GOD_KEY, GOD);
            string topology        = controlConfig.Get(TOPOLOGY_KEY, null);
            string sequenceDefault = controlConfig.Get(SEQUENCE_KEY, SEQUENCE);

            if (topology != null)
            {
                Topology.LoadTopology(god, Factory.Host.Owner, topology);
            }

            _listener = (name, id, text, channel) => {
                string[] args = text.Split(' ');
                if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE"))
                {
                    if (args.Length > 1)
                    {
                        HostPrim.Say("Saving sequence as " + args[1]);
                        if (topology != null)
                        {
                            Record.SaveRecording(god, args[1], topology);
                        }
                        else
                        {
                            Record.SaveRecording(god, args[1]);
                        }
                    }
                    else
                    {
                        HostPrim.Say("Showing Dialog");
                        SaveDialog save = new SaveDialog(HostPrim, primFactory, "Sequence", sequenceDefault, user => Record.GetUserFolder(god));
                        save.OnSave += (user, userID, file) => {
                            if (topology == null)
                            {
                                Record.SaveRecording(god, file);
                            }
                            else
                            {
                                Record.SaveRecording(god, file, topology);
                            }
                        };
                        save.Show(name, id);
                    }
                }
            };

            primFactory.OnChat += _listener;

            Record.StartRecording();
        }
Esempio n. 18
0
        public SequenceControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            IConfig controlConfig = config.Configs[CONTROL_CONFIG];

            if (controlConfig == null)
            {
                controlConfig = config.Configs[0];
            }

            Init(controlConfig, HostPrim.Owner, this, Factory);
        }
Esempio n. 19
0
        protected AbstractAlgorithmNode(IMNodeInternal node, IKeyTableFactory tableFactory, IConfigSource config)
        {
            AlgCollectionExtension._tableFactory = tableFactory;
            Logger     = LogManager.GetLogger(GetType());
            _node      = node;
            _table     = tableFactory.MakeKeyTable <IMLink>();
            _distances = tableFactory.MakeKeyTable <float>();
            this.RegisterAlgNode();

            Node.OnWeightChange += (link, weight) => WeightChanged(Links[link], IsCurrentAlgorithm && Links[link].Parameters.Get <bool>("Visualise"));
            Node.OnLinkAdded    += (n, link, parameters) => LinkAdded(link, parameters, IsCurrentAlgorithm && parameters.Get <bool>("Visualise"));
            Node.OnLinkRemoved  += (n, link, parameters) => LinkRemoved(link, parameters, IsCurrentAlgorithm && parameters.Get <bool>("Visualise"));
        }
Esempio n. 20
0
        public Control(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory)
        {
            ControlConfig = config.Configs[CONTROL_CONFIG];
            IConfig commonConfig = config.Configs["Common"];

            if (ControlConfig == null)
            {
                ControlConfig = config.Configs[0];
            }
            if (commonConfig == null)
            {
                commonConfig = config.Configs[0];
            }

            _toggleGlow           = ControlConfig.GetDouble("ToggleGlow", .15);
            _fade                 = ControlConfig.GetDouble("Fade", .8);
            _defaultRecordingName = ControlConfig.Get("DefaultSequenceName", "Sequence");
            _defaultTopologyName  = ControlConfig.Get("DefaultTopologyName", "Topology");
            _multiNumber          = ControlConfig.GetInt("MultiSendNumber", 10);
            _multiSendDelay       = ControlConfig.GetInt("MultiSendDelay", 750);
            _wait                 = commonConfig.GetInt("Wait", 50);

            _factory = primFactory;

            _record      = MakeRecord(ControlConfig, tableFactory, queueFactory, primFactory);
            _topology    = MakeTopology(ControlConfig);
            _permissions = MakePermissions(tableFactory, config);
            _state       = MakeState(tableFactory, config);
            _model       = Record.Make <IModel>(model, false);

            string tableName  = ControlConfig.Get(TABLE_KEY, null);
            int    tableCount = ControlConfig.GetInt(TABLE_COUNT, 1);

            _tables = new List <RoutingTable>();
            if (tableName != null && tableCount > 1)
            {
                for (int i = 1; i <= tableCount; i++)
                {
                    _tables.Add(new RoutingTable(Factory.MakeButton(tableName + i, Permissions), this, Factory));
                }
            }
            else if (tableName != null)
            {
                _tables.Add(new RoutingTable(Factory.MakeButton(tableName, Permissions), this, Factory));
            }
            _tables.Add(new RoutingTable(Factory.MakeButton(ControlConfig.Get(TABLE_HUD_KEY, "TableDisplayHUD"), Permissions), this, Factory));

            Logger.Info("Control started.");
        }
Esempio n. 21
0
        public DijkstraNode(IMNodeInternal node, IKeyTableFactory tableFactory, IAsynchQueue queue, IConfigSource config)
            : base(node, tableFactory, config)
        {
            _queue     = queue;
            _distances = tableFactory.MakeKeyTable <float>();
            _wipRoute  = tableFactory.MakeKeyTable <IMLink>();
            _prev      = tableFactory.MakeKeyTable <DijkstraNode>();

            _confirmed = new LinkedList <DijkstraNode>();
            _tentative = new LinkedList <DijkstraNode>();
            _links     = new LinkedList <IMLink>();

            SetDistanceFromRoot(ID, 0f, null, null);
        }
Esempio n. 22
0
        public MNode(INode node, ForwardDelegate forwardMethod, String defaultAlgorithm, IAlgorithm[] algorithms, IKeyTableFactory tableFactory)
            : base(node)
        {
            _passDownMethod = forwardMethod;
            _tableFactory   = tableFactory;
            _links          = tableFactory.MakeKeyTable <IMLink>();
            _neighbours     = tableFactory.MakeKeyTable <IMNodeInternal>();
            _algorithms     = new Dictionary <string, IAlgorithmNode>();

            foreach (IAlgorithm alg in algorithms)
            {
                IAlgorithmNode algNode = alg.MakeNode(this, SendPacket);
                _algorithms.Add(alg.Name, algNode);
                algNode.OnRouteChange     += RouteChangeListener;
                algNode.IsCurrentAlgorithm = alg.Name.Equals(defaultAlgorithm);
                if (algNode.IsCurrentAlgorithm)
                {
                    _currentAlgorithm = algNode;
                }
            }
            if (_currentAlgorithm == null)
            {
                throw new Exception("Test Node unable to set algorithm. '" + defaultAlgorithm + "' is not a valid algorithm.");
            }
            _currentAlgorithmName = defaultAlgorithm;

            _passDownMethod = forwardMethod;

            OnPacketReceived += (at, p) => {
                IMPacket packet = p as IMPacket;
                if (packet != null && packet.Type == PTypes.data)
                {
                    ReceiveData(packet);
                }
                else if (packet != null && _algorithms.ContainsKey(packet.Algorithm))
                {
                    _algorithms[packet.Algorithm].ProcessPacket(packet);
                }
            };
            _weightDelegate = (id, newWeight) => {
                if (OnWeightChange != null)
                {
                    OnWeightChange(id, newWeight);
                    Logger.Debug(Name + " triggered OnWeightChange for '" + Links[id].Name + "'.");
                }
            };
            _highlightDelegate = () => ResetHighlightAll();
            OnHighlightReset  += _highlightDelegate;
        }
Esempio n. 23
0
        protected AbstractModule(IKeyTableFactory keyTableFactory, IAsynchQueueFactory queueFactory)
        {
            TableFactory = keyTableFactory;
            Logger       = LogManager.GetLogger(GetType());

            _nodes = keyTableFactory.MakeKeyTable <TNode>();
            _links = keyTableFactory.MakeKeyTable <TLink>();

            _neighbours  = keyTableFactory.MakeKeyTable <IKeyTable <TNode> >();
            _connections = keyTableFactory.MakeKeyTable <IKeyTable <TLink> >();

            //_queue = queueFactory.MakeQueue();
            //Queue.Start(GetType().Name + " module queue");
            _queue = queueFactory.SharedQueue;
        }
Esempio n. 24
0
        public OriginalControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config)
            : base(tableFactory, queueFactory)
        {
            _hostPrim = primFactory[hostID];

            _readerMap = new Dictionary <string, UUID>();
            _writerMap = tableFactory.MakeKeyTable <string>();
            _paused    = tableFactory.MakeKeyTable <bool>();

            IConfig controlConfig = config.Configs["Control"];
            IConfig commonConfig  = config.Configs["Common"];

            if (controlConfig == null)
            {
                controlConfig = config.Configs[0];
            }
            if (commonConfig == null)
            {
                commonConfig = config.Configs[0];
            }

            _wait             = commonConfig.GetInt("Wait", 50);
            _userFolder       = controlConfig.Get("UserFolder", ".");
            _recordingEnabled = controlConfig.GetBoolean("RecordingEnabled", false);
            _timing           = controlConfig.GetBoolean("TimedPlayback", true);
            _schemaFile       = controlConfig.GetString("TopologySchema", null);

            _reader = new OpenSimLogReader(_readerMap, model, HostPrim.Pos);
            _reader.MapInstance <IModule>(this);
            _writers = tableFactory.MakeKeyTable <IXmlLogWriter>();

            _factory = primFactory;
            if (_recordingEnabled)
            {
                _modelWriter = new OpenSimLogWriter <IModel>(_writerMap, model, HostPrim.Pos, true, false);
                _model       = _modelWriter.Instance;
                IXmlLogWriter <IModule> baseWriter = new OpenSimLogWriter <IModule>(_writerMap, this, HostPrim.Pos, true);
                _recordingBase = baseWriter.Instance;
                _writers.Add(hostID, baseWriter);
            }
            else
            {
                _model = model;
            }

            Namespace = controlConfig.Get("Namespace", Namespace);
            Logger.Info("Control started.");
        }
Esempio n. 25
0
        public DV(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource configSource)
        {
            _queue = queueFactory.MakeQueue();
            _tableFactory = tableFactory;
            _config = configSource;
            IConfig config = configSource.Configs["Algorithms"];
            if (config == null)
                config = configSource.Configs["DV"];
            if (config == null)
                config = configSource.Configs[0];

            _queue.Start("Distance Vector work Queue");
            _queue.UseStack = true;
            TTL = config.GetInt("TTL", 200);
            Model.OnWaitChanged += (oldWait, wait, paused) => _queue.Paused = paused;
        }
Esempio n. 26
0
        public Dijkstra(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource config)
        {
            _tableFactory = tableFactory;
            //_queue = queueFactory.MakeQueue();
            //_queue.Start("Dijkstra Queue");
            _queue = queueFactory.SharedQueue;
            _config = config;
            Model.OnWaitChanged += (oldWait, newWait, paused) => {
                if (DijkstraNode.VisualisedNode != null && oldWait == newWait && !paused)
                    Util.Wake(DijkstraNode.VisualisedNode);
            };

            IConfig dijkstraConfig = config.Configs["Dijkstra"];
            AlwaysPrint = dijkstraConfig != null && dijkstraConfig.GetBoolean("AlwaysPrint", false);
            EverPrint = dijkstraConfig != null && dijkstraConfig.GetBoolean("EverPrint", false);
        }
Esempio n. 27
0
        public Model(IView view, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource config, params IAlgorithm[] algorithms)
            : base(tableFactory, queueFactory)
        {
            if (algorithms.Length == 0)
            {
                view.Stop();
                throw new Exception("Unable to start model layer, default algorithm " + _currentAlgorithm +
                                    " is not a valid algorithm");
            }

            _knownNodes = tableFactory.MakeKeyTable <IMNodeInternal>();
            _view       = view;
            _algorithms = algorithms;

            IConfig commonConfig = config.Configs["Common"];
            IConfig modelConfig  = config.Configs["Model"];

            if (modelConfig == null)
            {
                modelConfig = config.Configs[0];
            }
            if (commonConfig == null)
            {
                commonConfig = config.Configs[0];
            }

            _wait             = commonConfig.GetInt("Wait", 50);
            _waitMult         = modelConfig.GetInt("WaitMult", 5);
            _currentAlgorithm = modelConfig.GetString("Algorithm", algorithms.First().Name);

            if (_algorithms.Count(alg => alg.Name.Equals(_currentAlgorithm)) == 0)
            {
                _currentAlgorithm = algorithms.First().Name;
                Logger.Debug("Specified Current Algorithm ('" + modelConfig.GetString("Algorithm") + "') invalid. Using '" + _currentAlgorithm + "'.");
            }
            if (!modelConfig.Contains("Algorithm"))
            {
                Logger.Debug("Current Algorithm not specified. Using '" + _currentAlgorithm + "'.");
            }

            Logger.Info("Model started with " + algorithms.Length + " algorithms.");
            foreach (IAlgorithm alg in algorithms)
            {
                Logger.Info(alg.Name + (alg.Name.Equals(_currentAlgorithm) ? " (default)" :""));
            }
        }
Esempio n. 28
0
        public TopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            IConfig control = config.Configs[CONTROL_CONFIG];

            if (control == null)
            {
                control = config.Configs[0];
            }

            _reposition = !control.GetBoolean("RotateWithHost", true) && control.GetBoolean("Reposition", true);
            _hostPos    = HostPrim.Pos;
            _hostRot    = HostPrim.Rotation;

            string topology = control.GetString(TOPOLOGY_KEY);
            string godName  = control.GetString(GOD_KEY, GOD);

            if (topology == null)
            {
                HostPrim.Say("Unable to start topology control. No topology file specified.");
                throw new Exception("Unable to start topology control. No topology file specified.");
            }
            Topology.LoadTopology(godName, HostPrim.Owner, topology);
            HostPrim.Say("Started Topology Control.");

            Factory.AddLinkSetRoot(Factory.Host.ID);
            IButton PauseButton = MakeButton("Pause");
            IButton StepButton  = MakeButton("Step");
            IToggle PauseToggle = new Toggle(PauseButton, 1, ToggleGlow);

            foreach (var pause in PauseToggle.Prims)
            {
                pause.Colour = Color.White;
            }

            PauseToggle.OnToggled += (source, args) => {
                Record.Paused = PauseToggle.IsOn;
                foreach (var prim in PauseToggle.Prims)
                {
                    prim.Glow   = PauseToggle.IsOn ? .1d : 0d;
                    prim.Colour = Color.White;
                }
            };
            StepButton.OnTouched += (source, args) => Model.Step();
        }
Esempio n. 29
0
        public Dijkstra(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource config)
        {
            _tableFactory = tableFactory;
            //_queue = queueFactory.MakeQueue();
            //_queue.Start("Dijkstra Queue");
            _queue               = queueFactory.SharedQueue;
            _config              = config;
            Model.OnWaitChanged += (oldWait, newWait, paused) => {
                if (DijkstraNode.VisualisedNode != null && oldWait == newWait && !paused)
                {
                    Util.Wake(DijkstraNode.VisualisedNode);
                }
            };

            IConfig dijkstraConfig = config.Configs["Dijkstra"];

            AlwaysPrint = dijkstraConfig != null && dijkstraConfig.GetBoolean("AlwaysPrint", false);
            EverPrint   = dijkstraConfig != null && dijkstraConfig.GetBoolean("EverPrint", false);
        }
Esempio n. 30
0
        public DV(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IConfigSource configSource)
        {
            _queue        = queueFactory.MakeQueue();
            _tableFactory = tableFactory;
            _config       = configSource;
            IConfig config = configSource.Configs["Algorithms"];

            if (config == null)
            {
                config = configSource.Configs["DV"];
            }
            if (config == null)
            {
                config = configSource.Configs[0];
            }

            _queue.Start("Distance Vector work Queue");
            _queue.UseStack      = true;
            TTL                  = config.GetInt("TTL", 200);
            Model.OnWaitChanged += (oldWait, wait, paused) => _queue.Paused = paused;
        }
        public CreateSequenceControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            IConfig controlConfig = config.Configs["Control"];

            string god = controlConfig.Get(GOD_KEY, GOD);
            string topology = controlConfig.Get(TOPOLOGY_KEY, null);
            string sequenceDefault = controlConfig.Get(SEQUENCE_KEY, SEQUENCE);

            if (topology != null)
                Topology.LoadTopology(god, Factory.Host.Owner, topology);

            _listener = (name, id, text, channel) => {
                string[] args = text.Split(' ');
                if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE")) {
                    if (args.Length > 1) {
                        HostPrim.Say("Saving sequence as " + args[1]);
                        if (topology != null)
                            Record.SaveRecording(god, args[1], topology);
                        else
                            Record.SaveRecording(god, args[1]);
                    } else {
                        HostPrim.Say("Showing Dialog");
                        SaveDialog save = new SaveDialog(HostPrim, primFactory, "Sequence", sequenceDefault, user => Record.GetUserFolder(god));
                        save.OnSave += (user, userID, file) => {
                            if (topology == null)
                                Record.SaveRecording(god, file);
                            else
                                Record.SaveRecording(god, file, topology);
                        };
                        save.Show(name, id);
                    }
                }
            };

            primFactory.OnChat += _listener;

            Record.StartRecording();
        }
        public TopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            IConfig control = config.Configs[CONTROL_CONFIG];
            if (control == null)
                control = config.Configs[0];

            _reposition = !control.GetBoolean("RotateWithHost", true) && control.GetBoolean("Reposition", true);
            _hostPos = HostPrim.Pos;
            _hostRot = HostPrim.Rotation;

            string topology = control.GetString(TOPOLOGY_KEY);
            string godName = control.GetString(GOD_KEY, GOD);

            if (topology == null) {
                HostPrim.Say("Unable to start topology control. No topology file specified.");
                throw new Exception("Unable to start topology control. No topology file specified.");
            }
            Topology.LoadTopology(godName, HostPrim.Owner, topology);
            HostPrim.Say("Started Topology Control.");

            Factory.AddLinkSetRoot(Factory.Host.ID);
            IButton PauseButton = MakeButton("Pause");
            IButton StepButton = MakeButton("Step");
            IToggle PauseToggle = new Toggle(PauseButton, 1, ToggleGlow);

            foreach (var pause in PauseToggle.Prims)
                pause.Colour = Color.White;

            PauseToggle.OnToggled += (source, args) => {
                Record.Paused = PauseToggle.IsOn;
                foreach (var prim in PauseToggle.Prims) {
                    prim.Glow = PauseToggle.IsOn ? .1d : 0d;
                    prim.Colour = Color.White;
                }
            };
            StepButton.OnTouched += (source, args) => Model.Step();
        }
Esempio n. 33
0
 protected virtual ISequenceManager MakeRecord(IConfig config, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory)
 {
     return(new SequenceManager(this, this, config, primFactory, tableFactory, Queue));
 }
Esempio n. 34
0
 protected virtual IState MakeState(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return(new SharedState(this));
 }
Esempio n. 35
0
 protected virtual IPermissions MakePermissions(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return(new FreePermissions());
 }
 public SandboxControlLink(ILink link, INode from, INode to, SandboxControl control, IKeyTableFactory tableFactory, IPrimFactory primFactory, IPermissions permissions)
     : base(link, from, to, control, permissions)
 {
     _control                  = control;
     _bufferedChanges          = tableFactory.MakeKeyTable <double>();
     _dialog                   = new Dialog(control.HostPrim, primFactory, LINK_BUTTONS);
     _dialog.ResponseReceived += DialogPressed;
 }
Esempio n. 37
0
        public MNode(INode node, ForwardDelegate forwardMethod, String defaultAlgorithm, IAlgorithm[]algorithms, IKeyTableFactory tableFactory)
            : base(node)
        {
            _passDownMethod = forwardMethod;
            _tableFactory = tableFactory;
            _links = tableFactory.MakeKeyTable<IMLink>();
            _neighbours = tableFactory.MakeKeyTable<IMNodeInternal>();
            _algorithms = new Dictionary<string, IAlgorithmNode>();

            foreach (IAlgorithm alg in algorithms) {
                IAlgorithmNode algNode = alg.MakeNode(this, SendPacket);
                _algorithms.Add(alg.Name, algNode);
                algNode.OnRouteChange += RouteChangeListener;
                algNode.IsCurrentAlgorithm = alg.Name.Equals(defaultAlgorithm);
                if (algNode.IsCurrentAlgorithm)
                    _currentAlgorithm = algNode;
            }
            if (_currentAlgorithm == null)
                throw new Exception("Test Node unable to set algorithm. '" + defaultAlgorithm + "' is not a valid algorithm.");
            _currentAlgorithmName = defaultAlgorithm;

            _passDownMethod = forwardMethod;

            OnPacketReceived += (at, p) => {
                IMPacket packet = p as IMPacket;
                if (packet != null && packet.Type == PTypes.data)
                    ReceiveData(packet);
                else if (packet != null && _algorithms.ContainsKey(packet.Algorithm))
                    _algorithms[packet.Algorithm].ProcessPacket(packet);
            };
            _weightDelegate = (id, newWeight) => {
                if (OnWeightChange != null) {
                    OnWeightChange(id, newWeight);
                    Logger.Debug(Name + " triggered OnWeightChange for '" + Links[id].Name + "'.");
                }
            };
            _highlightDelegate = () => ResetHighlightAll();
            OnHighlightReset += _highlightDelegate;
        }
 protected override IPermissions MakePermissions(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return new LockedPermissions(Factory, config, HostPrim, this);
 }
Esempio n. 39
0
        public DijkstraNode(IMNodeInternal node, IKeyTableFactory tableFactory, IAsynchQueue queue, IConfigSource config)
            : base(node, tableFactory, config)
        {
            _queue = queue;
            _distances = tableFactory.MakeKeyTable<float>();
            _wipRoute = tableFactory.MakeKeyTable<IMLink>();
            _prev = tableFactory.MakeKeyTable<DijkstraNode>();

            _confirmed = new LinkedList<DijkstraNode>();
            _tentative = new LinkedList<DijkstraNode>();
            _links = new LinkedList<IMLink>();

            SetDistanceFromRoot(ID, 0f, null, null);
        }
 public SequenceManager(IModule control, IControlUtil controlUtil, IConfig controlConfig, IPrimFactory primFactory, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory)
     : this(control, controlUtil, controlConfig, primFactory, tableFactory, queueFactory.MakeQueue())
 {
 }
        public SequenceManager(IModule control, IControlUtil controlUtil, IConfig controlConfig, IPrimFactory factory, IKeyTableFactory tableFactory, IAsynchQueue queue)
            : base(controlConfig)
        {
            _queue       = queue;
            _controlUtil = controlUtil;
            _hostPrim    = controlUtil.HostPrim;

            _readerMap        = new Dictionary <string, UUID>();
            _writerMap        = tableFactory.MakeKeyTable <string>();
            _recordingEnabled = controlConfig.GetBoolean("RecordingEnabled", false);
            _sequenceFolder   = controlConfig.Get(FOLDER_KEY, ".");
            _timing           = controlConfig.GetBoolean("TimedPlayback", true);

            _reader = new OpenSimLogReader(_readerMap, control, _hostPrim.Pos);
            _reader.MapInstance <IModule>(control);
            _writers = tableFactory.MakeKeyTable <IXmlLogWriter>();

            _control = Make <IModule>(new RecordControl(control), true);
        }
Esempio n. 42
0
 public HudControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, hostID, config)
 {
 }
Esempio n. 43
0
        internal DVNode(IMNodeInternal node, ForwardDelegate forwardMethod, IAsynchQueue queue, IKeyTableFactory tableFactory, int TTL, IConfigSource config)
            : base(node, tableFactory, config)
        {
            _queue         = queue;
            _forwardMethod = forwardMethod;
            this.TTL       = TTL;

            distanceVector = new DistanceVector();

            neighbourVectors    = tableFactory.MakeKeyTable <DistanceVector>();
            highlightParameters = new Parameters(new object[] { "HColour", node.Colour });

            IConfig dvConfig = config.Configs["DV"];

            if (dvConfig == null)
            {
                dvConfig = config.Configs["DistanceVector"];
            }
            if (dvConfig == null)
            {
                dvConfig = config.Configs["Algorithm"];
            }
            if (dvConfig == null)
            {
                dvConfig = config.Configs[0];
            }

            _poison            = dvConfig.GetBoolean("PoisonReverse", true);
            _everPrint         = dvConfig.GetBoolean("EverPrint", false);
            _alwaysPrint       = dvConfig.GetBoolean("AlwaysPrint", false);
            highlightPrintText = dvConfig.GetBoolean("HighlightPrint", false);
        }
 public IndividualControl(IHost host, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, hostID, config)
 {
     _owner = host.Object.OwnerId;
 }
 protected override IState MakeState(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return new CreateTopologyState(this);
 }
        public SandboxControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
            : base(tableFactory, queueFactory, primFactory, model, config)
        {
            _tableFactory = tableFactory;

            //IsOn

            int chatChannel = ControlConfig.GetInt("PublicInputChannel", 46);
            if (chatChannel < 0)
                chatChannel = 46;
            Dialog.SetChatChannel(chatChannel);

            //Misc
            _reposition = ControlConfig.GetBoolean("RepositionControls", false);
            float scale = ControlConfig.GetFloat("DefaultScale", .5f);

            if (ControlConfig.GetBoolean("AutoRecord", false))
                Record.StartRecording();

            InitControls();
        }
 public LockedWallSandbox(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, config)
 {
     _lockWait = config.Configs[CONTROL_CONFIG] != null ? config.Configs[CONTROL_CONFIG].GetInt("ControlsLockTimeout", 300000) : 300000;
 }
 protected override MRM.Controls.IPermissions MakePermissions(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return new GodPermissions(HostPrim.Owner);
 }
 protected override IState MakeState(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return new SharedState(this);
 }
Esempio n. 50
0
        public MRMPrimFactory(IHost host, IWorld world, IAsynchQueueFactory queueFactory, IKeyTableFactory tableFactory, IConfigSource config, UUID hostID)
        {
            IConfig mrmConfig = config.Configs["MRM"];

            if (mrmConfig == null)
            {
                mrmConfig = config.Configs[0];
            }

            _world = world;
            _host  = host;

            _logger        = LogManager.GetLogger(typeof(MRMPrimFactory));
            _prims         = new MapKeyTable <IPrim>();
            _createdPrims  = new List <UUID>();
            _freeObjects   = new Dictionary <UUID, IObject>();
            _chatListeners = new Dictionary <int, List <ChatDelegate> >();

            //_factoryQ = queueFactory.MakeQueue();
            _factoryQ = queueFactory.SharedQueue;

            CheckWait = mrmConfig.GetInt("CheckWait", CheckWait);
            _recycle  = mrmConfig.GetBoolean("Recycle", true);

            try {
                _hostPrim = new MRMPrim(hostID, this);
            } catch (Exception e) {
                _hostPrim = null;
                throw new Exception("Problem getting Host Prim: " + e.Message + "\n" + e.StackTrace);
            }

            _chatListener += (sender, args) => {
                _world = sender;
                if (_chatListeners.ContainsKey(args.Channel))
                {
                    lock (_chatListeners)
                        foreach (var listener in _chatListeners[args.Channel])
                        {
                            listener(args.Sender.Name, args.Sender.GlobalID, args.Text, args.Channel);
                        }
                }
                if (OnChat != null)
                {
                    OnChat(args.Sender.Name, args.Sender.GlobalID, args.Text, args.Channel);
                }
            };
            _world.OnChat += _chatListener;

            _checkThread      = new Thread(CheckThread);
            _checkThread.Name = "MRMPrimFactory Check Thread";
            _checkThread.Start();



            _linkButtons = new Dictionary <uint, TouchButton>();
            _chatButtons = new Dictionary <UUID, TouchButton>();

            _knowButtons = new Dictionary <string, HashSet <UUID> >();
            _pingChannel = mrmConfig.GetInt("PingChannel", -50);
            _ping        = mrmConfig.Get("ButtonPing", "Ping");
            _pingAck     = mrmConfig.Get("ButtonPingAck", "Pong");
            _chanAck     = mrmConfig.Get("ButtonChannelAck", "ACK");
            InitTouchButtons();
        }
 protected override IState MakeState(IKeyTableFactory tableFactory, IConfigSource config)
 {
     return(new CreateTopologyState(this));
 }
 public FullHudControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config)
     : base(tableFactory, queueFactory, primFactory, model, config)
 {
 }