updated docs
This commit is contained in:
@@ -7,6 +7,8 @@ We want your Unity apps to talk *directly* over a flat, secure, no-config virtua
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
|
Our example project can be found [here]()
|
||||||
|
|
||||||
***
|
***
|
||||||
## API
|
## API
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
True P2P injected right into your app with little to no code changes! A ZeroTier-enabled app.
|
True P2P injected right into your app with little to no code changes! A ZeroTier-enabled app.
|
||||||
(formerly known as Network Containers)
|
(formerly known as Network Containers)
|
||||||
|
|
||||||
The SDK couples the ZeroTier core Ethernet virtualization engine with a user-space TCP/IP stack and a carefully-crafted "shim" which intercepts and re-directs network API calls to our service. This allows servers and applications to be used without modification or recompilation. It can be used to run services on virtual networks without elevated privileges, special configuration of the physical host, kernel support, or any other application specific configuration. It's ideal for [containerized applications](../integrations/docker/), [games](docs/unity3d.md), and [desktop/mobile apps]().
|
The SDK couples the ZeroTier core Ethernet virtualization engine with a user-space TCP/IP stack and a carefully-crafted "shim" which intercepts and re-directs network API calls to our service. This allows servers and applications to be used without modification or recompilation. It can be used to run services on virtual networks without elevated privileges, special configuration of the physical host, kernel support, or any other application specific configuration. It's ideal for [containerized applications](../integrations/docker), [games](../integrations/Unity3D), and [desktop/mobile apps](../integrations).
|
||||||
|
|
||||||
Your only responsibility is to pick a shim appropriate for your app's design. Accessing resources (potentially other instances of your app) on the virtual network will work exactly as it would on a real LAN. The service supports both TCP and UDP. The ZeroTier SDK now works on both *x64* and *ARM* architectures. We've tested a beta version for *iOS*, *Android*, *Linux*, and *Mac OS*
|
Your only responsibility is to pick a shim appropriate for your app's design. Accessing resources (potentially other instances of your app) on the virtual network will work exactly as it would on a real LAN. The service supports both TCP and UDP. The ZeroTier SDK now works on both *x64* and *ARM* architectures. We've tested a beta version for *iOS*, *Android*, *Linux*, and *Mac OS*
|
||||||
|
|
||||||
@@ -66,4 +66,4 @@ We think this solution is well suited for low-latency multiplayer games where re
|
|||||||
|
|
||||||
The ZeroTier protocol is inherently P2P and only falls back to a relay in the event that your direct link is interrupted. It's in our best interest to automatically find the quickest route for your data and to *not* handle your data. This has the obvious benefits of reduced latency for your game, but also provides you better security and control of your data and reduces our costs. It seems non-sensical to do it any other way. ZeroTier is not a "cloud" that you send all of your data to.
|
The ZeroTier protocol is inherently P2P and only falls back to a relay in the event that your direct link is interrupted. It's in our best interest to automatically find the quickest route for your data and to *not* handle your data. This has the obvious benefits of reduced latency for your game, but also provides you better security and control of your data and reduces our costs. It seems non-sensical to do it any other way. ZeroTier is not a "cloud" that you send all of your data to.
|
||||||
|
|
||||||
We've just begun work on a native [Unity 3D](https://unity3d.com/) plugin to enable your Unity app to communicate over ZeroTier networks. You can check out our BETA [here](osx_unity3d_zt_sdk.md)
|
We've just begun work on a native [Unity 3D](https://unity3d.com/) plugin to enable your Unity app to communicate over ZeroTier networks. You can check out our BETA [here](../integrations/Unity3D)
|
||||||
|
|||||||
104
integrations/Unity3D/README.md
Normal file
104
integrations/Unity3D/README.md
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
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 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.
|
||||||
|
|
||||||
|
Our example project can be found [here]()
|
||||||
|
|
||||||
|
***
|
||||||
|
## API
|
||||||
|
|
||||||
|
- `Join(nwid)`: Joins a ZeroTier virtual network
|
||||||
|
- `Leave(nwid)`: Leaves a ZeroTier virtual network
|
||||||
|
- `Socket(family, type, protocol)`: Creates a ZeroTier-administered socket (returns an `fd`)
|
||||||
|
- `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`
|
||||||
|
- `SendTo(fd, buf, len, flags, addr, port)`: Sends data to a given address
|
||||||
|
- `RecvFrom(fd, ref buf, len, flags, addr, port)`: Receives data
|
||||||
|
- `Close(fd)`: Closes a connection to an endpoint
|
||||||
|
|
||||||
|
***
|
||||||
|
## Adding ZeroTier to your Unity app
|
||||||
|
|
||||||
|
**Step 1: Create virtual ZeroTier [virtual network](https://my.zerotier.com/)**
|
||||||
|
|
||||||
|
**Step 2: Add plugin to Unity project**
|
||||||
|
- Create folder `Assets/Plugins`
|
||||||
|
- Place `ZeroTierSDK_Unity3D_OSX.bundle` in folder
|
||||||
|
|
||||||
|
**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!
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## Listening for a connection
|
||||||
|
```
|
||||||
|
public class Example
|
||||||
|
{
|
||||||
|
public ZeroTierNetworkInterface zt;
|
||||||
|
|
||||||
|
public void example_server()
|
||||||
|
{
|
||||||
|
zt = new ZeroTierNetworkInterface (); // Start interface
|
||||||
|
zt.Join("565799d8f6e1c11a"); // Join your network
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Establishing a connection
|
||||||
|
```
|
||||||
|
public class Example
|
||||||
|
{
|
||||||
|
public ZeroTierNetworkInterface zt;
|
||||||
|
|
||||||
|
public void example_client()
|
||||||
|
{
|
||||||
|
zt = new ZeroTierNetworkInterface ();
|
||||||
|
zt.Join("565799d8f6e1c11a");
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -172,4 +172,5 @@ update_docs:
|
|||||||
cp docs/osx_zt_sdk.md integrations/apple/example_app/OSX/README.md
|
cp docs/osx_zt_sdk.md integrations/apple/example_app/OSX/README.md
|
||||||
cp docs/integrations.md integrations/README.md
|
cp docs/integrations.md integrations/README.md
|
||||||
cp docs/zt_sdk_intro.md README.md
|
cp docs/zt_sdk_intro.md README.md
|
||||||
cp docs/docker_linux_zt_sdk.md integrations/docker/README.md
|
cp docs/docker_linux_zt_sdk.md integrations/docker/README.md
|
||||||
|
cp docs/osx_unity3d_zt_sdk.md integrations/Unity3D/README.md
|
||||||
Reference in New Issue
Block a user