private REInvokeStatus InvokeGetFieldsCommand(Task task, List <OSCValue> inputValues, ref List <OSCValue> outputValues) { if (inputValues.Count != 6) { return(REInvokeStatus.Cancel); } if (inputValues[0].Type != OSCValueType.Int || inputValues[1].Type != OSCValueType.Int || inputValues[2].Type != OSCValueType.String || inputValues[3].Type != OSCValueType.Int || inputValues[4].Type != OSCValueType.Int || inputValues[5].Type != OSCValueType.String) { return(REInvokeStatus.Cancel); } var index = inputValues[0].IntValue; var count = inputValues[1].IntValue; var fieldName = inputValues[2].StringValue; var valueType = (OSCValueType)inputValues[3].IntValue; var fieldType = (REFieldType)inputValues[4].IntValue; var typeName = inputValues[5].StringValue; var remoteComponent = GetItem(task.ParentId) as REComponent; if (remoteComponent == null) { return(REInvokeStatus.Cancel); } var remoteField = new REField(); remoteField.Parent = remoteComponent; remoteField.FieldName = fieldName; remoteField.FieldType = fieldType; remoteField.TypeName = typeName; remoteComponent.Fields.Add(remoteField); task.Process(index); index++; if (index >= count) { return(REInvokeStatus.Cancel); } outputValues.Add(OSCValue.Int(index)); return(REInvokeStatus.Complete); }
private void SendValue(REField remoteField, List <OSCValue> values) { var remoteComponent = remoteField.Parent; if (remoteComponent == null) { return; } var parentId = remoteComponent.InstanceId; var fieldIndex = remoteComponent.Fields.IndexOf(remoteField); RemoteClient.SetValue(parentId, fieldIndex, values, null); }
private void RefreshRemoteFields(REComponent remoteComponent) { // CLEAR remoteComponent.Fields.Clear(); // POPULATE var componentType = remoteComponent.Target.GetType(); var fieldsInfos = componentType.GetFields(BindingFlags.Instance | BindingFlags.Public); foreach (var fieldInfo in fieldsInfos) { if (!OSCSerializer.HasPacker(fieldInfo.FieldType)) { continue; } var remoteField = new REField(fieldInfo); remoteField.FieldType = REFieldType.Field; remoteField.TypeName = fieldInfo.FieldType.Name; remoteField.FieldName = fieldInfo.Name; remoteField.Parent = remoteComponent; remoteComponent.Fields.Add(remoteField); } var propertiesInfos = componentType.GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (var propertyInfo in propertiesInfos) { if (!propertyInfo.CanRead || !propertyInfo.CanWrite) { continue; } if (!OSCSerializer.HasPacker(propertyInfo.PropertyType)) { continue; } var remoteField = new REField(propertyInfo); remoteField.FieldType = REFieldType.Property; remoteField.TypeName = propertyInfo.PropertyType.Name; remoteField.FieldName = propertyInfo.Name; remoteField.Parent = remoteComponent; remoteComponent.Fields.Add(remoteField); } }