예제 #1
0
 void Instance_ClassReferenceCaleRuleChanged(object sender, EventArgs e)
 {
     if (VariableChanged != null)
     {
         VariableChanged.Invoke(this, new EventArgs());
     }
 }
 void Instance_StudentReferenceGranduationPlanChanged(object sender, EventArgs e)
 {
     if (VariableChanged != null)
     {
         VariableChanged.Invoke(this, new EventArgs());
     }
 }
예제 #3
0
        public static void RemoveVariableByValueString(string valueString)
        {
            var variable = GetVariableByValueString(valueString);

            VariableCollection.Remove(variable);
            VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Remove, variable));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="propertyName"></param>
        /// <param name="propertyValue"></param>
        private void NewResponseVariableChangedReceived(string variableName, string variableValue)
        {
            VariableModel variable = VariableHelper.Variables[variableName];

            VariableHelper.SetVariableValue(variable, variableValue);

            VariableChanged?.Invoke(this, variable);
        }
예제 #5
0
        public static void ReplactVarialbe(IVariableValue oldvar, IVariableValue newvar)
        {
            var node = VariableCollection.Find(oldvar);

            if (node != null)
            {
                VariableCollection.AddAfter(node, newvar);
                VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Add, newvar));
                VariableCollection.Remove(node);
                VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Remove, node.Value));
            }
        }
예제 #6
0
 public static void RemoveVariable(string name)
 {
     try
     {
         var variable = GetVariableByName(name);
         VariableCollection.Remove(variable);
         VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Remove, variable));
     }
     catch
     {
     }
 }
예제 #7
0
        public bool AddOrUpdate(IVariableWrapper variable, string oldName = null)
        {
            if (!IsInitialized())
            {
                return(false);
            }

            if (string.IsNullOrEmpty(variable.Name))
            {
                ErrorMessage = EmptyNameMessage;
                return(false);
            }

            var nameIsChanged = !Common.IsSameName(oldName, variable.Name);
            IVariableWrapper selector;

            if (!string.IsNullOrEmpty(oldName))
            {
                // Изменилось имя переменной
                if (nameIsChanged && IsExists(variable.Name))
                {
                    // Переименовали существующую переменную
                    ErrorMessage = VariableExistsMessage(variable.Name);
                    return(false);
                }
                selector = Find(oldName);
            }
            else
            {
                selector = Find(variable.Name);
            }

            if (selector == null)
            {
                Variables.Add(variable);
            }
            else
            {
                selector.Update(variable);
                VariableChanged?.Invoke(variable, oldName);
                UpdateTags(variable);
            }

            return(true);
        }
        public LifxLocalClient()
        {
            ReceivedPacket += async(sender, message) =>
            {
                var bulbId = message.Address.Target.MacAddressToString();
                var isNew  = false;
                var bulb   = _bulbs.AddOrUpdate(
                    bulbId,
                    _ =>
                {
                    isNew = true;
                    return(new LifxLocalLight
                    {
                        Id = bulbId,
                        Mac = message.Address.Target
                    });
                },
                    (_, b) => b);

                bulb.Endpoint = new IPEndPoint(message.IpAddress, 56700);

                if (isNew)
                {
                    await SendAsync(bulb, new LifxMessageGetColor());

                    DeviceDiscovered?.Invoke(this, bulb);
                }

                var lifxMessageState = message as LifxMessageState;

                if (lifxMessageState != null)
                {
                    bulb.Name  = lifxMessageState.Label;
                    bulb.IsOn  = lifxMessageState.IsPower;
                    bulb.Color = lifxMessageState.Color;

                    VariableChanged?.Invoke(bulb, Tuple.Create(bulb, "Color", (object)bulb.Color.ToRgb().ToString()));
                    VariableChanged?.Invoke(bulb, Tuple.Create(bulb, "Brightness", (object)Math.Round(bulb.Color.Brightness, 2)));
                    VariableChanged?.Invoke(bulb, Tuple.Create(bulb, "Kelvin", (object)(double)bulb.Color.Kelvin));
                    VariableChanged?.Invoke(bulb, Tuple.Create(bulb, "Name", (object)bulb.Name));
                    VariableChanged?.Invoke(bulb, Tuple.Create(bulb, "IsOn", (object)bulb.IsOn));
                }
            };
        }
        internal void Initialize(string intersectionId)
        {
            // Check unicity
            var ids = new List <List <TLCObjectBase> >
            {
                new List <TLCObjectBase>(InternalSignalGroups),
                new List <TLCObjectBase>(InternalDetectors),
                new List <TLCObjectBase>(InternalInputs),
                new List <TLCObjectBase>(InternalOutputs),
                new List <TLCObjectBase>(InternalVariables)
            };

            if (InternalIntersections.Count == 0)
            {
                throw new TLCFISessionException("No intersections are present in the collected data; cannot initialize StateManager.", true);
            }
            foreach (var l in ids)
            {
                foreach (var item1 in l)
                {
                    if (l.Any(item2 => item1 != item2 && item1.Id == item2.Id))
                    {
                        throw new DuplicateNameException($"Found duplicate IDs: type {item1.ObjectType}, id {item1.Id}. " +
                                                         "All Ids in TLC config must be unique per type.");
                    }
                }
            }

            // Build complete list
            if (Facilities != null)
            {
                _staticObjects.Add("_f_" + Facilities.Id, Facilities);
            }
            if (SpvhGenerator != null)
            {
                _staticObjects.Add("_sp_" + SpvhGenerator.Id, SpvhGenerator);
            }
            foreach (var sg in InternalSignalGroups)
            {
                sg.ChangedState += (o, e) =>
                {
                    if (RequestedStates.TryGetValue("sg" + sg.Id, out ulong ticks))
                    {
                        // note: wrapping around uint.MaxValue goes by itself in C#
                        _requestedStatesTimings.Enqueue((int)(TicksGenerator.Default.GetCurrentTicks() - ticks));
                        if (_requestedStatesTimings.Count > 50)
                        {
                            _requestedStatesTimings.Dequeue();
                        }
                        AvgResponseToRequestsTime = _requestedStatesTimings.Sum() / (double)_requestedStatesTimings.Count;
                        RequestedStates.Remove("sg" + sg.Id);
                    }
                    SignalGroupStateChanged?.Invoke(this, sg);
                };
                sg.ChangedPredictions += (o, e) =>
                {
                    if (RequestedStates.TryGetValue("pr" + sg.Id, out ulong ticks))
                    {
                        // note: wrapping around uint.MaxValue goes by itself in C#
                        _requestedStatesTimings.Enqueue((int)(TicksGenerator.Default.GetCurrentTicks() - ticks));
                        if (_requestedStatesTimings.Count > 50)
                        {
                            _requestedStatesTimings.Dequeue();
                        }
                        AvgResponseToRequestsTime = _requestedStatesTimings.Sum() / (double)_requestedStatesTimings.Count;
                        RequestedStates.Remove("pr" + sg.Id);
                    }
                    SignalGroupPredictionsChanged?.Invoke(this, sg);
                };
                _staticObjects.Add("_sg_" + sg.Id, sg);
            }
            foreach (var d in InternalDetectors)
            {
                d.ChangedState += (o, e) => { DetectorStateChanged?.Invoke(this, d); };
                _staticObjects.Add("_d_" + d.Id, d);
            }
            foreach (var i in InternalInputs)
            {
                i.ChangedState += (o, e) => { InputStateChanged?.Invoke(this, i); };
                _staticObjects.Add("_i_" + i.Id, i);
            }
            foreach (var o in InternalOutputs)
            {
                o.ChangedState += (o2, e) =>
                {
                    if (RequestedStates.TryGetValue("os" + o.Id, out ulong ticks))
                    {
                        // note: wrapping around uint.MaxValue goes by itself in C#
                        _requestedStatesTimings.Enqueue((int)(TicksGenerator.Default.GetCurrentTicks() - ticks));
                        if (_requestedStatesTimings.Count > 50)
                        {
                            _requestedStatesTimings.Dequeue();
                        }
                        AvgResponseToRequestsTime = _requestedStatesTimings.Sum() / (double)_requestedStatesTimings.Count;
                        RequestedStates.Remove("os" + o.Id);
                    }
                    OutputStateChanged?.Invoke(this, o);
                };
                _staticObjects.Add("_o_" + o.Id, o);

                // Set exclusive: if an output belongs to an intersection, it is exclusive
                if (InternalIntersections.SelectMany(x => x.Outputs).Any(x => x == o.Id))
                {
                    o.Exclusive = true;
                }
            }
            foreach (var v in InternalVariables)
            {
                v.ChangedState += (o, e) => { VariableChanged?.Invoke(this, v); };
                v.ChangedState += (o2, e) =>
                {
                    if (RequestedStates.TryGetValue("va" + v.Id, out ulong ticks))
                    {
                        // note: wrapping around uint.MaxValue goes by itself in C#
                        _requestedStatesTimings.Enqueue((int)(TicksGenerator.Default.GetCurrentTicks() - ticks));
                        if (_requestedStatesTimings.Count > 50)
                        {
                            _requestedStatesTimings.Dequeue();
                        }
                        AvgResponseToRequestsTime = _requestedStatesTimings.Sum() / (double)_requestedStatesTimings.Count;
                        RequestedStates.Remove("va" + v.Id);
                    }
                    VariableChanged?.Invoke(this, v);
                };
                _staticObjects.Add("_v_" + v.Id, v);
            }
            foreach (var i in InternalIntersections)
            {
                _staticObjects.Add("_int_" + i.Id, i);
                i.ChangedState += (o, e) => { IntersectionStateChanged?.Invoke(this, i); };
                if (i.Id == intersectionId)
                {
                    Intersection = i;
                }
            }

            // Initialize properties
            StaticObjects  = new ReadOnlyDictionary <string, object>(_staticObjects);
            DynamicObjects = new Dictionary <string, object>();
            Intersections  = new ReadOnlyCollection <Intersection>(InternalIntersections);
            SignalGroups   = new ReadOnlyCollection <SignalGroup>(InternalSignalGroups);
            Detectors      = new ReadOnlyCollection <Detector>(InternalDetectors);
            Inputs         = new ReadOnlyCollection <Input>(InternalInputs);
            Outputs        = new ReadOnlyCollection <Output>(InternalOutputs);
            Variables      = new ReadOnlyCollection <Variable>(InternalVariables);

            _logger.Info("Initializing data from remote TLC completed. TLC has:");
            _logger.Info("  - {0} intersections", InternalIntersections.Count);
            _logger.Info("  - {0} signalgroups", InternalSignalGroups.Count);
            _logger.Info("  - {0} detectors", InternalDetectors.Count);
            _logger.Info("  - {0} outputs", InternalOutputs.Count);
            _logger.Info("  - {0} inputs", InternalInputs.Count);
            _logger.Info("  - {0} variables", InternalVariables.Count);
            _logger.Info("  - {0} spvehiclegens", SpvhGenerator == null ? 0 : 1);
            foreach (var i in InternalIntersections)
            {
                _logger.Info("  Intersection {0} has:", i.Id);
                _logger.Info("    - {0} signalgroups", i.Signalgroups.Length);
                _logger.Info("    - {0} detectors", i.Detectors.Length);
                _logger.Info("    - {0} outputs", i.Outputs.Length);
                _logger.Info("    - {0} inputs", i.Inputs.Length);
                _logger.Info("    - {0} spvehiclegens", i.Spvehgenerator == null ? 0 : 1);
            }
        }
 /// <summary>
 /// Can be overidden. Simply raises the VariableChanged event.
 /// </summary>
 protected virtual void OnVariableChanged()
 {
     VariableChanged?.Invoke(this, new VariableChangedEventArgs(this));
 }
예제 #11
0
 /// <summary> Invokes the event VariableChanged. </summary>
 /// <param name="variableName"> A variable's name. </param>
 /// <param name="value"> A new value. </param>
 public static void OnVariableChanged(string variableName, object @value)
 {
     VariableChanged?.Invoke(variableName, @value);
 }
예제 #12
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(VariableChanged obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
예제 #13
0
 public static void Clear()
 {
     VariableCollection.Clear();
     VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Clear, null));
 }
예제 #14
0
 public static void RemoveVariable(IVariableValue variable)
 {
     VariableCollection.Remove(variable);
     VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Remove, variable));
 }
예제 #15
0
 public static void AddVariable(IVariableValue variable)
 {
     VariableCollection.AddLast(variable);
     VariableChanged.Invoke(new VariableChangedEventArgs(ValueChangedType.Add, variable));
 }