示例#1
0
        private async Task <byte[]> ActionChangeTransform(NameValueCollection queryString)
        {
            var vector = new Vector3(
                ParseStringToFloat(queryString.Get("x")),
                ParseStringToFloat(queryString.Get("y")),
                ParseStringToFloat(queryString.Get("z")));

            await TaskSwitcher.SwitchToMainThread();

            var changeGameObject = GetGameObjectById(queryString.Get("id"));

            var fieldChange = queryString.Get("transformType");

            switch (fieldChange)
            {
            case "position":
                changeGameObject.transform.position = vector;
                break;

            case "rotation":
                changeGameObject.transform.rotation = Quaternion.Euler(vector);
                break;

            case "scale":
                changeGameObject.transform.localScale = vector;
                break;
            }

            return(ResponseTools.CreateOkResponse());
        }
示例#2
0
        public async Task <Response> CreateResponse(string pathWithoutParams)
        {
            Response response = null;

            if (pathWithoutParams.StartsWith("/json/hierarchy"))
            {
                await TaskSwitcher.SwitchToMainThread();

                _sceneHierarchyData = HierarchyTools.GetHierarchyActiveScene();
                response            = new HierarchyResponse(_sceneHierarchyData);
            }
            else if (pathWithoutParams.StartsWith("/action"))
            {
                response = new ActionResponse();
            }
            else if (pathWithoutParams.StartsWith("/gameObjectInfo"))
            {
                response = new GameObjectInfoResponse(_sceneHierarchyData);
            }
            else
            {
                response = new FileGetResponse(_resourceFileStorage);
            }

            response?.SetInfo(_context);
            return(response);
        }
        private async Task <byte[]> ActionChangeTransform(NameValueCollection queryString)
        {
            var vector = new Vector3(
                ParseFloatString(queryString.Get("x")),
                ParseFloatString(queryString.Get("y")),
                ParseFloatString(queryString.Get("z")));

            await TaskSwitcher.SwitchToMainThread();

            var idGameObject = int.Parse(queryString.Get("id"));
            var hierarchy    = HierarchyTools.GetHierarchyActiveScene();

            hierarchy.gameobjectsDictonary.TryGetValue(idGameObject, out var changeGameObject);

            var fieldChange = queryString.Get("transformType");

            switch (fieldChange)
            {
            case "position":
                changeGameObject.transform.position = vector;
                break;

            case "rotation":
                changeGameObject.transform.rotation = Quaternion.Euler(vector);
                break;

            case "scale":
                changeGameObject.transform.localScale = vector;
                break;
            }

            return(ResponseTools.CreateOkResponse());
        }
示例#4
0
        public override async Task <ResponseData> MakeResponseData()
        {
            var idString = context.HttpListenerContext.Request.QueryString.Get("id");

            if (string.IsNullOrEmpty(idString))
            {
                throw new Exception("Dont find tag \"id\" in query string");
            }

            var idInt = int.Parse(idString);

            byte[] finalArray = new byte[0];

            if (_sceneHierarchyData == null)
            {
                _sceneHierarchyData = HierarchyTools.GetHierarchyActiveScene();
            }

            if (_sceneHierarchyData.gameobjectsDictonary.TryGetValue(idInt, out GameObject go))
            {
                await TaskSwitcher.SwitchToMainThread();

                Vector3 position = go.transform.position;
                Vector3 rotation = go.transform.rotation.eulerAngles;
                Vector3 scale    = go.transform.localScale;


                GameObjectInfo objectInfo = new GameObjectInfo()
                {
                    activeSelf = go.activeSelf,
                    name       = go.name,
                    position   = position,
                    rotation   = rotation,
                    scale      = scale,
                };

                var json = JsonConvert.SerializeObject(objectInfo, Formatting.Indented, new JsonSerializerSettings()
                {
                    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                });
                finalArray = ResponseTools.ConvertStringToResponseData(json);

                if (LogToConsoleConfig.IsLogToConsole)
                {
                    Debug.Log(json);
                }
            }
            else
            {
                throw new Exception("Dont find id object " + idInt);
            }

            return(new ResponseData()
            {
                data = finalArray,
            });
        }
示例#5
0
        private async Task <byte[]> ActionChangeEnableGameObject(NameValueCollection queryString)
        {
            await TaskSwitcher.SwitchToMainThread();

            bool activeGameObject = ParseStringToBool(queryString.Get("activeSelf"));
            var  changeGameObject = GetGameObjectById(queryString.Get("id"));

            changeGameObject.SetActive(activeGameObject);

            return(ResponseTools.CreateOkResponse());
        }
示例#6
0
        private async Task DeleteGameObjectById(int idDeleteObject)
        {
            await TaskSwitcher.SwitchToMainThread();

            var hierarchy = HierarchyTools.GetHierarchyActiveScene();

            hierarchy.gameobjectsDictonary.TryGetValue(idDeleteObject, out var deleteObject);
            if (deleteObject != null)
            {
                UnityEngine.Object.DestroyImmediate(deleteObject.gameObject);
            }
        }
示例#7
0
        public static async Task <FileReadResult> ReadFileFromStreamingAssetsWithPlatform(string fileName)
        {
            await TaskSwitcher.SwitchToMainThread();

            var finalPath      = GetPlatformPathToStreamingAssets(fileName);
            var fileReadResult = new FileReadResult();

            UnityWebRequest loadFile = null;

            try
            {
                loadFile = UnityWebRequest.Get(finalPath);
                var asyncOperation = loadFile.SendWebRequest();
                while (!asyncOperation.isDone)
                {
                    await Task.Delay(25);
                }
            }
            catch (Exception)
            {
                fileReadResult.IsError = true;
                Debug.LogError($"UnityWebRequest {fileName}");
            }

            if (loadFile != null && loadFile.isDone)
            {
                if (loadFile.isNetworkError || loadFile.isHttpError)
                {
                    fileReadResult = new FileReadResult()
                    {
                        error   = loadFile.error,
                        IsError = true,
                    };
                }
                else
                {
                    fileReadResult = new FileReadResult()
                    {
                        text = loadFile.downloadHandler.text,
                        data = loadFile.downloadHandler.data,
                    };
                }
            }

            return(fileReadResult);
        }
示例#8
0
        private async void WorkHandleAsync(HttpServerContext listenerContext)
        {
            await TaskSwitcher.SwitchToThreadPool();

            if (_onResponseHandler != null)
            {
                var returnHandler = await _onResponseHandler(listenerContext);

                HttpListenerResponse response = listenerContext.GetResponse();
                byte[] buffer = returnHandler.data;
                response.ContentLength64 = buffer.Length;
                using (System.IO.Stream output = response.OutputStream)
                {
                    await output.WriteAsync(buffer, 0, buffer.Length);

                    output.Close();
                }
            }
        }
示例#9
0
        private async Task MoveChildren(int idMove, int idTarget)
        {
            await TaskSwitcher.SwitchToMainThread();

            var hierarchy = HierarchyTools.GetHierarchyActiveScene();

            hierarchy.gameobjectsDictonary.TryGetValue(idMove, out var moveObject);
            hierarchy.gameobjectsDictonary.TryGetValue(idTarget, out var targetObject);


            if (moveObject != null)
            {
                if (targetObject != null)
                {
                    moveObject.transform.parent = targetObject.transform;
                }
                else
                {
                    moveObject.transform.parent = null;
                }
            }
        }
示例#10
0
        private async void WorkThreadAsync()
        {
            await TaskSwitcher.SwitchToThreadPool();

            try
            {
                _listener = new HttpListener();
                _listener.Prefixes.Add("http://*:" + _port + "/");
                _listener.Start();

                while (_listener != null && _listener.IsListening)
                {
                    HttpListenerContext context = await _listener.GetContextAsync();

                    HttpServerContext serverContext = new HttpServerContext(context);
                    WorkHandleAsync(serverContext);
                }
            }
            catch (Exception ex)
            {
                //Debug.LogException(ex);
            }
        }