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)); } }
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)); } }