From e8f1a4db7363e252ef957bb6420e968a460ab01d Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 16 Oct 2017 14:27:25 -0700 Subject: [PATCH] Scala language binding lightly-tested and works --- examples/bindings/newscala/ZeroTier.java | 7 --- examples/bindings/newscala/example.java | 59 ------------------------ examples/bindings/scala/ExampleApp.scala | 11 +++++ examples/bindings/scala/README.md | 2 +- examples/bindings/scala/libzt.scala | 11 +---- 5 files changed, 14 insertions(+), 76 deletions(-) delete mode 100644 examples/bindings/newscala/ZeroTier.java delete mode 100644 examples/bindings/newscala/example.java create mode 100644 examples/bindings/scala/ExampleApp.scala diff --git a/examples/bindings/newscala/ZeroTier.java b/examples/bindings/newscala/ZeroTier.java deleted file mode 100644 index ce8da3b..0000000 --- a/examples/bindings/newscala/ZeroTier.java +++ /dev/null @@ -1,7 +0,0 @@ -package zerotier; - -public class ZeroTier -{ - public native int ztjni_socket(int family, int type, int protocol); - public int socket(int family, int type, int protocol) { return ztjni_socket(family, type, protocol); } -} \ No newline at end of file diff --git a/examples/bindings/newscala/example.java b/examples/bindings/newscala/example.java deleted file mode 100644 index 2a97aa7..0000000 --- a/examples/bindings/newscala/example.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * ZeroTier SDK - Network Virtualization Everywhere - * Copyright (C) 2011-2017 ZeroTier, Inc. https://www.zerotier.com/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * -- - * - * You can be released from the requirements of the license by purchasing - * a commercial license. Buying such a license is mandatory as soon as you - * develop commercial closed-source software that incorporates or links - * directly against ZeroTier software without disclosing the source code - * of your own application. - */ - -// Simple Java example for libzt using JNI - -import zerotier.ZeroTier; - -public class example { - - public native int loadsymbols(); - public native void startOneService(); - - static { - System.load("/Users/joseph/op/zt/libzt/build/darwin/libzt.so"); - } - - public static void main(String[] args) { - - final ZeroTier z = new ZeroTier(); - - new Thread(new Runnable() { - public void run() { - System.out.println("starting libzt"); - z.ztjni_socket(2, 1, 0); - // start(path) will not block - // startjoin(path, nwid) will block - } - }).start(); - - while(true) - { - try { Thread.sleep(3000); } - catch (InterruptedException e) { e.printStackTrace(); } - } - } -} \ No newline at end of file diff --git a/examples/bindings/scala/ExampleApp.scala b/examples/bindings/scala/ExampleApp.scala new file mode 100644 index 0000000..76dd1c6 --- /dev/null +++ b/examples/bindings/scala/ExampleApp.scala @@ -0,0 +1,11 @@ +import zerotier.ZeroTier + +object ExampleApp extends App { + + System.loadLibrary("zt") + + val libzt = new ZeroTier + libzt.ztjni_startjoin("/Users/joseph/op/zt/libzt/ztjni", "1212121212121212") + val fd = libzt.ztjni_socket(2, 1, 0) + println(s"zts_socket(): $fd") +} \ No newline at end of file diff --git a/examples/bindings/scala/README.md b/examples/bindings/scala/README.md index 2dd80c8..08c1d99 100644 --- a/examples/bindings/scala/README.md +++ b/examples/bindings/scala/README.md @@ -6,7 +6,7 @@ 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` +- Run: `scala -Djava.library.path=$(pwd) -cp "." ExampleApp` Notes: diff --git a/examples/bindings/scala/libzt.scala b/examples/bindings/scala/libzt.scala index 6eff971..78a8202 100644 --- a/examples/bindings/scala/libzt.scala +++ b/examples/bindings/scala/libzt.scala @@ -1,13 +1,6 @@ +package zerotier; class ZeroTier { @native def ztjni_socket(socket_family: Int, socket_type: Int, protocol: Int): Int + @native def ztjni_startjoin(path: String, nwid: String): 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