public ITask Start(float timeout = -1f) { _state = TaskState.Started; _startTime = Time.realtimeSinceStartup; _coroutineFactory.StartCoroutine(Wait); return(this); }
public ITask <T> LoadResource <T> (string name) where T : Object { ResourceLoader <T> loader = new ResourceLoader <T>(GetResource <T>(name)); _owner.StartCoroutine(() => Resulter(loader)); return(loader); }
public ITask Start(float timeout = -1f) { _timeout = timeout; _startTime = Time.realtimeSinceStartup; if (_timeout > 0) { _deadLine = _startTime + _timeout; } _coroutineFactory.StartCoroutine(() => Controller()); return(this); }
public IPromise <EventStateData> RegisterToEvent(string eventID) { var promise = new Promise <EventStateData>(); Action <ConnectionHandler.RequestResult, string> HandleRegisterToEventResponse = (ConnectionHandler.RequestResult result, string response) => { logger.Log(Tag, "HandleRegisterToEventResponse (result=" + result + ")\nresponse=" + response); if (result != ConnectionHandler.RequestResult.Ok) { modelSyncService.HandleErrorResponse(result, response); promise.Reject(new Exception(response)); return; } // Parse the response and save the event to db JsonData data = JsonMapper.ToObject(response); string id = data ["id"].ToString(); Debug.Log("Saving sharedItem: table=" + TableName + " id=" + id + " data=" + data.ToJson().SSubstring(200)); gameDB.SaveSharedState(TableName, id, data.ToJson()); syncSharedStateSignal.Dispatch(new List <string> { TableName }); EventStateData eventStateData = eventStateModel.GetEvent(id); if (eventStateData == null) { logger.LogError(Tag, "HandleRegisterToEventResponse : Could not load new registered event"); promise.Reject(new Exception("Could not load event")); return; } promise.Resolve(eventStateData); }; _coroutineFactory.StartCoroutine(() => connectionHandler.SendRequest(ConnectionHandler.RequestType.EventSystemRegistration, HandleRegisterToEventResponse, eventID, null)); return(promise); }
public bool HasInternetConnection() { if (!_isRunningNetworkCheck) { _isRunningNetworkCheck = true; _coroutineFactory.StartCoroutine(() => TestCoro()); } if (Debug.isDebugBuild && _fakeNoNetworkConnection) { return(false); } return(_isConnected); }
IEnumerator RemoteValidationCoro(InAppPurchasableItem item, Promise <bool> promise) { var data = new ReceiptValidationData(); var receiptJson = JsonMapper.ToObject(item.receipt); data.receipt = receiptJson["Payload"].ToString(); data.appBundleId = appInfoService.BundleIdentifier; data.iapBundleId = item.id; #if UNITY_ANDROID data.receipt = Convert.ToBase64String(Encoding.UTF8.GetBytes(data.receipt)); data.platform = "Android"; #elif UNITY_IPHONE data.platform = "iOS"; #endif data.nonce = DateTime.Now.ToString(); string validationData = JsonMapper.ToJson(data); Action <ConnectionHandler.RequestResult, string> receiptValidationResponse = (result, responseData) => { logger.Log(Tag, "HandleLoginResponse (result=" + result + ")\nresponse=" + responseData.SSubstring(300)); if (result == ConnectionHandler.RequestResult.Ok) { ReceiptValidationResponse response = JsonMapper.ToObject <ReceiptValidationResponse>(responseData); string encryptedNonce = Sha256(data.nonce); if (response.nonce.Equals(encryptedNonce)) { if (response.verified) { logger.Log(Tag, "Validation successful"); analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>() { { "Validation", "successful" } }, false); promise.Resolve(true); } else { logger.LogError(Tag, "Validation failed - not verified"); analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>() { { "Validation", "failed" }, { "Reason", "Not verified" } }, false); promise.Resolve(false); } } else { logger.LogError(Tag, "Validation failed - non matching nonce"); analyticsService.LogEvent(AnalyticsTargets.ANALYTICS_TARGET_FLURRY, Tag, new Dictionary <string, object>() { { "Validation", "failed" }, { "Reason", "Non matching nonce" } }, false); promise.Resolve(false); } } else { logger.LogError(Tag, "Purchase Validation Failure"); } }; yield return(_coroutineFactory.StartCoroutine(() => _connectionHandler.SendRequest(ConnectionHandler.RequestType.ReceiptValidation, receiptValidationResponse, validationData))); }
protected IEnumerator EvaluateRequestStatus(WWW www) { if (www == null) { Debug.Log("www is null. Handling as CantReachServer."); _requestResult = RequestResult.CantReachServer; _requestData = ""; yield break; } string statusHeaderKey = "STATUS"; string ttStatusHeaderKey = "TTSTATUS"; switch (Application.platform) { case RuntimePlatform.Android: statusHeaderKey = "NULL"; break; case RuntimePlatform.OSXEditor: statusHeaderKey = "STATUS"; break; case RuntimePlatform.OSXPlayer: case RuntimePlatform.IPhonePlayer: statusHeaderKey = "STATUS"; break; default: statusHeaderKey = ""; break; } if (www.error != null) { if (www.isDone && www.bytesDownloaded == 0) { yield return(_coroutineFactory.StartCoroutine(() => CheckInternetConnection())); _requestData = www.error; if (!_internetAvailable) { Debug.Log("Request result - no internet"); _requestResult = RequestResult.NoInternet; yield break; } Debug.Log("Request result - can't reach server"); _requestResult = RequestResult.CantReachServer; yield break; } //Debug.Log ("WWW error = [" + www.error + "]\nText=" + www.text); _requestResult = RequestResult.InternalServerError; yield break; } _requestData = www.text; //Debug.Log ("WWW isDone = " + www.isDone + " bytesDownloaded=" + www.bytesDownloaded); //Debug.Log ("Checking for status key = " + statusHeaderKey + "\ntext=" + (www.text == null ? "null" : www.text) // + "\nfielderrorvalue=" + (www.error == null ? "null" : www.error) ); if (www.text.Contains("{\"error\":{")) { _requestResult = RequestResult.OkWithErrorInside; yield break; } if (www.responseHeaders == null || www.responseHeaders.Count == 0) { Debug.Log("Response has no headers, no error field, no server error item in message (can't identify status) - handling as CantReachServer"); _requestResult = RequestResult.CantReachServer; yield break; } if (www.responseHeaders.ContainsKey(ttStatusHeaderKey)) { _requestResult = (RequestResult)(Int32.Parse(www.responseHeaders[ttStatusHeaderKey])); if (_requestResult == RequestResult.Continue) { _requestResult = RequestResult.Ok; } yield break; } string status = ""; if ((statusHeaderKey != "") && (www.responseHeaders.ContainsKey(statusHeaderKey))) { status = www.responseHeaders[statusHeaderKey]; if (status == "HTTP/1.1 100 Continue" || status == "HTTP/1.1 200 OK") { _requestResult = RequestResult.Ok; } else if (status == "HTTP/1.1 301 Moved Permanently") { _requestResult = RequestResult.MovedPermanently; } else if (status == "HTTP/1.1 400 Bad Request") { _requestResult = RequestResult.BadRequest; } else if (status == "HTTP/1.1 401 Unauthorized") { _requestResult = RequestResult.UnAuthorized; } else if (status == "HTTP/1.1 404 Not Found") { _requestResult = RequestResult.NotFound; } else if (status == "HTTP/1.1 500 Internal ServerError") { _requestResult = RequestResult.InternalServerError; } else if (status == "HTTP/1.1 500 Internal Server Error") { _requestResult = RequestResult.InternalServerError; } else { Debug.Log("Got response status: \"" + status + "\" (handling as internal server error)"); _requestResult = RequestResult.InternalServerError; } yield break; } else { if (www.responseHeaders.ContainsValue("HTTP/1.1 100 Continue") || www.responseHeaders.ContainsValue("HTTP/1.1 200 OK")) { _requestResult = RequestResult.Ok; } else if (www.responseHeaders.ContainsValue("HTTP/1.1 301 Moved Permanently")) { _requestResult = RequestResult.MovedPermanently; } else if (www.responseHeaders.ContainsValue("HTTP/1.1 400 Bad Request")) { _requestResult = RequestResult.BadRequest; } else if (www.responseHeaders.ContainsValue("HTTP/1.1 401 Unauthorized")) { _requestResult = RequestResult.UnAuthorized; } else if (www.responseHeaders.ContainsValue("HTTP/1.1 404 Not Found")) { _requestResult = RequestResult.NotFound; } else if (www.responseHeaders.ContainsValue("HTTP/1.1 500 Internal ServerError")) { _requestResult = RequestResult.InternalServerError; } else if (www.responseHeaders.ContainsValue("HTTP/1.1 500 Internal Server Error")) { _requestResult = RequestResult.InternalServerError; } else { Debug.Log("Got response status: \"" + status + "\" (handling as internal server error)"); _requestResult = RequestResult.InternalServerError; } yield break; } }
public IPromise TryConnectToServer() { if (!initialized) { promise.Dispatch(); return(promise); } // Avoid running model sync when uploading gld if (IsUploadScene()) { logger.Log(Tag, "Running in upload mode - skipping connection with the server..."); promise.Dispatch(); return(promise); } if (Application.isEditor && !GsdkSettingsData.Instance.IsConnectionEnabled) { logger.Log(Tag, "Editor Connection is disabled in gsdk settings - will not fetch GLD from the server"); promise.Dispatch(); return(promise); } syncType = SyncType.OnDemand; //Load configs Data.DataElement connConfig = GameApplication.GetConfiguration("connection"); string sType = (connConfig.IsNull || !connConfig.ContainsKey(SYNC_TYPE_KEY)) ? "Continuous" : (string)connConfig[SYNC_TYPE_KEY]; syncLoopLength = (connConfig.IsNull || !connConfig.ContainsKey(SYNC_LOOP_KEY)) ? syncLoopLength : (float)connConfig[SYNC_LOOP_KEY]; bool sEnabled = (connConfig.IsNull || !connConfig.ContainsKey(SYNC_ENABLED_KEY)) ? true : (bool)connConfig[SYNC_ENABLED_KEY]; if (!sEnabled) { _dataSyncEnabled = false; } try { syncType = (SyncType)Enum.Parse(typeof(SyncType), sType, true); } catch (Exception ex) { logger.LogError(Tag, string.Format("Wrong configuraton in connection config file, the {0} key is not of the type SyncType \n Message received:{1}", SYNC_TYPE_KEY, ex.Message)); } if (syncType != SyncType.Off) { _coroutineFactory.StartCoroutine(() => WaitForState(SyncLoopState.Connected)); } switch (syncType) { case SyncType.OnDemand: _coroutineFactory.StartCoroutine(() => StartOnDemandMode(false)); break; case SyncType.Continuous: _coroutineFactory.StartCoroutine(AsyncLoop); break; case SyncType.Off: promise.Dispatch(); break; default: break; } return(promise); }
public void Init(ICoroutineFactory coroutineFactory) { _coroutineFactory = coroutineFactory; _coroutineFactory.StartCoroutine(() => TestCoro()); }