Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
            }
        }