示例#1
0
        public static int size(MValue value, double dim)
        {
            Contract.Requires(value != null);
            var shape = value.Shape;

            return(shape.GetDimensionSize(PseudoBuiltins.ToInt(dim) - 1));
        }
示例#2
0
        //TODO: make call async because it doesnt matter there is no concurrent problems inside

        //TODO: write function parser in cpp so it can do that natively without any native calls for mvalues (experimental)
        //TODO: register event callbacks to cpp as dynamic function pointers with void** so cpp knows the types it needs to check

        //TODO: add support for nullable args, these are reducing the required length, add support for default values as well
        internal MValue Call(IBaseBaseObjectPool baseBaseObjectPool, MValue[] values)
        {
            var length = values.Length;

            if (length != args.Length)
            {
                return(MValue.Nil);
            }
            //var watch = System.Diagnostics.Stopwatch.StartNew();
            var invokeValues = new object[length];

            for (var i = 0; i < length; i++)
            {
                invokeValues[i] = parsers[i](ref values[i], args[i], baseBaseObjectPool, typeInfos[i]);
            }

            //watch.Stop();
            //var elapsedMs = watch.ElapsedMilliseconds;
            //Alt.Log("ms:" + elapsedMs);

            var result = @delegate.DynamicInvoke(invokeValues);

            if (returnType == FunctionTypes.Void)
            {
                return(MValue.Nil);
            }
            return(MValue.CreateFromObject(result));
        }
示例#3
0
 public static void Export <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>(
     string key,
     Func <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> value) =>
 Module.CSharpNativeResource.SetExport(key,
                                       MValue.Create(Function
                                                     .Create <Func <T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> >(value)
                                                     .call));
示例#4
0
        public override void SetMetaData(string key, ref MValue value)
        {
            var stringPtr = AltNative.StringUtils.StringToHGlobalUtf8(key);

            AltNative.VoiceChannel.VoiceChannel_SetMetaData(NativePointer, stringPtr, ref value);
            Marshal.FreeHGlobal(stringPtr);
        }
示例#5
0
        public void TriggerClientEvent(IPlayer player, string eventName, params object[] args)
        {
            var mValues = MValue.CreateFromObjects(args);

            TriggerClientEvent(player, eventName, mValues);
            MValue.Dispose(mValues);
        }
示例#6
0
        public void SetMetaData(string key, object value)
        {
            CheckIfEntityExists();
            var mValue = MValue.CreateFromObject(value);

            SetMetaData(key, ref mValue);
        }
示例#7
0
        public override void GetSyncedMetaData(string key, ref MValue value)
        {
            var stringPtr = AltNative.StringUtils.StringToHGlobalUtf8(key);

            AltNative.Player.Player_GetSyncedMetaData(NativePointer, stringPtr, ref value);
            Marshal.FreeHGlobal(stringPtr);
        }
示例#8
0
        //TODO: make call async because it doesnt matter there is no concurrent problems inside

        //TODO: write function parser in cpp so it can do that natively without any native calls for mvalues (experimental)
        //TODO: register event callbacks to cpp as dynamic function pointers with void** so cpp knows the types it needs to check

        //TODO: add support for nullable args, these are reducing the required length, add support for default values as well

        //TODO: maybe cache var invokeValues = new object[length];
        internal MValue Call(IBaseBaseObjectPool baseBaseObjectPool, MValue[] values)
        {
            var length = values.Length;

            if (length < requiredArgsCount)
            {
                return(MValue.Nil);
            }
            var argsLength         = args.Length;
            var invokeValues       = new object[argsLength];
            var parserValuesLength = Math.Min(argsLength, length);

            for (var i = 0; i < parserValuesLength; i++)
            {
                invokeValues[i] = parsers[i](ref values[i], args[i], baseBaseObjectPool, typeInfos[i]);
            }

            for (var i = parserValuesLength; i < argsLength; i++)
            {
                invokeValues[i] = typeInfos[i].DefaultValue;
            }

            //TODO: fill remaining values in event params

            var result = @delegate.DynamicInvoke(invokeValues);

            if (returnType == FunctionTypes.Void)
            {
                return(MValue.Nil);
            }
            return(MValue.CreateFromObject(result));
        }
        public void RemoveVoice(MVoice voice)
        {
            for (int i = this._assignedParameters.Count - 1; i >= 0; i--)
            {
                MValue        val = this._assignedParameters[i];
                List <MVoice> voices;

                if (this._valueAssignments.TryGetValue(val, out voices) == true)
                {
                    voices.Remove(voice);

                    if (voices.Count == 0)
                    {
                        this._assignedParameters.Remove(val);
                    }
                }
            }

            if (this._mods.ContainsKey(voice))
            {
                this._mods.Remove(voice);
            }

            if (this._triggers.ContainsKey(voice))
            {
                this._triggers.Remove(voice);
            }
        }
示例#10
0
 public void UpdateEntityData(INetworkingEntity entity, string key, MValue value)
 {
     lock (entity.StreamedInClients)
     {
         if (entity.StreamedInClients.Count <= 0)
         {
             return;
         }
         var entityDataChangeEvent = new EntityDataChangeEvent {
             Id = entity.Id, Key = key, Value = value
         };
         var serverEvent = new ServerEvent {
             DataChange = entityDataChangeEvent
         };
         var bytes = serverEvent.ToByteArray();
         foreach (var streamedInClient in entity.StreamedInClients)
         {
             lock (streamedInClient)
             {
                 if (streamedInClient.Exists)
                 {
                     streamedInClient.WebSocket?.SendAsync(bytes, true);
                 }
             }
         }
     }
 }
示例#11
0
        public void TriggerClientEvent(IPlayer player, string eventName, ref MValue args)
        {
            var mValueArray = MValueArray.Nil;

            AltNative.MValueGet.MValue_GetList(ref args, ref mValueArray);
            Alt.Module.OnClientEvent(player?.NativePointer ?? IntPtr.Zero, eventName, ref mValueArray);
        }
示例#12
0
        public override void SetMetaData(string key, object value)
        {
            CheckIfEntityExists();
            var mValue = MValue.CreateFromObject(value);

            AltNative.Blip.Blip_SetMetaData(NativePointer, key, ref mValue);
        }
示例#13
0
        public void TriggerClientEvent(IPlayer player, string eventName, ref MValue args)
        {
            var eventNamePtr = AltNative.StringUtils.StringToHGlobalUtf8(eventName);

            TriggerClientEvent(player, eventNamePtr, ref args);
            Marshal.FreeHGlobal(eventNamePtr);
        }
 public override void SafeAwake()
 {
     base.SafeAwake();
     AddSpeedKey      = /*BB.*/ AddKey(LanguageManager.Instance.CurrentLanguage.AddSpeed, "Add Speed", KeyCode.Equals);
     ReduceSpeedKey   = /*BB.*/ AddKey(LanguageManager.Instance.CurrentLanguage.ReduceSpeed, "Reduce Speed", KeyCode.Minus);
     ChangeSpeedValue = /*BB.*/ AddValue(LanguageManager.Instance.CurrentLanguage.ChangeSpeed, "Change Speed", 0.1f);
 }
示例#15
0
        public void TriggerServerEvent(string eventName, params object[] args)
        {
            var mValues = MValue.CreateFromObjects(args);

            TriggerServerEvent(eventName, mValues);
            MValue.Dispose(mValues);
        }
示例#16
0
        public void TriggerServerEvent(string eventName, ref MValue args)
        {
            var eventNamePtr = AltNative.StringUtils.StringToHGlobalUtf8(eventName);

            TriggerServerEvent(eventNamePtr, ref args);
            Marshal.FreeHGlobal(eventNamePtr);
        }
示例#17
0
        public override int GetHashCode()
        {
            int hashCode = -1007052003;

            if (Id != null)
            {
                hashCode += Id.GetHashCode();
            }

            if (Type != null)
            {
                hashCode += Type.GetHashCode();
            }

            if (MValue != null)
            {
                hashCode += MValue.GetHashCode();
            }

            if (CreatedAt != null)
            {
                hashCode += CreatedAt.GetHashCode();
            }

            return(hashCode);
        }
示例#18
0
        internal MValue Call(IPlayer player, IBaseBaseObjectPool baseBaseObjectPool, MValue[] values)
        {
            var length = values.Length;

            if (length + 1 != args.Length)
            {
                return(MValue.Nil);
            }
            if (!typeInfos[0].IsPlayer)
            {
                return(MValue.Nil);
            }
            var invokeValues = new object[length + 1];

            invokeValues[0] = player;
            for (var i = 0; i < length; i++)
            {
                invokeValues[i + 1] =
                    parsers[i + 1](ref values[i], args[i + 1], baseBaseObjectPool, typeInfos[i + 1]);
            }

            var result = @delegate.DynamicInvoke(invokeValues);

            if (returnType == FunctionTypes.Void)
            {
                return(MValue.Nil);
            }
            return(MValue.CreateFromObject(result));
        }
示例#19
0
        public void TriggerServerEvent(string eventName, ref MValue args)
        {
            var mValueArray = MValueArray.Nil;

            AltNative.MValueGet.MValue_GetList(ref args, ref mValueArray);
            Alt.Module.OnServerEvent(eventName, ref mValueArray);
        }
示例#20
0
        private static MValue ImportCall(MValue mValue, object[] args)
        {
            var mValueArgs = MValue.CreateFromObject(args);
            var result     = MValue.Nil;

            AltNative.MValueCall.MValue_CallFunctionValue(ref mValue, ref mValueArgs, ref result);
            return(result);
        }
示例#21
0
        public void SetExport(string key, object value)
        {
            var stringPtr = AltNative.StringUtils.StringToHGlobalUtf8(key);
            var mValue    = MValue.CreateFromObject(value);

            AltNative.Resource.Resource_SetExport(NativePointer, stringPtr, ref mValue);
            Marshal.FreeHGlobal(stringPtr);
            mValue.Dispose();
        }
示例#22
0
        public static bool Import(string resourceName, string key, MValue.Type type, out MValue mValue)
        {
            if (Import(resourceName, key, out mValue) && mValue.type == type)
            {
                return(true);
            }

            throw new InvalidImportException(
                      $"Resource: '{resourceName}.{key}' with type: '{mValue.type}' doesn't matches the expected export type: '{type}'.");
        }
示例#23
0
        internal MValue Invoke(object[] invokeValues)
        {
            var result = @delegate.DynamicInvoke(invokeValues);

            if (returnType == FunctionTypes.Void)
            {
                return(MValue.Nil);
            }
            return(MValue.CreateFromObject(result));
        }
        public void RemoveValue(MValue val)
        {
            if (this._assignedParameters.Contains(val) == true)
            {
                this._assignedParameters.Remove(val);

                // TODO: check if a voice has no assigned parameters anymore
                _valueAssignments.Remove(val);
            }
        }
示例#25
0
        public void TriggerClientEvent(IPlayer player, string eventName, params object[] args)
        {
            if (args == null)
            {
                throw new ArgumentException("Arguments array should not be null.");
            }
            var mValues = MValue.CreateFromObjects(args);

            TriggerClientEvent(player, eventName, mValues);
            MValue.Dispose(mValues);
        }
示例#26
0
        public bool GetExport(string key, ref MValue value)
        {
            var result = AltNative.Resource.Resource_GetExport(NativePointer, key, ref value);

            if (!result)
            {
                return(false);
            }
            value.Dispose();
            return(true);
        }
示例#27
0
        public void TriggerServerEvent(IntPtr eventNamePtr, params object[] args)
        {
            if (args == null)
            {
                throw new ArgumentException("Arguments array should not be null.");
            }
            var mValues = MValue.CreateFromObjects(args);

            TriggerServerEvent(eventNamePtr, mValues);
            MValue.Dispose(mValues);
        }
示例#28
0
        internal static MValue[] CreateFromObjectsLocked(object[] objects)
        {
            var length  = objects.Length;
            var mValues = new MValue[length];

            for (var i = 0; i < length; i++)
            {
                mValues[i] = CreateFromObjectLocked(objects[i]);
            }

            return(mValues);
        }
示例#29
0
    public MRef Create(string name, MValue init) // create a reference to *core reference*.
    {
        // When create someting, we create a reference to *core reference*,
        //   or directly create a *core reference*.
        // Notice MRef itself is reference type.
        var t = init is MRef r ? r.downref : new MRef()
        {
            target = init
        };

        Add(name, t);
        return(t);
    }
示例#30
0
        public                    MValue[] ToArray()
        {
            var value  = data;
            var values = new MValue[Size];

            for (var i = 0; i < values.Length; i++)
            {
                values[i] = Marshal.PtrToStructure <MValue>(value);
                value    += MValue.Size;
            }

            return(values);
        }