Exemplo n.º 1
0
 public ITask Start(float timeout = -1f)
 {
     _state     = TaskState.Started;
     _startTime = Time.realtimeSinceStartup;
     _coroutineFactory.StartCoroutine(Wait);
     return(this);
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 5
0
        public bool HasInternetConnection()
        {
            if (!_isRunningNetworkCheck)
            {
                _isRunningNetworkCheck = true;
                _coroutineFactory.StartCoroutine(() => TestCoro());
            }

            if (Debug.isDebugBuild && _fakeNoNetworkConnection)
            {
                return(false);
            }

            return(_isConnected);
        }
Exemplo n.º 6
0
        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;
            }
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        public void Init(ICoroutineFactory coroutineFactory)
        {
            _coroutineFactory = coroutineFactory;

            _coroutineFactory.StartCoroutine(() => TestCoro());
        }