/// <summary> /// Dispatches a JavaScript function to the main thread /// </summary> /// <param name="ptr">The function pointer</param> /// <param name="args">The arguments to pass to the function</param> /// <param name="deleteAfterExec">Whether or not this pointer should be deleted after the function has been called</param> public void DispatchFunction(JSFunctionPtr ptr,bool deleteAfterExec, params object[] args) { JSMarshaller marshal = new JSMarshaller(); marshal.args = args; marshal.DeleteAfterExecution = deleteAfterExec; marshal.ptr = ptr; interruptfunctions.Add(marshal); mvent.Set(); }
/// <summary> /// OPCODE 9 /// </summary> /// <param name="funcptr"></param> static void onKeyUp(JSFunctionPtr funcptr) { dgate_keyup = funcptr; }
/// <summary> /// OPCODE 8 /// </summary> /// <param name="funcptr"></param> static void onKeyPress(JSFunctionPtr funcptr) { dgate_keydown = funcptr; }
IntPtr setRecvDgate(int len, IntPtr args) { if (recvDgate != null) { vm.DisposeFunctionPtr(recvDgate); recvDgate = null; } recvDgate = vm.Deserialize(len, args)[0] as JSFunctionPtr; return IntPtr.Zero; }
public void InvokeMethod(JSFunctionPtr functionPtr,Kernel kernel, object[] args) { CallFunction(inst, SerializeDirect(kernel, args), functionPtr.value); }
public void DisposeFunctionPtr(JSFunctionPtr ptr) { __CloseFuncPtr(inst,ptr.value); }
object DeserializeManaged(Stream data) { BinaryReader mreader = new BinaryReader(data); object baseobj = null; byte opcode = mreader.ReadByte(); if (opcode == 0) { int count = mreader.ReadInt32(); Dictionary<string, object> mstr = new Dictionary<string, object>(); for (int i = 0; i < count; i++) { int clen = mreader.ReadInt32(); mstr.Add(Encoding.UTF8.GetString(mreader.ReadBytes(clen)), DeserializeManaged(data)); } baseobj = mstr; } if (opcode == 1) { baseobj = new object[mreader.ReadUInt32()]; for (int i = 0; i < (baseobj as object[]).Length; i++) { (baseobj as object[])[i] = DeserializeManaged(data); } } if (opcode == 2) { baseobj = mreader.ReadInt32(); } if (opcode == 3) { baseobj = Encoding.UTF8.GetString(mreader.ReadBytes(mreader.ReadInt32())); } if (opcode == 4) { baseobj = new JSFunctionPtr(mreader.ReadInt32()); } if (opcode == 5) { baseobj = mreader.ReadDouble(); } return baseobj; }