У меня проблемы с пониманием того, что происходит. У меня есть этот скрипт, который загружает файл на сервер. Это работает, но работает несколько раз, и это не хорошо. Я пытаюсь сделать 2 вещи:
- отправить запрос, когда пользователь нажимает кнопку
- Получить ответ от сервера. Если положительный, тогда загрузите EndScene. Если значение отрицательное, загрузите ManualUpdateScene
Проблемы:
- a) пользователь нажимает кнопку, запрос отправляется более одного раза
- b) Я не понимаю, как вернуть мой класс Controller, если ответ сервера был положительным или отрицательным (так что я могу загрузить следующую сцену).
В этом коде ниже я делать ужасные хаки, чтобы предотвратить выполнение запроса дважды, но это означает, что я не могу получить ответ сервера. Какой правильный способ справиться с этим? Спасибо
Вот мой код
using System.Collections;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
public class DataUploader: MonoBehaviour
{
public bool isUploaded;
public bool isError;
public void Start()
{
isUploaded = isError = false;
}
public void UploadFile()
{
StartCoroutine(Upload());
}
IEnumerator Upload()
{
Debug.Log("UPLOADING...");
string path = Application.dataPath + "/data_" + StaticData.GetDeviceId() + ".csv";
WWWForm form = new WWWForm();
UnityWebRequest dataFile = UnityWebRequest.Get(path);
yield return dataFile.SendWebRequest();
form.AddBinaryData("dataFile", dataFile.downloadHandler.data, Path.GetFileName(path));
UnityWebRequest req = UnityWebRequest.Post("myserverurl/getFile.php", form);
yield return req.SendWebRequest();
Debug.Log("SERVER: " + req.downloadHandler.text);
if (req.isHttpError || req.isNetworkError || !(req.downloadHandler.text.Contains("FILE OK")))
isError = true;// Debug.Log(req.error);
else
isUploaded = true;
yield break;
}
}
и вот откуда я его называю
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Send_Email
{
public class Controller : MonoBehaviour
{
public InputManager button;
public DataUploader dataUploader;
private bool flag;
private void Start()
{
// write results to file
DataWriter.Initialize();
DataWriter.WriteFile(StaticData.GetData());
flag = false;
}
void Update()
{
if (button.IsPressed())
{
if (!flag)
{
flag = true;
if (!dataUploader.isUploaded)
dataUploader.UploadFile(); //upload the file
}
else
LoadScene();
}
if(dataUploader.isError){
SceneManager.LoadScene("ManualUpdateScene");
}
}
public void LoadScene()
{
SceneManager.LoadScene("EndScene");
}
}
}