IEnumerator Load()
    {
        var sessionSubsystem = (ARKitSessionSubsystem)m_ARSession.subsystem;

        if (sessionSubsystem == null)
        {
            Log("No session subsystem available. Could not load.");
            yield break;
        }

        var DlUrl = "http://" + IP_InputField.text + ":" + _httpPort.ToString() + "/" + _GetDirectory;

        UnityWebRequest www = new UnityWebRequest(DlUrl);

        www.downloadHandler = new DownloadHandlerBuffer();
        yield return(www.SendWebRequest());

        byte[] worldMap_byte;
        var    allBytes = new List <byte>();


        if (www.isNetworkError || www.isHttpError)
        {
            Debug.Log(www.error);
        }
        else
        {
            // または、バイナリデータで結果を表示
            worldMap_byte = www.downloadHandler.data;


            Debug.Log("hash" + _GetHashedTextString(worldMap_byte));


            allBytes.AddRange(worldMap_byte);

            var worldMap_nativearray = new NativeArray <byte>(allBytes.Count, Allocator.Temp);
            worldMap_nativearray.CopyFrom(allBytes.ToArray());
            ARWorldMap worldMap;
            if (ARWorldMap.TryDeserialize(worldMap_nativearray, out worldMap))
            {
                worldMap_nativearray.Dispose();
            }

            if (worldMap.valid)
            {
                Log("Deserialized successfully.");
            }
            else
            {
                Log("Data is not a valid ARWorldMap.");
                yield break;
            }

            Log("Apply ARWorldMap to current session.");


            sessionSubsystem.ApplyWorldMap(worldMap);
        }
    }
    IEnumerator Load()
    {
        var sessionSubsystem = (ARKitSessionSubsystem)m_ARSession.subsystem;

        if (sessionSubsystem == null)
        {
            Log("No session subsystem available. Could not load.");
            yield break;
        }

        var file = File.Open(path, FileMode.Open);

        if (file == null)
        {
            Log(string.Format("File {0} does not exist.", path));
            yield break;
        }

        Log(string.Format("Reading {0}...", path));

        int bytesPerFrame  = 1024 * 10;
        var bytesRemaining = file.Length;
        var binaryReader   = new BinaryReader(file);
        var allBytes       = new List <byte>();

        while (bytesRemaining > 0)
        {
            var bytes = binaryReader.ReadBytes(bytesPerFrame);
            allBytes.AddRange(bytes);
            bytesRemaining -= bytesPerFrame;
            yield return(null);
        }

        var data = new NativeArray <byte>(allBytes.Count, Allocator.Temp);

        data.CopyFrom(allBytes.ToArray());

        Log(string.Format("Deserializing to ARWorldMap...", path));
        ARWorldMap worldMap;

        if (ARWorldMap.TryDeserialize(data, out worldMap))
        {
            data.Dispose();
        }

        if (worldMap.valid)
        {
            Log("Deserialized successfully.");
        }
        else
        {
            Debug.LogError("Data is not a valid ARWorldMap.");
            yield break;
        }

        Log("Apply ARWorldMap to current session.");
        sessionSubsystem.ApplyWorldMap(worldMap);
    }
    public void OnMessageReceived(byte[] msg)
    {
        try
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream    serializationStream = new MemoryStream(msg, 0, msg.Length, false, false);
            //serializationStream.Write(msg, 0, msg.Length);
            object obj = bf.Deserialize(serializationStream);
            if (obj != null)
            {
                if (obj is AppState)
                {
                    AppState appState = obj as AppState;
                    Debug.Log("AppState received.");
                }
            }
            return;
        }
        catch (System.Exception)
        {
        }

        //string s = "";
        //foreach (var b in msg)
        //{
        //    s = $"{s}, {b}";
        //}
        //Debug.Log(s);
        SharedARUIManager.sharedARStatusMessage = $"MSG RECEIVED LENGTH: {msg.Length}";
        //ARWorldMap
        if (ARWorldMapController != null)
        {
            NativeArray <byte> nativeArray = new NativeArray <byte>(msg, Allocator.Persistent);
            Debug.Log("Trying to deserialize ARWM");
            bool success = ARWorldMap.TryDeserialize(nativeArray, out ARWorldMap worldMap);
            nativeArray.Dispose();
            if (success)
            {
                Debug.Log("ARWM Deserialized");
                if (worldMap.valid)
                {
                    Debug.Log("ARWM Valid");
                    ARWorldMapController.LoadARWorldMap(worldMap);
                    SharedARUIManager.sharedARStatusMessage = "SUCESS";
                }
            }
        }
    }