11using System . Collections . Generic ;
2+ using System . Threading . Tasks ;
23using TMPro ;
34using UnityEngine ;
45using UnityEngine . Serialization ;
56using UnityEngine . UI ;
67using UnityEngine . CrashReportHandler ;
78using UnityEngine . EventSystems ;
9+ using UnityEngine . Networking ;
10+ using UnityEngine . XR . Management ;
811
912public class JNIStorage : MonoBehaviour
1013{
1114 public static AndroidJavaClass apiClass ;
1215 public static AndroidJavaObject accountObj ;
1316 public static AndroidJavaObject activity ;
1417 public static AndroidJavaObject instancesObj ;
18+ public static ConnectionStatus connectionStatus = ConnectionStatus . Checking ;
1519 public APIHandler apiHandler ;
1620 public static JNIStorage instance ;
1721 public List < string > supportedVersions ;
@@ -21,6 +25,41 @@ public class JNIStorage : MonoBehaviour
2125 public GameObject instancePrefab ;
2226 public GameObject instanceArray ;
2327
28+ public enum ConnectionStatus
29+ {
30+ Checking ,
31+ Connected ,
32+ Disconnected
33+ }
34+
35+ public static bool CheckConnectionAndThrow ( )
36+ {
37+ switch ( connectionStatus )
38+ {
39+ case ConnectionStatus . Checking :
40+ instance . uiHandler . SetAndShowError ( "Have not finished checked Microsoft connection, please wait a moment." ) ;
41+ return false ;
42+ case ConnectionStatus . Disconnected :
43+ instance . uiHandler . SetAndShowError ( "No internet connection. Can't complete operation." ) ;
44+ return false ;
45+ case ConnectionStatus . Connected :
46+ default :
47+ return true ;
48+ }
49+ }
50+
51+ static void CloseXR ( )
52+ {
53+ XRGeneralSettings . Instance . Manager . activeLoader . Stop ( ) ;
54+ XRGeneralSettings . Instance . Manager . activeLoader . Deinitialize ( ) ;
55+ }
56+
57+ [ RuntimeInitializeOnLoadMethod ]
58+ static void RunOnStart ( )
59+ {
60+ Application . unloading += CloseXR ;
61+ }
62+
2463 private void Start ( )
2564 {
2665 CrashReportHandler . enableCaptureExceptions = false ;
@@ -37,6 +76,8 @@ private void Start()
3776 configHandler . LoadConfig ( ) ;
3877 UpdateInstances ( ) ;
3978 apiClass . SetStatic ( "model" , OpenXRFeatureSystemInfo . GetHeadsetName ( ) ) ;
79+
80+ CheckConnection ( ) ;
4081 }
4182
4283 private void FillSupportedVersions ( string [ ] supportedVersionsArray )
@@ -81,4 +122,21 @@ public void UpdateInstances()
81122 FillSupportedVersions ( supportedVersionsArray ) ;
82123 uiHandler . UpdateDropdowns ( true , supportedVersions ) ;
83124 }
125+
126+ public static async void CheckConnection ( )
127+ {
128+ UnityWebRequest request = UnityWebRequest . Get ( "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" ) ;
129+ request . SendWebRequest ( ) ;
130+
131+ while ( ! request . isDone )
132+ await Task . Delay ( 16 ) ;
133+
134+ if ( request . result != UnityWebRequest . Result . Success )
135+ {
136+ Debug . Log ( "Unable to contact Mojang servers" + request . error ) ;
137+ connectionStatus = ConnectionStatus . Disconnected ;
138+ }
139+
140+ connectionStatus = ConnectionStatus . Connected ;
141+ }
84142}
0 commit comments