From 758ff3e86c267d67e1c9b1e8bd7329407dcf9c6f Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 21 Jun 2016 10:14:28 -0700 Subject: [PATCH] . --- docs/unity3d_osx_zt_sdk copy.md | 128 ++++++++++-------- .../UserInterfaceState.xcuserstate | Bin 64679 -> 64671 bytes 2 files changed, 69 insertions(+), 59 deletions(-) diff --git a/docs/unity3d_osx_zt_sdk copy.md b/docs/unity3d_osx_zt_sdk copy.md index ee2e772..64a1fe4 100644 --- a/docs/unity3d_osx_zt_sdk copy.md +++ b/docs/unity3d_osx_zt_sdk copy.md @@ -1,84 +1,94 @@ -Unity3D + ZeroTier SDK +Unity3D OSX + ZeroTier SDK ==== Welcome! We want your Unity apps to talk *directly* over a flat, secure, no-config virtual network without sending everything into the "cloud". Thus, we introduce the ZeroTier-Unity3D integration! -Our implementation currently intends to be the bare minimum required to get your Unity application to talk over ZeroTier virtual networks. As a result, we've created an API that is very similar to the built-in Unity LLAPI. It's possible that higher-level functionality could be added in the future. +Our implementation currently intends to be the bare minimum required to get your Unity application to talk over ZeroTier virtual networks. As a result, we've created an API that is very similar to the classic BSD-style sockets API. With this basic API it is possible to construct more abstracted network layers much like Unity's LLAPI and HLAPI. + +*** +## API + +- `Join(nwid)`: Joins a ZeroTier virtual network +- `Leave(nwid)`: Leaves a ZeroTier virtual network +- `Socket(family, type, protocol)`: Creates a ZeroTier-administered socket +- `Bind(fd, addr, port)`: Binds to that socket on the address and port given +- `Listen(fd, backlog)`: Puts a socket into a listening state +- `Accept(fd)`: Accepts an incoming connection +- `Connect(fd, addr, port)`: Connects to an endpoint associated with the given `fd` +- `Write(fd, buf, len)`: Sends data to the endpoint associated with the given `fd` +- `Read(fd, buf, len)`: Receives data from an endpoint associated with the given `fd` +- `CLose(fd)`: Closes a connection with an endpoint *** ## Adding ZeroTier to your Unity app **Step 1: Create virtual ZeroTier [virtual network](https://my.zerotier.com/)** -**Step 2: Add plugin** - - Create a folder called `Plugins` in `Assets` - - Place `ZeroTierUnity.bundle` in that folder +**Step 2: Add plugin to Unity project** + - Create folder `Assets/Plugins` + - Place `ZeroTierSDK_Unity3D_OSX.bundle` in folder -**Step 3: Add script to some `GameObject`** - - Drag our `ZeroTier.cs` native plugin wrapper onto any `GameObject` +**Step 3: Include wrapper class source** + - Drag `ZeroTierNetworkInterface.cs` into your `Assets` folder. +**Step 4: Create and use a `ZeroTierNetworkInterface` object** + - See examples below for how to use it! *** -## Examples - -Calling `ZeroTier.Init()` will start the network service in a separate thread. You can check if the service is running by checking `ZeroTier.IsRunning()`. Then, connecting and sending data to another endpoint would look something like the following: +## Server example ``` -public void zt_sample_network_test_thread() +public class Example { - // Prepare sample data buffer - byte[] buffer = new byte[1024]; - Stream stream = new MemoryStream(buffer); - BinaryFormatter f = new BinaryFormatter(); - f.Serialize ( stream , "Welcome to the machine! (from Unity3D)" ); + public ZeroTierNetworkInterface zt; - // Connect and send - int error; - Connect (0, "192.168.0.6", 8887, out error); - Send(connfd,buffer,0, out error); + public void example_server() + { + Thread connectThread = new Thread(() => { + // Create ZeroTier-administered socket + int sock = zt.Socket ((int)AddressFamily.InterNetwork, (int)SocketType.Stream, (int)ProtocolType.Unspecified); + zt.Bind(sock, "0.0.0.0", 8000); + zt.Listen(sock, 1); + + // Accept() client connection + int accept_sock = -1; + while(accept_res < 0) { + accept_sock = zt.Accept(sock); + } + + // Read data from client + char[] msg = new char[1024]; + int bytes_read = 0; + while(bytes_read >= 0) { + bytes_read = zt.Read(accept_sock, ref msg, 80); + string msgstr = new string(msg); + Debug.Log("MSG (" + bytes_read + "):" + msgstr); + } + }); + connectThread.IsBackground = true; + connectThread.Start(); + } } ``` -Finally, when you're done running the service you can call `ZeroTier.Terminate()` - -*** -## API - -The API is designed to resemble the Unity LLAPI, so you'll see a few familiar functions but with a slight twist. - -- `Join(nwid)`: Joins a ZeroTier virtual network -- `Leave(nwid)`: Leaves a ZeroTier virtual network -- `AddHost(port)`: Creates a socket, and binds to that socket on the address and port given -- `Connect(fd, ip_address, port, out error)`: Connects to an endpoint associated with the given `fd` -- `Send(fd, buf, pos, out error)`: Sends data to the endpoint associated with the given `fd` -- `Recv(fd, buf, out error)`: Receives data from an endpoint associated with the given `fd` -- `Disconnect(fd)`: Closes a connection with an endpoint - -*** -## Design and structure of the ZeroTier Unity OSX Bundle - -XCode: -New XCode project -Select Cocoa bundle as target -Add C linkages to external functions -Build as 64bit (not universal) - -Unity: -Select x86_64 build target in `Build Settings` -In new C# script asset: - -``` -[DllImport ("ZeroTierUnity")] -private static extern int unity_start_service (); +## Client example ``` +public class Example +{ + public ZeroTierNetworkInterface zt; -Add asset to GameObject -Start ZT service - -*** -## Future Roadmap -With the ZeroTier sockets API in place, higher-level functionality such as lobbies, chat, and object synchronization could easily be built on top. - - + public void example_client() + { + Thread connectThread = new Thread(() => { + // Create ZeroTier-administered socket + int sock = zt.Socket ((int)AddressFamily.InterNetwork, (int)SocketType.Stream, (int)ProtocolType.Unspecified); + zt.Connect (sock, "0.0.0.0",8000); + zt.Write(sock, "Welcome to the machine!", 24); + }); + connectThread.IsBackground = true; + connectThread.Start(); + } +} +``` \ No newline at end of file diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index 6f99ced8760d2cbeb850b4ddc498fb9649d51b9f..794599c6b02e97faf65eba79f3fb29e6bada8f9e 100644 GIT binary patch delta 24466 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 delta 24506 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