예제 #1
0
		public static DynValue pairs(ScriptExecutionContext executionContext, CallbackArguments args) 
		{
			DynValue table = args[0];

			DynValue meta = executionContext.GetMetamethodTailCall(table, "__pairs", args.GetArray());

			return meta ?? DynValue.NewTuple(DynValue.NewCallback(next), table);
		}
예제 #2
0
        public static DynValue ipairs(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            var table = args[0];

            var meta = executionContext.GetMetamethodTailCall(table, "__ipairs", args.GetArray());

            return meta ?? DynValue.NewTuple(DynValue.NewCallback(__next_i), table, DynValue.NewNumber(0));
        }
예제 #3
0
        public static DynValue assert(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            var v = args[0];
            var message = args[1];

            if (!v.CastToBool())
            {
                if (message.IsNil())
                    throw new ScriptRuntimeException("assertion failed!") {DoNotDecorateMessage = true};
                throw new ScriptRuntimeException(message.ToPrintString()) {DoNotDecorateMessage = true};
            }

            return DynValue.NewTupleNested(args.GetArray());
        }
예제 #4
0
        public static DynValue assert(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            var v       = args[0];
            var message = args[1];

            if (!v.CastToBool())
            {
                if (message.IsNil())
                {
                    throw new ScriptRuntimeException("assertion failed!"); // { DoNotDecorateMessage = true };
                }

                throw new ScriptRuntimeException(message.ToPrintString()); // { DoNotDecorateMessage = true };
            }

            return(DynValue.NewTupleNested(args.GetArray()));
        }
        public static DynValue resume(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            DynValue handle = args.AsType(0, "resume", DataType.Thread);

            try
            {
                DynValue ret = handle.Coroutine.Resume(args.GetArray(1));

                List <DynValue> retval = new List <DynValue>();
                retval.Add(DynValue.True);

                if (ret.Type == DataType.Tuple)
                {
                    for (int i = 0; i < ret.Tuple.Length; i++)
                    {
                        var v = ret.Tuple[i];

                        if ((i == ret.Tuple.Length - 1) && (v.Type == DataType.Tuple))
                        {
                            retval.AddRange(v.Tuple);
                        }
                        else
                        {
                            retval.Add(v);
                        }
                    }
                }
                else
                {
                    retval.Add(ret);
                }

                return(DynValue.NewTuple(retval.ToArray()));
            }
            catch (ScriptRuntimeException ex)
            {
                return(DynValue.NewTuple(
                           DynValue.False,
                           DynValue.NewString(ex.Message)));
            }
        }
예제 #6
0
		public static DynValue resume(ScriptExecutionContext executionContext, CallbackArguments args)
		{
			DynValue handle = args.AsType(0, "resume", DataType.Thread);

			try
			{
				DynValue ret = handle.Coroutine.Resume(args.GetArray(1));

				List<DynValue> retval = new List<DynValue>();
				retval.Add(DynValue.True);

				if (ret.Type == DataType.Tuple)
				{
					for (int i = 0; i < ret.Tuple.Length; i++)
					{
						var v = ret.Tuple[i];

						if ((i == ret.Tuple.Length - 1) && (v.Type == DataType.Tuple))
						{
							retval.AddRange(v.Tuple);
						}
						else
						{
							retval.Add(v);
						}
					}
				}
				else
				{
					retval.Add(ret);
				}

				return DynValue.NewTuple(retval.ToArray());
			}
			catch (ScriptRuntimeException ex)
			{
				return DynValue.NewTuple(
					DynValue.False,
					DynValue.NewString(ex.Message));
			}
		}
예제 #7
0
        static DynValue ipairs(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            DynValue table = args[0];

            DynValue meta = executionContext.GetMetamethodTailCall(table, "__ipairs", args.GetArray());

            return(meta ?? DynValue.NewTuple(DynValue.NewCallback(__next_i), table, DynValue.NewNumber(0)));
        }
예제 #8
0
        static DynValue CallBack(ScriptExecutionContext ctx, CallbackArguments args)
        {
            var name      = ctx.m_Callback.Name;
            var arguments = args.GetArray();
            // do stuff

            ClientCommand Command = new ClientCommand((LOU.CommandType)Enum.Parse(typeof(LOU.CommandType), name));

            for (int i = 0; i < arguments.Length; i++)
            {
                switch (arguments[i].Type)
                {
                case DataType.Number:
                    Command.CommandParams.Add(i.ToString(), arguments[i].Number.ToString());
                    break;

                case DataType.String:
                    Command.CommandParams.Add(i.ToString(), arguments[i].String);
                    break;

                default:
                    Command.CommandParams.Add(i.ToString(), arguments[i].ToString());
                    break;
                }
            }

            if (MainForm.CurrentClientProcessId != -1 && MainForm.ClientCommandsMemoryMap != null)
            {
                int ClientCommandId = 0;
                Queue <ClientCommand> ClientCommandsQueue;
                ClientCommand[]       ClientCommandsArray;
                MainForm.ClientCommandsMemoryMap.ReadMemoryMap(out ClientCommandId, out ClientCommandsArray);
                if (ClientCommandsArray == null)
                {
                    ClientCommandsQueue = new Queue <ClientCommand>();
                }
                else
                {
                    ClientCommandsQueue = new Queue <ClientCommand>(ClientCommandsArray);
                }

                if (ClientCommandsQueue.Count > 100)
                {
                    throw new Exception("Too many commands in the queue. Cannot continue.");
                }

                ClientCommandsQueue.Enqueue(Command);
                int AssignedClientCommandId = ClientCommandId + ClientCommandsQueue.Count;
                MainForm.ClientCommandsMemoryMap.WriteMemoryMap(ClientCommandId, ClientCommandsQueue.ToArray());
                Debug.WriteLine("Command inserted, assigned CommandId=" + AssignedClientCommandId.ToString());

                Stopwatch timeout = new Stopwatch();
                timeout.Start();
                while (ClientCommandId < AssignedClientCommandId && timeout.ElapsedMilliseconds < 3000)
                {
                    Debug.WriteLine("Waiting for command to be executed, Current CommandId=" + ClientCommandId.ToString() + ", Assigned CommandId=" + AssignedClientCommandId.ToString());
                    Thread.Sleep(50);
                    MainForm.ClientCommandsMemoryMap.ReadMemoryMap(out ClientCommandId, out ClientCommandsArray);
                }
                timeout.Stop();
                if (timeout.ElapsedMilliseconds >= 3000)
                {
                    Debug.WriteLine("Timed out!");
                }
                MainForm.RefreshClientStatus();
            }

            return(DynValue.Nil);
        }
 public static DynValue yield(ScriptExecutionContext executionContext, CallbackArguments args)
 {
     return(DynValue.NewYieldReq(args.GetArray()));
 }
        public static DynValue __wrap_wrapper(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            DynValue handle = (DynValue)executionContext.AdditionalData;

            return(handle.Coroutine.Resume(args.GetArray()));
        }
예제 #11
0
		public static DynValue yield(ScriptExecutionContext executionContext, CallbackArguments args)
		{
			return DynValue.NewYieldReq(args.GetArray());
		}
예제 #12
0
		public static DynValue __wrap_wrapper(ScriptExecutionContext executionContext, CallbackArguments args)
		{
			DynValue handle = (DynValue)executionContext.AdditionalData;
			return handle.Coroutine.Resume(args.GetArray());
		}
예제 #13
0
        public static DynValue ipairs(ScriptExecutionContext executionContext, CallbackArguments args)
        {
            DynValue table = args[0];

            if (table == null || table.Type == DataType.Nil)
            {
                throw new System.ApplicationException("attempt to index nil");
            }

            DynValue meta = executionContext.GetMetamethodTailCall(table, "__ipairs", args.GetArray());

            return(meta ?? DynValue.NewTuple(DynValue.NewCallback(__next_i), table, DynValue.NewNumber(0)));
        }