Ejemplo n.º 1
0
        private void ReprocessUnknownSubOptions()
        {
            var unknownSubOptions = SubOptions
                                    .Where(x => x.Code == (byte)0)
                                    .Select(x => x as DHCPVSIUnknown)
                                    .ToList();

            foreach (var unknownSubOption in unknownSubOptions)
            {
                Type subOptionType;
                if (VSISuboptionTypes.TryGetValue(unknownSubOption.ParsedCode, out subOptionType))
                {
                    var newSubOption = (DHCPVendorSpecificInformation)Activator
                                       .CreateInstance(
                        subOptionType,
                        new object[] {
                        unknownSubOption.Data
                    }
                        );

                    SubOptions.Add(newSubOption);
                    SubOptions.Remove(unknownSubOption);
                }
            }
        }
Ejemplo n.º 2
0
        public HomeController(IOptions <MyOptions> optionAccessor, IOptions <SubOptions> subOptionAccessor, IOptionsSnapshot <SubOptions> nameOptionsAccess)
        {
            options    = optionAccessor.Value;
            subOptions = subOptionAccessor.Value;

            subOption1 = nameOptionsAccess.Get("sub1");
            subOption2 = nameOptionsAccess.Get("sub2");
        }
Ejemplo n.º 3
0
 internal override void WriteData(byte[] buffer, ref int offset)
 {
     buffer.Write(offset + Offset.FlowIdentifier, FlowIdentifier, Endianity.Big);
     buffer.Write(offset + Offset.Priority, Priority, Endianity.Big);
     buffer.Write(offset + Offset.Status, (byte)Status);
     SubOptions.Write(buffer, offset + Offset.SubOptions);
     offset += DataLength;
 }
Ejemplo n.º 4
0
 public HomeController(IOptions <MyOptions> optionAccessor, IOptions <SubOptions> subOptionAccessor, IOptionsSnapshot <SubOptions> optionsSnapshot)
 {
     options    = optionAccessor.Value;
     subOptions = subOptionAccessor.Value;
     //通过name读取对应的选项
     subOptions1 = optionsSnapshot.Get("sub1");
     subOptions2 = optionsSnapshot.Get("sub2");
 }
Ejemplo n.º 5
0
 public override async Task OnActivate()
 {
     if (configuration.Variable.HasValue)
     {
         var variable = configuration.Variable.Value;
         await Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), variable);
     }
 }
Ejemplo n.º 6
0
        public override async Task <ReqResult> OnUiRequestAsync(string command, DataValue parameters)
        {
            switch (command)
            {
            case "ReadModuleVariables":

                if (activeModuleID != "")
                {
                    await Connection.DisableChangeEvents();
                }

                var    pars     = parameters.Object <ReadModuleVariables_Params>();
                string moduleID = string.IsNullOrEmpty(pars.ModuleID) ? modules[0].ID : pars.ModuleID;

                ObjectInfo rootObjInfo = await Connection.GetRootObject(moduleID);

                ObjectRef rootObj = rootObjInfo.ID;

                ObjectInfo[] objects = await Connection.GetAllObjects(moduleID);

                SetObjectNameMap(objects);

                VariableValue[] values = await Connection.ReadAllVariablesOfObjectTree(rootObj);

                await Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), rootObj);

                VarEntry[] entries = values.Select(MapVarValue).ToArray();

                activeModuleID = moduleID;

                var result = new ReadModuleVariables_Result()
                {
                    Modules    = modules,
                    ModuleID   = moduleID,
                    ModuleName = modules.FirstOrDefault(m => m.ID == moduleID).Name,
                    Variables  = entries
                };

                mapIdx.Clear();
                for (int n = 0; n < values.Length; ++n)
                {
                    mapIdx[values[n].Variable] = n;
                }

                return(ReqResult.OK(result));

            case "WriteVariable":

                var write = parameters.Object <WriteVariable_Params>();
                VTQ vtq   = new VTQ(Timestamp.Now, Quality.Good, DataValue.FromJSON(write.V));
                await Connection.WriteVariable(ObjectRef.FromEncodedString(write.ObjID), write.Var, vtq);

                return(ReqResult.OK());

            default:
                return(ReqResult.Bad("Unknown command: " + command));
            }
        }
Ejemplo n.º 7
0
        public override Task OnActivate()
        {
            Variables = configuration.Items.Select(it => it.Variable).ToArray();

            Task ignored1 = Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), Variables);
            Task ignored2 = Connection.EnableVariableHistoryChangedEvents(Variables);

            return(Task.FromResult(true));
        }
Ejemplo n.º 8
0
 public IndexModel(IOptions <MyOptions> optionsAccessor
                   , IOptions <MyDelegateConfigOptions> delegateConfigOptionsAccessor
                   , IOptions <SubOptions> subOptionsAccessor
                   , IOptionsSnapshot <MyOptions> namedOptionsAccessor
                   , IOptionsSnapshot <MyOptions> snapshotOptionsAccessor
                   )
 {
     options               = optionsAccessor.Value;
     subOptions            = subOptionsAccessor.Value;
     delegateConfigOptions = delegateConfigOptionsAccessor.Value;
     snapshotoptions       = snapshotOptionsAccessor.Value;
     namedOptions1         = namedOptionsAccessor.Get("named_options_1");
     namedOptions2         = namedOptionsAccessor.Get("named_options_2");
     options.Option1       = "value_from_json_and modify by PageModel";
 }
Ejemplo n.º 9
0
        public DHCPOptionVendorSpecificInformation(int optionLength, byte[] buffer, long offset)
        {
            var index = 0;

            while (index < optionLength)
            {
                var code = buffer[index + offset];
                index++;
                var length = Convert.ToInt32(buffer[index + offset]);
                index++;

                var optionBuffer = new byte[length];
                Array.Copy(buffer, index + offset, optionBuffer, 0, length);
                index += length;

                var subOption = ParseSubOption(code, optionBuffer);
                SubOptions.Add(subOption);
            }
        }
Ejemplo n.º 10
0
        public override async Task Serialize(Stream stream)
        {
            var serializedSubOptions = SubOptions.Select(x => x.Serialize()).ToList();
            var totalLength          = serializedSubOptions.Select(x => x.Length).Sum();

            var buffer = new byte[2 + totalLength];

            buffer[0] = Convert.ToByte(DHCPOptionType.VIVendorSpecificInformation);
            buffer[1] = Convert.ToByte(totalLength);

            int index = 2;

            foreach (var subOptionBuffer in serializedSubOptions)
            {
                Array.Copy(subOptionBuffer, 0, buffer, index, subOptionBuffer.Length);
                index += subOptionBuffer.Length;
            }

            await stream.WriteAsync(buffer, 0, buffer.Length);
        }
Ejemplo n.º 11
0
        public async Task <ReqResult> UiReq_SaveItems(VarItem[] items)
        {
            VariableRef[] newVariables = items.Select(it => it.Variable).ToArray();
            bool          reloadData   = !Arrays.Equals(newVariables, Variables);

            Variables = newVariables;

            configuration.Items = items;

            await Context.SaveWidgetConfiguration(configuration);

            if (reloadData)
            {
                Task ignored  = Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), Variables);
                Task ignored2 = Connection.EnableVariableHistoryChangedEvents(Variables);
            }

            var values = await LoadData(updateTrend : reloadData);

            return(ReqResult.OK(values));
        }
Ejemplo n.º 12
0
        public override async Task <ReqResult> OnUiRequestAsync(string command, DataValue parameters)
        {
            switch (command)
            {
            case "ReadModuleVariables":

                if (activeModuleID != "")
                {
                    await Connection.DisableChangeEvents();
                }

                var    pars     = parameters.Object <ReadModuleVariables_Params>() ?? throw new Exception("ReadModuleVariables_Params is null");
                string moduleID = string.IsNullOrEmpty(pars.ModuleID) ? modules[0].ID : pars.ModuleID;

                ObjectInfo?rootObjInfo;
                while (true)
                {
                    rootObjInfo = await Connection.GetRootObject(moduleID);

                    if (rootObjInfo != null)
                    {
                        break;
                    }
                    await Task.Delay(500);
                }

                ObjectRef rootObj = rootObjInfo.ID;

                var objects = await Connection.GetAllObjects(moduleID);

                SetObjectNameMap(objects);

                List <VariableValue> values = await Connection.ReadAllVariablesOfObjectTree(rootObj);

                await Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), rootObj);

                VarEntry[] entries = values.Select(MapVarValue).ToArray();

                activeModuleID = moduleID;

                var locations = await Connection.GetLocations();

                var result = new ReadModuleVariables_Result()
                {
                    Modules    = modules,
                    ModuleID   = moduleID,
                    ModuleName = modules.FirstOrDefault(m => m.ID == moduleID).Name,
                    Variables  = entries,
                    Locations  = locations.ToArray(),
                };

                mapIdx.Clear();
                for (int n = 0; n < values.Count; ++n)
                {
                    mapIdx[values[n].Variable] = n;
                }

                return(ReqResult.OK(result));

            case "WriteVariable": {
                var write = parameters.Object <WriteVariable_Params>() ?? throw new Exception("WriteVariable_Params is null");
                VTQ vtq   = new VTQ(Timestamp.Now, Quality.Good, DataValue.FromJSON(write.V));
                await Connection.WriteVariable(ObjectRef.FromEncodedString(write.ObjID), write.Var, vtq);

                return(ReqResult.OK());
            }

            case "SyncRead": {
                var         sread  = parameters.Object <ReadSync_Params>() ?? throw new Exception("ReadSync_Params is null");
                ObjectRef   obj    = ObjectRef.FromEncodedString(sread.ObjID);
                VariableRef varRef = VariableRef.Make(obj, sread.Var);
                VTQ         vtq    = await Connection.ReadVariableSync(varRef);

                int idx   = mapIdx[varRef];
                var entry = new ChangeEntry()
                {
                    N = idx,
                    V = vtq.V,
                    T = Timestamp2Str(vtq.T),
                    Q = vtq.Q
                };
                return(ReqResult.OK(entry));
            }

            default:
                return(ReqResult.Bad("Unknown command: " + command));
            }
        }
Ejemplo n.º 13
0
 public override string ToString()
 {
     return("Vendor specific options :" + string.Join(",", SubOptions.Select(x => "{" + x.ToString() + "}").ToList()));
 }
Ejemplo n.º 14
0
 private bool EqualsData(IpV6MobilityOptionFlowIdentification other)
 {
     return(other != null &&
            FlowIdentifier == other.FlowIdentifier && Priority == other.Priority && Status == other.Status && SubOptions.Equals(other.SubOptions));
 }
Ejemplo n.º 15
0
 public void AddAction(MenuOption menuOption)
 {
     SubOptions.Add(menuOption);
 }
Ejemplo n.º 16
0
        public override async Task <ReqResult> OnUiRequestAsync(string command, DataValue parameters)
        {
            bool   hasModuleID = !(configuration == null || string.IsNullOrEmpty(configuration.ModuleID));
            string moduleID    = hasModuleID ? configuration !.ModuleID : "IO";

            switch (command)
            {
            case "GetModel": {
                objects = await Connection.GetAllObjects(moduleID);

                mapVariables.Clear();
                ObjectInfo           root      = objects.FirstOrDefault(o => !o.Parent.HasValue);
                List <VariableValue> variables = await Connection.ReadAllVariablesOfObjectTree(root.ID);

                await Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), root.ID);

                foreach (VariableValue vv in variables)
                {
                    mapVariables[vv.Variable] = vv.Value;
                }

                TreeNode node = TransformModel(objects);

                MetaInfos types = await Connection.GetMetaInfos(moduleID);

                objTypes.Clear();
                foreach (ClassInfo ci in types.Classes)
                {
                    objTypes[ci.FullName] = ci;
                }
                enumTypes.Clear();
                foreach (EnumInfo en in types.Enums)
                {
                    enumTypes[en.FullName] = en;
                }
                structTypes.Clear();
                foreach (StructInfo sn in types.Structs)
                {
                    structTypes[sn.FullName] = sn;
                }

                JObject typMap = new JObject();
                foreach (ClassInfo ci in types.Classes)
                {
                    var members = ci.ObjectMember
                                  .Where(m => m.Dimension == Dimension.Array)
                                  .Select(m => new {
                            Array = m.Name,
                            Type  = m.ClassName
                        }).ToArray();

                    var entry = new {
                        ObjectMembers = members
                    };

                    typMap[ci.FullName] = new JRaw(StdJson.ObjectToString(entry));
                }

                var locations = await Connection.GetLocations();

                hasLocations = locations.Count > 0;
                rootLocation = hasLocations ? LocationRef.FromLocationID(locations[0].ID) : (LocationRef?)null;

                return(ReqResult.OK(new {
                        ObjectTree = node,
                        TypeInfo = typMap,
                        Locations = locations,
                    }));
            }

            case "GetObject": {
                GetObjectParams pars   = parameters.Object <GetObjectParams>() ?? throw new Exception("GetObjectParams is null");
                var             values = await GetObjectMembers(pars.ID, pars.Type);

                ClassInfo info       = objTypes[pars.Type];
                var       childTypes = info.ObjectMember
                                       .GroupBy(om => om.ClassName)
                                       .Select(g => new ChildType()
                    {
                        TypeName = g.Key,
                        Members  = g.Select(x => x.Name).ToArray()
                    }).ToList();

                var res = new {
                    ObjectValues = values,
                    ChildTypes   = childTypes
                };
                return(ReqResult.OK(res));
            }

            case "Save": {
                SaveParams saveParams = parameters.Object <SaveParams>() ?? throw new Exception("SaveParams is null");

                foreach (var m in saveParams.Members)
                {
                    Console.WriteLine(m.Name + " => " + m.Value);
                }
                ObjectRef     obj = ObjectRef.FromEncodedString(saveParams.ID);
                MemberValue[] mw  = saveParams.Members.Select(m => MemberValue.Make(obj, m.Name, DataValue.FromJSON(m.Value))).ToArray();

                await Connection.UpdateConfig(mw);

                objects = await Connection.GetAllObjects(moduleID);

                TreeNode node = TransformModel(objects);

                var values = await GetObjectMembers(saveParams.ID, saveParams.Type);

                return(ReqResult.OK(new {
                        ObjectValues = values,
                        ObjectTree = node
                    }));
            }

            case "Delete": {
                ObjectRef obj = ObjectRef.FromEncodedString(parameters.GetString() ?? "");
                await Connection.UpdateConfig(ObjectValue.Make(obj, DataValue.Empty));

                objects = await Connection.GetAllObjects(moduleID);

                TreeNode node = TransformModel(objects);
                return(ReqResult.OK(node));
            }

            case "AddObject": {
                AddObjectParams addParams = parameters.Object <AddObjectParams>() ?? throw new Exception("AddObjectParams is null");
                ObjectRef       objParent = ObjectRef.FromEncodedString(addParams.ParentObjID);
                DataValue       dataValue = DataValue.FromObject(new {
                        ID   = addParams.NewObjID,
                        Name = addParams.NewObjName
                    });
                var element = AddArrayElement.Make(objParent, addParams.ParentMember, dataValue);
                await Connection.UpdateConfig(element);

                objects = await Connection.GetAllObjects(moduleID);

                List <VariableValue> newVarVals = await Connection.ReadAllVariablesOfObjectTree(ObjectRef.Make(objParent.ModuleID, addParams.NewObjID));

                foreach (VariableValue vv in newVarVals)
                {
                    mapVariables[vv.Variable] = vv.Value;
                }

                TreeNode node = TransformModel(objects);
                return(ReqResult.OK(new {
                        ObjectID = ObjectRef.Make(moduleID, addParams.NewObjID),
                        Tree = node
                    }));
            }

            case "DragDrop": {
                DragDropParams dropParams = parameters.Object <DragDropParams>() ?? throw new Exception("DragDropParams is null");

                ObjectRef   obj      = ObjectRef.FromEncodedString(dropParams.FromID);
                ObjectValue objValue = await Connection.GetObjectValueByID(obj);

                var deleteObj = ObjectValue.Make(obj, DataValue.Empty);

                ObjectRef objParent = ObjectRef.FromEncodedString(dropParams.ToID);

                var addElement = AddArrayElement.Make(objParent, dropParams.ToArray, objValue.Value);

                await Connection.UpdateConfig(new ObjectValue[] { deleteObj }, new MemberValue[0], new AddArrayElement[] { addElement });

                objects = await Connection.GetAllObjects(moduleID);

                TreeNode node = TransformModel(objects);
                return(ReqResult.OK(node));
            }

            case "WriteVariable": {
                var write = parameters.Object <WriteVariable_Params>() ?? throw new Exception("WriteVariable_Params is null");
                VTQ vtq   = new VTQ(Timestamp.Now, Quality.Good, DataValue.FromJSON(write.V));
                await Connection.WriteVariable(ObjectRef.FromEncodedString(write.ObjID), write.Var, vtq);

                return(ReqResult.OK());
            }

            case "MoveObject": {
                var  move = parameters.Object <MoveObject_Params>() ?? throw new Exception("MoveObject_Params is null");
                bool up   = move.Up;

                ObjectRef  obj     = ObjectRef.FromEncodedString(move.ObjID);
                ObjectInfo objInfo = await Connection.GetObjectByID(obj);

                MemberRefIdx?parentMember = objInfo.Parent;

                if (parentMember.HasValue)
                {
                    MemberValue value = await Connection.GetMemberValue(parentMember.Value.ToMemberRef());

                    DataValue v = value.Value;
                    if (v.IsArray)
                    {
                        JArray array = (JArray)StdJson.JTokenFromString(v.JSON);
                        int    index = parentMember.Value.Index;
                        if (up && index > 0)
                        {
                            JToken tmp = array[index - 1];
                            array[index - 1] = array[index];
                            array[index]     = tmp;

                            MemberValue mv = MemberValue.Make(parentMember.Value.ToMemberRef(), DataValue.FromObject(array));
                            await Connection.UpdateConfig(mv);
                        }
                        else if (!up && index < array.Count - 1)
                        {
                            JToken tmp = array[index + 1];
                            array[index + 1] = array[index];
                            array[index]     = tmp;

                            MemberValue mv = MemberValue.Make(parentMember.Value.ToMemberRef(), DataValue.FromObject(array));
                            await Connection.UpdateConfig(mv);
                        }
                    }
                }

                objects = await Connection.GetAllObjects(moduleID);

                TreeNode node = TransformModel(objects);
                return(ReqResult.OK(node));
            }

            case "Browse": {
                var browse = parameters.Object <Browse_Params>() ?? throw new Exception("Browse_Params is null");

                var          m   = MemberRef.Make(ObjectRef.FromEncodedString(browse.ObjID), browse.Member);
                BrowseResult res = await Connection.BrowseObjectMemberValues(m);

                return(ReqResult.OK(res.Values.Select(d => d.GetString())));
            }

            case "GetNewID": {
                string type = parameters.GetString() ?? throw new Exception("Type parameter is null");
                string id   = GetObjectID(type);
                return(ReqResult.OK(id));
            }

            default:
                return(ReqResult.Bad("Unknown command: " + command));
            }
        }
Ejemplo n.º 17
0
 private bool EqualsData(IpV6MobilityOptionAccessNetworkIdentifier other)
 {
     return(other != null &&
            SubOptions.Equals(other.SubOptions));
 }
Ejemplo n.º 18
0
        public override async Task <ReqResult> OnUiRequestAsync(string command, DataValue parameters)
        {
            bool hasModuleID = !string.IsNullOrEmpty(configuration.ModuleID);

            moduleID = hasModuleID ? configuration.ModuleID : "CALC";

            switch (command)
            {
            case "GetModel": {
                ObjectInfo root = await Connection.GetRootObject(moduleID);

                RootID = root.ID;

                await Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), root.ID);

                return(await GetModelResult());
            }

            case "Save": {
                SaveParams saveParams = parameters.Object <SaveParams>() ?? throw new Exception("SaveParams is null");
                string     objID      = saveParams.ID;
                IDictionary <string, JToken?> dict = saveParams.Obj;
                MemberValue[] members = dict
                                        .Where(kv => kv.Key != "ID")
                                        .Select(entry => MakeMemberValue(objID, entry))
                                        .ToArray();
                await Connection.UpdateConfig(members);

                return(await GetModelResult());
            }

            case "Delete": {
                ObjectRef obj = ObjectRef.Make(moduleID, parameters.GetString() ?? "");
                await Connection.UpdateConfig(ObjectValue.Make(obj, DataValue.Empty));

                return(await GetModelResult());
            }

            case "AddObject": {
                AddObjectParams addParams = parameters.Object <AddObjectParams>() ?? throw new Exception("AddObjectParams is null");
                ObjectRef       objParent = ObjectRef.Make(moduleID, addParams.ParentObjID);
                DataValue       dataValue = DataValue.FromObject(new {
                        ID   = addParams.NewObjID,
                        Name = addParams.NewObjName
                    });
                var element = AddArrayElement.Make(objParent, addParams.ParentMember, dataValue);
                await Connection.UpdateConfig(element);

                return(await GetModelResult());
            }

            case "MoveObject": {
                var  move = parameters.Object <MoveObject_Params>() ?? throw new Exception("MoveObject_Params is null");
                bool up   = move.Up;

                ObjectRef  obj     = ObjectRef.Make(moduleID, move.ObjID);
                ObjectInfo objInfo = await Connection.GetObjectByID(obj);

                MemberRefIdx?parentMember = objInfo.Parent;

                if (parentMember.HasValue)
                {
                    MemberValue value = await Connection.GetMemberValue(parentMember.Value.ToMemberRef());

                    DataValue v = value.Value;
                    if (v.IsArray)
                    {
                        JArray array = (JArray)StdJson.JTokenFromString(v.JSON);
                        int    index = parentMember.Value.Index;
                        if (up && index > 0)
                        {
                            JToken tmp = array[index - 1];
                            array[index - 1] = array[index];
                            array[index]     = tmp;

                            MemberValue mv = MemberValue.Make(parentMember.Value.ToMemberRef(), DataValue.FromObject(array));
                            await Connection.UpdateConfig(mv);
                        }
                        else if (!up && index < array.Count - 1)
                        {
                            JToken tmp = array[index + 1];
                            array[index + 1] = array[index];
                            array[index]     = tmp;

                            MemberValue mv = MemberValue.Make(parentMember.Value.ToMemberRef(), DataValue.FromObject(array));
                            await Connection.UpdateConfig(mv);
                        }
                    }
                }

                return(await GetModelResult());
            }

            case "ReadModuleObjects": {
                var pars = parameters.Object <ReadModuleObjectsParams>() ?? throw new Exception("ReadModuleObjectsParams is null");

                ObjectInfos objects;

                try {
                    objects = await Connection.GetAllObjects(pars.ModuleID);
                }
                catch (Exception) {
                    objects = new ObjectInfos();
                }

                Func <Variable, bool> isMatch = GetMatchPredicate(pars.ForType);

                return(ReqResult.OK(new {
                        Items = objects.Where(o => o.Variables.Any(isMatch)).Select(o => new {
                            Type = o.ClassName,
                            ID = o.ID.ToEncodedString(),
                            Name = o.Name,
                            Variables = o.Variables.Where(isMatch).Select(v => v.Name).ToArray()
                        }).ToArray()
                    }));
            }

            default:
                return(ReqResult.Bad("Unknown command: " + command));
            }
        }
Ejemplo n.º 19
0
 internal override int GetDataHashCode()
 {
     return(SubOptions.GetHashCode());
 }
Ejemplo n.º 20
0
 public override Task OnActivate() {
     return Connection.EnableVariableValueChangedEvents(SubOptions.AllUpdates(sendValueWithEvent: true), Var);
 }
Ejemplo n.º 21
0
 internal override void WriteData(byte[] buffer, ref int offset)
 {
     SubOptions.Write(buffer, offset);
     offset += DataLength;
 }