JsToDef - simple way to send messages from JS to Lua

#1

JsToDef

Native Extension that makes possible to send messages from JavaScript to Lua in HTML5 build.

Setup

You can use the JsToDef extension in your own project by adding this project as a Defold library dependency. Open your game.project file and in the dependencies field under project add:

https://github.com/AGulev/jstodef/archive/master.zip

Or point to the ZIP file of a specific release.

API JavaScript side

JsToDef.send(message_id, message)

Where message_id is a string that helps you to identify this message on Lua side.

message is a custom value that might be one of the next types: object, number, boolean, string, undefined(if you don’t need any extra data).

Example:
JsToDef.send("MyCustomMessageName", "custom message");
JsToDef.send("ObjectEvent", {foo:"bar", num:16, isAv:true});
JsToDef.send("FloatEvent", 19.2);
JsToDef.send("IntEvent", 18);
JsToDef.send("StrintEvent", "custom string");
JsToDef.send("EmptyEvent");
JsToDef.send("BooleanEvent", true);
JsToDef.send("BooleanEvent", false);

API Lua side

If you are working on cross-platform application the best practice to check the existence of jstodef module, this module exists only in html5 build:

if jstodef then
  -- any operations with jstodef
end

Add Listener

jstodef.add_listener(listener)

Where listener is a function with the next parameters:

self is the current script self.

message_id is a string that helps you to identify this message.

message is a custom value that might be one of the next types: table, number, boolean, string, nil.

It is possible to add a few listeners.

Example:
local function js_listener(self, message_id, message)
  if message_id == "MyCustomMessageName" then
    -- do something
  end
end

function init(self)
  if jstodef then
    jstodef.add_listener(js_listener)
  end
end

Remove Listener

jstodef.remove_listener(listener)

Where listener is the function that was previously added as a listener with jstodef.add_listener() method.

function final(self)
  if jstodef then
    jstodef.remove_listener(js_listener)
  end
end

Issues and suggestions

If you have any issues, questions or suggestions please create an issue or contact me: me@agulev.com

19 Likes

#2

awesome!!!!

1 Like