/// <summary> /// Загрузка уровня с сервера или из кэша, если уже был скачан. /// </summary> /// <param name="id">Индекс уровня из <see cref="Summary"></param> public static IEnumerator GetLevelJson(int id, HandleLevelJson callback, HandleApiError errorHandler = null) { if (levelsJsons.ContainsKey(id)) { callback(levelsJsons[id]); } else { Debug.Log($"Loading level {id}"); activeRequests++; yield return(Net.Get(FormUrl($"/l/{id}/json"), (string text) => { activeRequests--; levelsJsons[id] = text; callback(levelsJsons[id]); // TODO: Error handling }, (long code) => { activeRequests--; var errmsg = $"Failed to load level {id}: error {code}"; Debug.LogError(errmsg); onError.Invoke(errmsg); if (errorHandler != null) { errorHandler($"Network error {code}"); } } )); } }
public static IEnumerator UploadLevel(string author, string json, HandleLevelId callback, HandleApiError errorHandler) { activeRequests++; yield return(Net.Post(FormUrl($"/u/{author}/upload"), json, (string text) => { activeRequests--; var uploadInfo = JsonUtility.FromJson <UploadInfo>(text); if (uploadInfo.success) { callback(uploadInfo.levelId); } else { var err = JsonUtility.FromJson <Error>(text); var errmsg = $"api error: {err.error}"; Debug.LogError(errmsg); onError.Invoke(errmsg); if (errorHandler != null) { errorHandler(err.error); } } }, (long code ) => { activeRequests--; var errmsg = $"Failed to upload level: error {code}"; Debug.LogError(errmsg); onError.Invoke(errmsg); if (errorHandler != null) { errorHandler($"Network error {code}"); } })); }