You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2.7 KiB

ZeroTier Unity LLAPI

We've tried to replicate the behavior of the Unity3D LLAPI to make using ZeroTier as easy as possible. All you need to do is add the ZeroTierSDK_Unity3D_YOUR-PLATFORM library to the assets/plugins folder of your project and start using the ZeroTierNetworkInterface:

To start things off, go check out ZeroTierSockets_Demo.cs. Here are some examples of how to use the ZeroTierNetworkInterface:

Using ZeroTier Sockets API

Server example

Thread connectThread = new Thread(() => { 
	// Create ZeroTier-administered socket
	int sock = zt.Socket ((int)AddressFamily.InterNetwork, 
						(int)SocketType.Stream, 
						(int)ProtocolType.Unspecified);
	// Bind()
	zt.Bind(sock, "0.0.0.0", 8000);

	// Listen()
	zt.Listen(sock, 1);

	// Accept() loop
	int accept_sock = -1;
	while(accept_res < 0)
	{
		accept_sock = zt.Accept(sock);
	}

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

Client example

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

Using the ZeroTier Low-level API (LLAPI)

Creating a host and receiving data

public class MyObject
{
	private ZeroTierNetworkInterface zt;

	void Start()
	{
		zt = new ZeroTierNetworkInterface("/Users/Bob/UnityGame/nc_8c493f5bef1747a6");
		zt.AddHost(8888);
	}

	void Update()
	{
		int hostId;
		int connectionId;
		int channelId;
		byte[] buffer;
		int bufferSize;
		int receivedSize;
		byte error;
		
		NetworkEventType ne = zt.Receive(out hostId, out connectionId, out channelId, buffer, bufferSize, out receivedSize, out error);

		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");
		}

	}
}