Exemple #1
0
        public void RegisterInstance <T>(T instance, RegisterMode mode = RegisterMode.Self, string name = "") where T : class
        {
            var builder = new ContainerBuilder();

            builder.RegisterInstance <T>(instance, mode, name);
            builder.Update(_container);
        }
Exemple #2
0
 public RegisterProperty(
     PropertyType propertyType,
     RegisterMode registerMode,
     string propertyName,
     string paramName,
     string type,
     string defaultValue,
     string description,
     Action <CodeWriter, string> appendPropertyAssigmentValidation,
     Action <CodeWriter, string[]> appendPropertyAssigmentFromBytes,
     Func <string[]> getByteIndexAsByteStrings,
     int byteIndex)
 {
     PropertyType = propertyType;
     RegisterMode = registerMode;
     PropertyName = propertyName;
     ParamName    = paramName;
     Type         = type;
     DefaultValue = defaultValue;
     Description  = description;
     AppendPropertyAssigmentValidation = appendPropertyAssigmentValidation;
     AppendPropertyAssigmentFromBytes  = appendPropertyAssigmentFromBytes;
     GetByteIndexAsByteStrings         = getByteIndexAsByteStrings;
     ByteIndex = byteIndex;
 }
Exemple #3
0
        public Registration(Type serviceType, RegistrationAttribute attr = null)
        {
            this.ServiceType = serviceType;

            if (attr != null)
            {
                this.Order        = attr.Order;
                this.Name         = attr.Name;
                this.LifeCycle    = attr.LifeCycle;
                this.RegisterMode = attr.RegisterMode;
            }
        }
Exemple #4
0
        private void SendBytes(int data, RegisterMode mode)
        {
            RegisterSelectPin.Write((GpioPinValue)mode);

            // In 4-bit mode, we'll write the high bits to data pins 4-7,
            // then toggle the enable pin, then write the low bits to 4-7
            ClearDataPins();

            WriteHighIfData(data, 0x10, DataBusPin4);
            WriteHighIfData(data, 0x20, DataBusPin5);
            WriteHighIfData(data, 0x40, DataBusPin6);
            WriteHighIfData(data, 0x80, DataBusPin7);

            ToggleEnablePin();

            ClearDataPins();

            WriteHighIfData(data, 0x01, DataBusPin4);
            WriteHighIfData(data, 0x02, DataBusPin5);
            WriteHighIfData(data, 0x04, DataBusPin6);
            WriteHighIfData(data, 0x08, DataBusPin7);

            ToggleEnablePin();
        }
Exemple #5
0
 public RegisterLoad() : base(null, null, null)
 {
     mode = RegisterMode.Singleton;
 }
Exemple #6
0
        public void RegisterType(Type type, LifeCycle lifeCycle = LifeCycle.Transient, RegisterMode mode = RegisterMode.Self, string name = "")
        {
            var builder = new ContainerBuilder();

            builder.RegisterType(type, mode, name).UseLifeCycle(lifeCycle);
            builder.Update(_container);
        }
Exemple #7
0
        private void GenerateEnum(
            CodeWriter code,
            RegisterMode registerMode,
            int registerLength,
            List <RegisterProperty> properties,
            XElement element,
            bool isFlags)
        {
            string name     = GetName(element);
            string enumName = name + "Enum";

            int byteIndex;
            var bitsRange = GetBitsRange(element, registerLength, null, out byteIndex);

            EnumValue[] enumValues = element.Elements("Value")
                                     .Select(GetEnumValue)
                                     .OrderBy(x => x.Value)
                                     .ToArray();

            switch (registerMode)
            {
            case RegisterMode.ReadWrite:
                if (enumValues.Count(x => x.IsDefault) != 1)
                {
                    throw new Exception("Exactly one default enum value expected: " + name);
                }
                break;

            case RegisterMode.ReadClear:
            case RegisterMode.ReadOnly:
                if (enumValues.Count(x => x.IsDefault) != 0)
                {
                    throw new Exception("No default enum value expected: " + name);
                }
                break;
            }

            GenerateDescription(code, GetDescription(element));

            //code.AppendLine(bitsRange.FromBits == bitsRange.ToBits
            //    ? $"[BitMask({bitsRange.FromBits})]"
            //    : $"[BitMask({bitsRange.FromBits}, {bitsRange.ToBits})]");

            string integerType = GetIntegerType(bitsRange);

            if (isFlags)
            {
                code.AppendLine("[Flags]");
            }

            code.AppendLine($"public enum {enumName} : {integerType}");
            code.AppendLine("{");
            code.Indent++; // Enum values

            bool isFirst = true;

            Iterate(enumValues, (enumValue, isLast) =>
            {
                if (isFirst)
                {
                    isFirst = false;
                }
                else if (!string.IsNullOrEmpty(enumValue.Description))
                {
                    code.AppendLine();
                }

                byte value = enumValue.Value;
                //byte value = (byte)(enumValue.Value << bitsRange.FromBits);

                GenerateDescription(code, enumValue.Description);
                code.AppendLine($"{enumValue.Name} = {ToHex(value, 2)}{(isLast ? string.Empty : ",")}");
            });

            code.Indent--; // Enum values
            code.AppendLine("}");
            code.AppendLine();

            string defaultValue;

            if (registerMode == RegisterMode.ReadWrite)
            {
                defaultValue = enumName + "." + enumValues.Single(x => x.IsDefault).Name;
            }
            else
            {
                defaultValue = null;
            }

            Action <CodeWriter, string[]> appendPropertyAssigmentFromBytes = (codeWriter, byteParameterNames) =>
            {
                var composedValue = GetComposedValue(bitsRange, registerLength, byteIndex, byteParameterNames);
                codeWriter.AppendLine($"{name} = ({enumName})Enum.ToObject(typeof({enumName}), {composedValue});");
            };

            Func <string[]> getByteIndexAsByteStrings = () =>
                                                        GetDecomposedValues(name, bitsRange, registerLength, byteIndex, false);

            properties.Add(new RegisterProperty(
                               PropertyType.Enum,
                               registerMode,
                               name,
                               GetLocalName(name),
                               enumName,
                               defaultValue,
                               GetDescription(element),
                               (codeWriter, paramName) => { },
                               appendPropertyAssigmentFromBytes,
                               getByteIndexAsByteStrings,
                               byteIndex));
        }
Exemple #8
0
        private void GenerateRegister(CodeWriter code, string prefix, XElement registerElement)
        {
            string       name      = GetName(registerElement);
            string       className = GetRegisterName(prefix, name);
            string       registerAddressEnumName = GetRegisterAddressEnumName(prefix);
            int          registerLength          = GetRegisterLength(registerElement);
            RegisterMode registerMode            = GetRegisterMode(registerElement);

            string baseClassName = GetRegisterName(prefix, string.Empty);

            var properties = new List <RegisterProperty>();

            // ------------------------------
            // Class declaration
            GenerateDescription(code, GetDescription(registerElement));
            code.AppendLine($"[Register((byte){registerAddressEnumName}.{name}, {registerLength})]");
            code.AppendLine($"public class {className} : {baseClassName}");
            code.AppendLine("{");
            code.Indent++; // Class

            // ------------------------------
            // Enum declarations
            foreach (XElement element in registerElement.Elements())
            {
                switch (element.Name.LocalName)
                {
                case "Enum":
                    GenerateEnum(code, registerMode, registerLength, properties, element, false);
                    break;

                case "Flags":
                    GenerateEnum(code, registerMode, registerLength, properties, element, true);
                    break;

                case "Number":
                    GenerateNumber(code, registerMode, registerLength, properties, element);
                    break;
                }
            }

            bool         oneByteRegister          = (properties.Count == 1) && (properties[0].Type == "byte");
            const string oneByteRegisterParamName = "value";



            // ------------------------------
            // Constructor taking bytes as parameters
            var byteParameterNames = new List <string>();

            if (registerLength == 1)
            {
                byteParameterNames.Add(oneByteRegister ? oneByteRegisterParamName : "registerValue");
            }
            else
            {
                for (int i = 0; i < registerLength; i++)
                {
                    byteParameterNames.Add($"registerValue{i + 1}");
                }
            }


            Action <CodeWriter> appendConstructorBody1 = codeWriter =>
            {
                foreach (RegisterProperty property in properties)
                {
                    property.AppendPropertyAssigmentValidation(codeWriter, oneByteRegister ? oneByteRegisterParamName : property.ParamName);
                }

                AppendVerboseComment(codeWriter, "Assigning properties.");
                foreach (RegisterProperty property in properties)
                {
                    codeWriter.AppendLine($"{property.PropertyName} = {(oneByteRegister ? oneByteRegisterParamName : property.ParamName)};");
                }
            };

            Action <CodeWriter> appendConstructorBody2 = codeWriter =>
            {
                foreach (RegisterProperty property in properties)
                {
                    property.AppendPropertyAssigmentFromBytes(codeWriter, byteParameterNames.ToArray());
                }
            };

            bool oneByteRegisterOneConstructorBody = false;

            if (oneByteRegister)
            {
                // Special case -- both constructor take just one byte as input.

                var cw1 = new CodeWriter(this, true);
                var cw2 = new CodeWriter(this, true);
                appendConstructorBody1(cw1);
                appendConstructorBody2(cw2);

                oneByteRegisterOneConstructorBody = cw1.GetAllCode() == cw2.GetAllCode();

                if (oneByteRegisterOneConstructorBody)
                {
                    // Both one-byte constructors have the exact same body.
                    // No need to separate them by type of call.

                    // ------------------------------
                    // Constructor taking the enums as parameters
                    code.AppendLine($"public {className}(byte {oneByteRegisterParamName})");
                    code.Indent++; // Constructor base
                    code.AppendLine($": base({registerAddressEnumName}.{name}, {registerLength})");
                    code.Indent--; // Constructor base
                    code.AppendLine("{");
                    code.Indent++; // Constructor body
                    appendConstructorBody1(code);
                    code.Indent--; // Constructor body
                    code.AppendLine("}");
                }
                else
                {
                    // ------------------------------
                    // Constructor taking the enums as parameters
                    code.AppendLine($"public {className}(byte {oneByteRegisterParamName}, bool isRegisterValue)");
                    code.Indent++; // Constructor base
                    code.AppendLine($": base({registerAddressEnumName}.{name}, {registerLength})");
                    code.Indent--; // Constructor base
                    code.AppendLine("{");
                    code.Indent++; // Constructor body

                    code.AppendLine("if (isRegisterValue)");
                    code.AppendLine("{");
                    code.Indent++;
                    appendConstructorBody2(code);
                    code.Indent--;
                    code.AppendLine("}");
                    code.AppendLine("else");
                    code.AppendLine("{");
                    code.Indent++;
                    appendConstructorBody1(code);
                    code.Indent--;
                    code.AppendLine("}");

                    code.Indent--; // Constructor body
                    code.AppendLine("}");
                }
            }
            else
            {
                // ------------------------------
                // Constructor taking the enums as parameters
                code.AppendLine($"public {className}(");
                code.Indent++; // Constructor parameters
                Iterate(properties, (prop, isLast) =>
                {
                    code.AppendLine($"{prop.Type} {prop.ParamName}{(isLast ? ")" : ",")}");
                });
                code.AppendLine($": base({registerAddressEnumName}.{name}, {registerLength})");
                code.Indent--; // Constructor parameters
                code.AppendLine("{");
                code.Indent++; // Constructor body

                appendConstructorBody1(code);
                //foreach (RegisterProperty property in properties)
                //{
                //    property.AppendPropertyAssigmentValidation();
                //}

                //AppendVerboseComment(code, "Assigning properties.");
                //foreach (RegisterProperty property in properties)
                //{
                //    code.AppendLine($"{property.PropertyName} = {property.ParamName};");
                //}

                code.Indent--; // Constructor body
                code.AppendLine("}");


                code.AppendLine();
                code.AppendLine($"public {className}({string.Join(", ", byteParameterNames.Select(x => "byte " + x))})");
                code.Indent++; // Constructor base call
                code.AppendLine($": base({registerAddressEnumName}.{name}, {registerLength})");
                code.Indent--; // Constructor base call
                code.AppendLine("{");
                code.Indent++; // Constructor body

                appendConstructorBody2(code);
                //foreach (RegisterProperty property in properties)
                //{
                //    property.AppendPropertyAssigmentFromBytes(byteParameterNames.ToArray());
                //}

                code.Indent--; // Constructor body
                code.AppendLine("}");
            }



            // ------------------------------
            // Constructor from byte-array
            List <string> createFromBytesArguments = byteParameterNames.Select((x, i) => $"registerValues[{i}]").ToList();

            if (oneByteRegister && !oneByteRegisterOneConstructorBody)
            {
                createFromBytesArguments.Add("true");
            }

            code.AppendLine();
            code.AppendLine($"internal {className}(byte[] registerValues)");
            code.Indent++; // Constrctor this-call
            code.AppendLine($": this({string.Join(", ", createFromBytesArguments)})");
            code.Indent--; // Constrctor this-call
            code.AppendLine("{");
            code.AppendLine("}");



            if (registerMode == RegisterMode.ReadWrite)
            {
                code.AppendLine();

                // ------------------------------
                // Default register value
                GenerateDescription(code, "Reset values.");

                List <string> defaultArguments = properties.Select(prop => prop.DefaultValue).ToList();
                if (oneByteRegister && !oneByteRegisterOneConstructorBody)
                {
                    defaultArguments.Add("false");
                }

                if (defaultArguments.Count == 1)
                {
                    code.AppendLine($"public static readonly {className} Default = new {className}({defaultArguments[0]});");
                }
                else
                {
                    code.AppendLine($"public static readonly {className} Default = new {className}(");
                    code.Indent++; // Constructor arguments
                    Iterate(defaultArguments, (defaultArgument, isLast) =>
                    {
                        code.AppendLine($"{defaultArgument}{(isLast ? ");" : ",")}");
                    });
                    code.Indent--; // Constructor arguments
                }
            }


            // ------------------------------
            // Property declarations
            foreach (RegisterProperty prop in properties)
            {
                code.AppendLine();
                GenerateDescription(code, prop.Description);
                code.AppendLine($"public {prop.Type} {prop.PropertyName} {{ get; }}");
            }


            // ------------------------------
            // Abstract method: GetAsBytes
            code.AppendLine();
            code.AppendLine("internal override byte[] GetAsBytes()");
            code.AppendLine("{");
            code.Indent++; // Method body

            string[][] getAsBytesMap = properties.Select(p => p.GetByteIndexAsByteStrings()).ToArray();

            var getAsBytesList = new List <string>();

            for (int i = 0; i < registerLength; i++)
            {
                //string[] getAsBytes = getAsBytesMap[i];
                string[] getAsBytes = getAsBytesMap.Select(x => x[i]).Where(x => !string.IsNullOrEmpty(x)).ToArray();

                //string[] getAsBytes = properties.Select(p => p.GetByteIndexAsByteString(i)).Where(x => !string.IsNullOrEmpty(x)).ToArray();
                string getByte;
                if (getAsBytes.Length == 0)
                {
                    getByte = "(byte)0";
                }
                else if (getAsBytes.Length == 1)
                {
                    getByte = getAsBytes[0];
                }
                else
                {
                    getByte = $"(byte)({string.Join(" | ", getAsBytes)})";
                }

                getAsBytesList.Add(getByte);
            }

            if (getAsBytesList.Count == 1)
            {
                code.AppendLine($"return new[] {{ {getAsBytesList[0]} }};");
            }
            else
            {
                code.AppendLine("return new[]");
                code.AppendLine("{");
                code.Indent++; // Array content
                Iterate(getAsBytesList, (codeLine, isLast) => code.AppendLine(codeLine + (isLast ? string.Empty : ",")));
                code.Indent--; // Array content
                code.AppendLine("};");
            }

            //code.AppendLine("throw new NotImplementedException();");
            code.Indent--; // Method body
            code.AppendLine("}");

            // ------------------------------
            code.Indent--; // Class
            code.AppendLine("}");
        }
 /// <summary>
 /// Creates an instance of the attribute
 /// </summary>
 /// <param name="mode">register call condition</param>
 public RegisterFunctionAttribute(RegisterMode mode)
 {
     Value = mode;
 }
Exemple #10
0
		[TestCase(0xCC, 0xFF, 0x00, RegisterMode.YRegister)] //CPY Absolute
		public void Absolute_Modes_Compare_Operation_Has_Correct_Result(byte operation, byte accumulatorValue, byte memoryValue, RegisterMode mode)
		{
			var processor = new Processor();

			byte loadOperation;

			switch (mode)
			{
				case RegisterMode.Accumulator:
					loadOperation = 0xA9;
					break;
				case RegisterMode.XRegister:
					loadOperation = 0xA2;
					break;
				default:
					loadOperation = 0xA0;
					break;
			}

			processor.LoadProgram(0, new byte[] { loadOperation, accumulatorValue, operation, 0x05, 0x00, memoryValue }, 0x00);
			processor.NextStep();
			processor.NextStep();

			Assert.That(processor.ZeroFlag, Is.EqualTo(false));
			Assert.That(processor.NegativeFlag, Is.EqualTo(true));
			Assert.That(processor.CarryFlag, Is.EqualTo(true));
		}
Exemple #11
0
		public void Transfer_Zero_Value_Set(byte operation, byte value, RegisterMode transferFrom, bool expectedResult)
		{
			var processor = new Processor();
			byte loadOperation;

			switch (transferFrom)
			{
				case RegisterMode.Accumulator:
					loadOperation = 0xA9;
					break;
				case RegisterMode.XRegister:
					loadOperation = 0xA2;
					break;
				default:
					loadOperation = 0xA0;
					break;
			}

			processor.LoadProgram(0, new[] { loadOperation, value, operation }, 0x00);
			processor.NextStep();
			processor.NextStep();

			Assert.That(processor.ZeroFlag, Is.EqualTo(expectedResult));
		}
Exemple #12
0
		public void Transfer_Correct_Value_Set(byte operation, RegisterMode transferFrom, RegisterMode transferTo)
		{
			var processor = new Processor();
			byte loadOperation;

			switch (transferFrom)
			{
				case RegisterMode.Accumulator:
					loadOperation = 0xA9;
					break;
				case RegisterMode.XRegister:
					loadOperation = 0xA2;
					break;
				default:
					loadOperation = 0xA0;
					break;
			}

			processor.LoadProgram(0, new[] { loadOperation, (byte)0x03, operation }, 0x00);
			processor.NextStep();
			processor.NextStep();


			switch (transferTo)
			{

				case RegisterMode.Accumulator:
					Assert.That(processor.Accumulator, Is.EqualTo(0x03));
					break;
				case RegisterMode.XRegister:
					Assert.That(processor.XRegister, Is.EqualTo(0x03));
					break;
				default:
					Assert.That(processor.YRegister, Is.EqualTo(0x03));
					break;
			}
		}
Exemple #13
0
        public static IRegistrationBuilder <T, SimpleActivatorData, SingleRegistrationStyle> RegisterInstance <T>(this ContainerBuilder builder, T instance, RegisterMode mode, string name) where T : class
        {
            var rb = builder.RegisterInstance <T>(instance);

            if ((RegisterMode.Self & mode) == RegisterMode.Self)
            {
                if (!string.IsNullOrEmpty(name))
                {
                    rb.Named(name, instance.GetType());
                }
                else
                {
                    rb.AsSelf();
                }
            }

            if ((RegisterMode.DefaultInterface & mode) == RegisterMode.DefaultInterface)
            {
                rb.AsImplementedInterfaces();
            }
            else if ((RegisterMode.Interface & mode) == RegisterMode.Interface)
            {
                rb.AsImplementedInterfaces().PreserveExistingDefaults();
            }

            return(rb);
        }
Exemple #14
0
        public static IRegistrationBuilder <object, ConcreteReflectionActivatorData, SingleRegistrationStyle> RegisterType(this ContainerBuilder builder, Type type, RegisterMode mode, string name)
        {
            var rb = builder.RegisterType(type);

            if ((RegisterMode.Self & mode) == RegisterMode.Self)
            {
                if (!string.IsNullOrEmpty(name))
                {
                    rb.Named(name, type);
                }
                else
                {
                    rb.AsSelf();
                }
            }

            if ((RegisterMode.DefaultInterface & mode) == RegisterMode.DefaultInterface)
            {
                rb.AsImplementedInterfaces();
            }
            else if ((RegisterMode.Interface & mode) == RegisterMode.Interface)
            {
                rb.AsImplementedInterfaces().PreserveExistingDefaults();
            }

            return(rb);
        }
Exemple #15
0
 public void RegisterType <T>(LifeCycle lifeCycle = LifeCycle.Transient, RegisterMode mode = RegisterMode.Self, string name = "")
 {
     this.RegisterType(typeof(T), lifeCycle, mode, name);
 }
Exemple #16
0
        private void SendBytes(int data, RegisterMode mode)
        {
            RegisterSelectPin.Write((GpioPinValue)mode);

            // In 4-bit mode, we'll write the high bits to data pins 4-7,
            // then toggle the enable pin, then write the low bits to 4-7
            ClearDataPins();

            WriteHighIfData(data, 0x10, DataBusPin4);
            WriteHighIfData(data, 0x20, DataBusPin5);
            WriteHighIfData(data, 0x40, DataBusPin6);
            WriteHighIfData(data, 0x80, DataBusPin7);

            ToggleEnablePin();

            ClearDataPins();

            WriteHighIfData(data, 0x01, DataBusPin4);
            WriteHighIfData(data, 0x02, DataBusPin5);
            WriteHighIfData(data, 0x04, DataBusPin6);
            WriteHighIfData(data, 0x08, DataBusPin7);

            ToggleEnablePin();
        }
Exemple #17
0
        //* Executa o iRPC na instância específicada.
#pragma warning disable IDE1006
        protected void iRPCHandler(byte rpcId, short viewId, byte instanceId, byte[] parameters, NeutronPlayer player, RegisterMode registerMode)
#pragma warning restore IDE1006
        {
            void Run((int, int, RegisterMode) key)                                                                 //* a key do objeto, o primeiro parâmetro é o ID do jogador ou do Objeto de Rede ou 0(se for objeto de cena), e o segundo é o ID do objeto, e o terceiro é o tipo de objeto.
            {
                if (MatchmakingHelper.Server.GetNetworkObject(key, This.LocalPlayer, out NeutronView neutronView)) //* Obtém a instância que enviou o RPC para a rede.
                {
                    if (neutronView.iRPCs.TryGetValue((rpcId, instanceId), out RPCInvoker remoteProceduralCall))   //* Obtém o RPC com o ID enviado para a rede.
                    {
                        try
                        {
                            //* Executa o RPC, observe que isto não usa reflexão, reflexão é lento irmão, eu uso delegados, e a reflexão para criar os delegados em runtime no Awake do objeto, bem rápido, e funciona no IL2CPP.
                            ReflectionHelper.iRPC(parameters, remoteProceduralCall, player);
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Stacktrace(ex);
                        }
                    }
                    else
                    {
                        LogHelper.Warn("Ignore this: iRpc with this Id not found.");
                    }
                }
Exemple #18
0
		[TestCase(0x8C, 0x03, RegisterMode.YRegister)] // STY Zero Page
		public void Absolute_Mode_Memory_Has_Correct_Result(byte operation, byte valueToLoad, RegisterMode mode)
		{
			var processor = new Processor();

			byte loadOperation;
			switch (mode)
			{
				case RegisterMode.Accumulator:
					loadOperation = 0xA9;
					break;
				case RegisterMode.XRegister:
					loadOperation = 0xA2;
					break;
				default:
					loadOperation = 0xA0;
					break;
			}

			processor.LoadProgram(0, new byte[] { loadOperation, valueToLoad, operation, 0x04 }, 0x00);
			processor.NextStep();
			processor.NextStep();

			Assert.That(processor.Memory.ReadValue(0x04), Is.EqualTo(valueToLoad));
		}
 /// <summary>
 /// Creates an instance of the attribute
 /// </summary>
 /// <param name="mode">register call condition</param>
 public RegisterFunctionAttribute(RegisterMode mode)
 {
     Value = mode;
 }
Exemple #20
0
#pragma warning disable IDE1006
        protected void iRPCHandler(NeutronPlayer owner, NeutronPlayer sender, short viewId, byte rpcId, byte instanceId, byte[] buffer, RegisterMode registerType, TargetTo targetTo, CacheMode cache, Protocol protocol)
#pragma warning restore IDE1006
        {
            void Run((int, int, RegisterMode) key)
            {
                bool Send()
                {
                    MatchmakingTo matchmakingTo = MatchmakingTo.Auto;

                    if (targetTo == TargetTo.Me)
                    {
                        matchmakingTo = MatchmakingTo.Me;
                    }
                    using (NeutronStream stream = Neutron.PooledNetworkStreams.Pull())
                    {
                        NeutronStream.IWriter writer = stream.Writer;
                        writer.WritePacket((byte)Packet.iRPC);
                        writer.WritePacket((byte)registerType);
                        writer.Write(viewId);
                        writer.Write(rpcId);
                        writer.Write(instanceId);
                        writer.WriteNext(buffer);
                        MatchmakingHelper.Internal.AddCache(rpcId, viewId, writer, owner, cache, CachedPacket.iRPC);
                        owner.Write(sender, writer, targetTo, matchmakingTo, protocol);
                    }
                    return(true);
                }

                if (MatchmakingHelper.Server.GetNetworkObject(key, owner, out NeutronView neutronView))
                {
                    if (neutronView.iRPCs.TryGetValue((rpcId, instanceId), out RPCInvoker remoteProceduralCall))
                    {
                        try
                        {
                            iRPCAttribute iRPCAttribute = remoteProceduralCall.iRPC;
                            if (ReflectionHelper.iRPC(buffer, remoteProceduralCall, owner))
                            {
                                Send();
                            }
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Stacktrace(ex);
                        }
                    }
                    else
                    {
                        Send();
                    }
                }
Exemple #21
0
 public RegisterViewModel(RegisterMode mode)
 {
     Mode = mode;
 }
Exemple #22
0
 public RegisterLoad(RegisterMode _mode, string _priority_key, Type _contract_type, Type _concrete_type, object _concrete_instance, TransientCreationLevel _transient_level = TransientCreationLevel.None) : base(_priority_key, _contract_type, _concrete_type, _transient_level)
 {
     concrete_instance = _concrete_instance;
     mode = _mode;
 }
Exemple #23
0
        private void GenerateNumber(
            CodeWriter code,
            RegisterMode registerMode,
            int registerLength,
            List <RegisterProperty> properties,
            XElement element)
        {
            string name      = GetName(element) ?? "Value";
            string paramName = GetLocalName(name);

            int       byteIndex;
            BitsRange bitsRange = GetBitsRange(element, registerLength, null, out byteIndex);

            uint defaultValue;

            if (registerMode == RegisterMode.ReadWrite)
            {
                defaultValue = ConvertToInteger(element.Attribute("default")?.Value) << bitsRange.FromBits;
            }
            else
            {
                defaultValue = 0;
            }

            string integerType = GetIntegerType(bitsRange);

            Action <CodeWriter, string> appendPropertyAssigmentValidation = (codeWriter, actualParamName) =>
            {
                uint integerTypeMaxValue = GetIntegerTypeMaxValue(bitsRange);
                if (integerTypeMaxValue != bitsRange.MaxValue)
                {
                    AppendVerboseComment(codeWriter, "Validating the numerical range.");
                    codeWriter.AppendLine($"if ({actualParamName} > {ToHex(bitsRange.MaxValue, bitsRange.NibbleCount)})");
                    codeWriter.AppendLine("{");
                    codeWriter.Indent++;
                    codeWriter.AppendLine($"throw new ArgumentException($\"{{nameof({actualParamName})}} must be in the range of [{ToHex(0, bitsRange.NibbleCount)} - {ToHex(bitsRange.MaxValue, bitsRange.NibbleCount)}].\");");
                    codeWriter.Indent--;
                    codeWriter.AppendLine("}");
                    codeWriter.AppendLine();
                }
            };

            Action <CodeWriter, string[]> appendPropertyAssigmentFromBytes = (codeWriter, byteParameterNames) =>
            {
                AppendVerboseComment(codeWriter, "Assigning the composed numerical value.");
                string composedValue = GetComposedValue(bitsRange, registerLength, byteIndex, byteParameterNames);
                codeWriter.AppendLine($"{name} = {composedValue};");
            };

            Func <string[]> getByteIndexAsByteStrings = () =>
                                                        GetDecomposedValues(name, bitsRange, registerLength, byteIndex, true);

            properties.Add(new RegisterProperty(
                               PropertyType.Numeric,
                               registerMode,
                               name,
                               paramName,
                               integerType,
                               ToHex(defaultValue, bitsRange.NibbleCount),
                               GetDescription(element),
                               appendPropertyAssigmentValidation,
                               appendPropertyAssigmentFromBytes,
                               getByteIndexAsByteStrings,
                               byteIndex));
        }
Exemple #24
0
        public void Register <T>(Func <T> creator, LifeCycle lifeCycle = LifeCycle.Transient, RegisterMode mode = RegisterMode.Self, string name = "") where T : class
        {
            var builder = new ContainerBuilder();

            builder.Register <T>(creator, mode, name).UseLifeCycle(lifeCycle);
            builder.Update(_container);
        }