api notes

This commit is contained in:
Joseph Henry
2016-06-17 15:55:02 -07:00
parent 53e71434f8
commit 2ad5f963b9
3 changed files with 71 additions and 48 deletions

57
docs/zt_llapi_unity.md Normal file
View 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");
}
}
}

View File

@@ -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()
{ {

View File

@@ -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);