From 246c85720af3f09aeb3985d36f22c024d45d6497 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Thu, 16 Jun 2016 12:32:37 -0700 Subject: [PATCH] Added platform-specific DLL references in Unity integration. Updated Unity3D_iOS integration project --- .../project.pbxproj | 24 ++++++++ .../UserInterfaceState.xcuserstate | Bin 42204 -> 48504 bytes integrations/Unity3D/Assets/ZeroTier.cs | 54 ++++++++++++------ 3 files changed, 62 insertions(+), 16 deletions(-) diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj index cae31ed..88777be 100644 --- a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj +++ b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj @@ -1382,8 +1382,18 @@ isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../zerotierone", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + ); INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_CFLAGS = ( + "-D__UNITY_3D__", + "-DZT_SDK", + "-DZT_SDK_DEBUG", + ); PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1396,8 +1406,18 @@ isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../zerotierone", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + ); INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_CFLAGS = ( + "-D__UNITY_3D__", + "-DZT_SDK", + "-DZT_SDK_DEBUG", + ); PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1586,6 +1606,7 @@ 7CC0031D1D1216B0003E68DC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 7CC003281D1216E3003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_iOS" */ = { isa = XCConfigurationList; @@ -1594,6 +1615,7 @@ 7CC0032A1D1216E3003E68DC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 7CC003351D1216F8003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */ = { isa = XCConfigurationList; @@ -1602,6 +1624,7 @@ 7CC003371D1216F8003E68DC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; 7CC0033F1D121742003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */ = { isa = XCConfigurationList; @@ -1610,6 +1633,7 @@ 7CC003411D121742003E68DC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/Apple/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate index fb5bbbd86fe6137a6794c1bf86e6cd9a2cbfb84d..0b12d04d4e6af6a4bbfa150b651b8f8b0ab45d90 100644 GIT binary patch delta 24145 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 diff --git a/integrations/Unity3D/Assets/ZeroTier.cs b/integrations/Unity3D/Assets/ZeroTier.cs index c7c776b..3707a27 100644 --- a/integrations/Unity3D/Assets/ZeroTier.cs +++ b/integrations/Unity3D/Assets/ZeroTier.cs @@ -38,9 +38,32 @@ using System.Net; using System.IO; - public class ZeroTierNetworkInterface { + // Apple + #if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX + const string DLL_PATH = "ZeroTierSDK_Unity3D_OSX"; + #endif + + #if UNITY_IOS || UNITY_IPHONE + const string DLL_PATH = "ZeroTierSDK_Unity3D_iOS"; + #endif + + // Windows + #if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN + const string DLL_PATH = "ZeroTierSDK_Unity3D_WIN"; + #endif + + // Linux + #if UNITY_STANDALONE_LINUX + const string DLL_PATH = "ZeroTierSDK_Unity3D_LINUX"; + #endif + + // Android + #if UNITY_ANDROID + const string DLL_PATH = "ZeroTierSDK_Unity3D_ANDROID"; + #endif + // ZeroTier background thread private Thread ztThread; @@ -66,44 +89,43 @@ public class ZeroTierNetworkInterface { } // ZeroTier service / debug initialization - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] public static extern void SetDebugFunction( IntPtr fp ); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern int unity_start_service(string path); // Connection calls - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern int zt_socket(int family, int type, int protocol); - - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] unsafe private static extern int zt_bind(int sockfd, System.IntPtr addr, int addrlen); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] unsafe private static extern int zt_connect(int sockfd, System.IntPtr addr, int addrlen); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern int zt_accept(int sockfd); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern int zt_listen(int sockfd, int backlog); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern int zt_close(int sockfd); // RX / TX - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] unsafe private static extern int zt_recv(int sockfd, System.IntPtr buf, int len); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] unsafe private static extern int zt_send(int sockfd, System.IntPtr buf, int len); // ZT Thread controls - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern bool zt_is_running(); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern void zt_terminate(); // ZT Network controls - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern bool zt_join_network(string nwid); - [DllImport ("ZeroTierSDK_Unity3D_OSX")] + [DllImport (DLL_PATH)] private static extern void zt_leave_network(string nwid); // Thread which starts the ZeroTier service