示例#1
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));
            }
        }
示例#2
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));
            }
        }