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