From 7c04472b680f864da897e74703a30438930ee5a1 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 16 Oct 2017 13:40:05 -0700 Subject: [PATCH] Added untested Scala binding --- examples/bindings/scala/Makefile | 18 ++++++++++++++++++ examples/bindings/scala/README.md | 14 ++++++++++++++ examples/bindings/scala/libzt.scala | 13 +++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 examples/bindings/scala/Makefile create mode 100644 examples/bindings/scala/README.md create mode 100644 examples/bindings/scala/libzt.scala diff --git a/examples/bindings/scala/Makefile b/examples/bindings/scala/Makefile new file mode 100644 index 0000000..5c18202 --- /dev/null +++ b/examples/bindings/scala/Makefile @@ -0,0 +1,18 @@ +OSTYPE=$(shell uname -s | tr '[A-Z]' '[a-z]') +BUILD=build/$(OSTYPE) + +ifeq ($(OSTYPE),darwin) +SHARED_LIB=libzt.dylib +endif +ifeq ($(OSTYPE),linux) +SHARED_LIB=libzt.so +endif + +example_scala_app: + scalac *.scala + +copy_dynamic_lib: + cp ../../../$(BUILD)/$(SHARED_LIB) . + +clean: + -find . -type f \( -name '*.class' \) -delete \ No newline at end of file diff --git a/examples/bindings/scala/README.md b/examples/bindings/scala/README.md new file mode 100644 index 0000000..2dd80c8 --- /dev/null +++ b/examples/bindings/scala/README.md @@ -0,0 +1,14 @@ +## ZeroTier with Scala via JNI +*** + +To get this example project to work, do the following: + +- From libzt main directory, build shared library: `make shared_jni_lib` +- Copy the resultant dynamic library (`*.so` or `*.dylib`) from `build/` to this current directory +- Change to this directory and `make example_scala_app` +- Run: `scala -cp "." ExampleApp` + + +Notes: + +Upon execution, it will load the libzt dynamic library via the `loadLibrary` method and begin generating an identity. \ No newline at end of file diff --git a/examples/bindings/scala/libzt.scala b/examples/bindings/scala/libzt.scala new file mode 100644 index 0000000..6eff971 --- /dev/null +++ b/examples/bindings/scala/libzt.scala @@ -0,0 +1,13 @@ + +class ZeroTier { + @native def ztjni_socket(socket_family: Int, socket_type: Int, protocol: Int): Int +} + +object ZeroTier extends App { + + System.loadLibrary("zt") + + val libzt = new ZeroTier + val fd = libzt.ztjni_socket(2, 1, 0) + println(s"zts_socket(): $fd") +} \ No newline at end of file