api notes
This commit is contained in:
57
docs/zt_llapi_unity.md
Normal file
57
docs/zt_llapi_unity.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
ZeroTier Unity LLAPI
|
||||||
|
====
|
||||||
|
|
||||||
|
We've tried to replicate the behavior of the Unity3D LLAPI to make using ZeroTier as easy as possible. Everything is handled via a `ZeroTierNetworkInterface` object. You can use it as follows:
|
||||||
|
|
||||||
|
## Creating a host and receiving data
|
||||||
|
|
||||||
|
```
|
||||||
|
public class MyObject
|
||||||
|
{
|
||||||
|
private ZeroTierNetworkInterface zt;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
zt = new ZeroTierNetworkInterface("/Users/Bob/UnityGame/nc_8c493f5bef1747a6");
|
||||||
|
zt.AddHost();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
NetworkEventType ne = zt.Receive();
|
||||||
|
|
||||||
|
switch(ne)
|
||||||
|
{
|
||||||
|
case NetworkEventType.ConnectEvent:
|
||||||
|
Debug.Log("Client connected!");
|
||||||
|
break;
|
||||||
|
case NetworkEventType.DataEvent:
|
||||||
|
Debug.Log("Received data from client!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Connecting to a server and sending a message
|
||||||
|
|
||||||
|
public class MyObject
|
||||||
|
{
|
||||||
|
private ZeroTierNetworkInterface zt;
|
||||||
|
|
||||||
|
void Start()
|
||||||
|
{
|
||||||
|
zt = new ZeroTierNetworkInterface("/Users/Bob/UnityGame/nc_8c493f5bef1747a6");
|
||||||
|
|
||||||
|
byte error;
|
||||||
|
int conn_id = zt.Connect(0, "192.168.0.50", "8080", out error);
|
||||||
|
|
||||||
|
if(conn_id) {
|
||||||
|
zt.Send(conn_id, "Welcome to the machine!", 24, error);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Debug.Log("Unable to connect to host");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,48 +15,6 @@ public class Demo : MonoBehaviour
|
|||||||
|
|
||||||
int server_connection_socket; // The "connection id"
|
int server_connection_socket; // The "connection id"
|
||||||
|
|
||||||
private void zt_sample_network_test_thread()
|
|
||||||
{
|
|
||||||
print("test_network");
|
|
||||||
|
|
||||||
byte error;
|
|
||||||
// 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)" );
|
|
||||||
int error;
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Connect to server
|
|
||||||
int connfd = zt.Connect (0, "172.22.211.245", 8888, out error);
|
|
||||||
print(connfd);
|
|
||||||
|
|
||||||
// Send sample data to server
|
|
||||||
//int bytes_written = zt.Send(connfd,buffer,0, out error);
|
|
||||||
//print(bytes_written);
|
|
||||||
|
|
||||||
//char[] buffer = new char[1024];
|
|
||||||
//buffer = "hello".ToCharArray();
|
|
||||||
//print (buffer);
|
|
||||||
//Stream stream = new MemoryStream(buffer);
|
|
||||||
//BinaryFormatter formatter = new BinaryFormatter();
|
|
||||||
//formatter.Serialize(stream, "HelloServer");
|
|
||||||
//int bufferSize = 1024;
|
|
||||||
|
|
||||||
Debug.Log ("Sending...");
|
|
||||||
int bytes_written = zt.Send(connfd, "hello".ToCharArray(),4, out error);
|
|
||||||
print(bytes_written);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void zt_test_network()
|
|
||||||
{
|
|
||||||
Thread networkTestThread = new Thread(() => { zt_sample_network_test_thread();});
|
|
||||||
networkTestThread.IsBackground = true;
|
|
||||||
networkTestThread.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Demo button methods
|
// Demo button methods
|
||||||
public void Join()
|
public void Join()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,16 +27,16 @@
|
|||||||
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using UnityEngine.Networking;
|
|
||||||
|
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using C5;
|
||||||
|
|
||||||
public class ZeroTierNetworkInterface {
|
public class ZeroTierNetworkInterface {
|
||||||
|
|
||||||
@@ -64,9 +64,6 @@ public class ZeroTierNetworkInterface {
|
|||||||
const string DLL_PATH = "ZeroTierSDK_Unity3D_ANDROID";
|
const string DLL_PATH = "ZeroTierSDK_Unity3D_ANDROID";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ZeroTier background thread
|
|
||||||
private Thread ztThread;
|
|
||||||
|
|
||||||
// Interop structures
|
// Interop structures
|
||||||
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Ansi)]
|
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Ansi)]
|
||||||
public struct sockaddr {
|
public struct sockaddr {
|
||||||
@@ -77,6 +74,11 @@ public class ZeroTierNetworkInterface {
|
|||||||
public string sa_data;
|
public string sa_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ZeroTier background thread
|
||||||
|
private Thread ztThread;
|
||||||
|
|
||||||
|
private ArrayList<int> connections = new ArrayList<int> ();
|
||||||
|
|
||||||
// Virtual network interace config
|
// Virtual network interace config
|
||||||
private int MaxPacketSize;
|
private int MaxPacketSize;
|
||||||
private string rpc_path = "/does/this/work";
|
private string rpc_path = "/does/this/work";
|
||||||
@@ -88,6 +90,7 @@ public class ZeroTierNetworkInterface {
|
|||||||
Debug.Log("Native ZT Plugin: " + str);
|
Debug.Log("Native ZT Plugin: " + str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region
|
||||||
// ZeroTier service / debug initialization
|
// ZeroTier service / debug initialization
|
||||||
[DllImport (DLL_PATH)]
|
[DllImport (DLL_PATH)]
|
||||||
public static extern void SetDebugFunction( IntPtr fp );
|
public static extern void SetDebugFunction( IntPtr fp );
|
||||||
@@ -129,6 +132,7 @@ public class ZeroTierNetworkInterface {
|
|||||||
private static extern bool zt_join_network(string nwid);
|
private static extern bool zt_join_network(string nwid);
|
||||||
[DllImport (DLL_PATH)]
|
[DllImport (DLL_PATH)]
|
||||||
private static extern void zt_leave_network(string nwid);
|
private static extern void zt_leave_network(string nwid);
|
||||||
|
#endregion
|
||||||
|
|
||||||
// Thread which starts the ZeroTier service
|
// Thread which starts the ZeroTier service
|
||||||
// The ZeroTier service may spin off a SOCKS5 proxy server
|
// The ZeroTier service may spin off a SOCKS5 proxy server
|
||||||
@@ -295,6 +299,10 @@ public class ZeroTierNetworkInterface {
|
|||||||
*/
|
*/
|
||||||
public NetworkEventType Receive(out int hostId, out int connectionId, out int channelId, byte[] buffer, int bufferSize, out int receivedSize, out byte error)
|
public NetworkEventType Receive(out int hostId, out int connectionId, out int channelId, byte[] buffer, int bufferSize, out int receivedSize, out byte error)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < connections.Count; i++) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int res;
|
int res;
|
||||||
res = zt_recv (connectionId, buffer, bufferSize);
|
res = zt_recv (connectionId, buffer, bufferSize);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user