Beispiel #1
0
        private void HandleLoginResponse(ConnectionHandler.RequestResult result, string response)
        {
            if (_timedOut)
            {
                logger.LogWarning(Tag, "HandleGetdataResponse - ModelSyncCompleted timed out");
                return;
            }

            logger.Log(Tag, "HandleLoginResponse (result=" + result + ")\nresponse=" + response.SSubstring(300));
            if (result != ConnectionHandler.RequestResult.Ok)
            {
                HandleErrorResponse(result, response);
                return;
            }

            JsonData responseJsonObject = JsonMapper.ToObject(response);

            string playerId = ((long)responseJsonObject [keyPlayerId]).ToString();

            logger.Log(Tag, "Got playerId:" + playerId);

            bool isNewPlayer = TTPlayerPrefs.GetValue(keyPlayerId, "0") == "0";

            TTPlayerPrefs.SetValue(keyPlayerId, playerId);

            //_gameDB.SaveSyncInfo (keyPlayerId, ((long)responseJsonObject [keyPlayerId]).ToString ());
            logger.Log(Tag, "Got token:" + (string)responseJsonObject [keyToken]);
            _gameDB.SaveSyncInfo(keyToken, (string)responseJsonObject [keyToken]);

            _syncState = SyncLoopState.GettingSync;
        }
Beispiel #2
0
        private void HandleSyncStateResponse(ConnectionHandler.RequestResult result, string response)
        {
            if (CheckSyncTimeout())
            {
                return;
            }

            if (result != ConnectionHandler.RequestResult.Ok)
            {
                HandleErrorResponse(result, response);
                return;
            }

            ICollection <string> affectedSharedStateTables = new List <string>();
            JsonData             responseJsonOnject        = JsonMapper.ToObject(response);

            if (responseJsonOnject.Keys.Contains(keyLastStateUpdate))
            {
                logger.Log(Tag, "Got lastStateUpdate:" + (string)responseJsonOnject [keyLastStateUpdate]);
                _gameDB.SaveSyncInfo(keyLastStateUpdate, (string)responseJsonOnject [keyLastStateUpdate]);
            }
            if (responseJsonOnject.Keys.Contains(keyLastSharedStateUpdate))
            {
                logger.Log(Tag, "Got lastSharedStateUpdate:" + (string)responseJsonOnject [keyLastSharedStateUpdate]);
                _gameDB.SaveSyncInfo(keyLastSharedStateUpdate, (string)responseJsonOnject [keyLastSharedStateUpdate]);
            }
            if (responseJsonOnject.Keys.Contains(keyPlayerCreateDate))
            {
                logger.Log(Tag, "Got createdDate:" + (string)responseJsonOnject [keyPlayerCreateDate]);
                _gameDB.SaveSyncInfo(keyPlayerCreateDate, (string)responseJsonOnject [keyPlayerCreateDate]);
            }
            if (responseJsonOnject.Keys.Contains(keyMaxProgress))
            {
                logger.Log(Tag, "Got MaxProgress:" + (string)responseJsonOnject [keyMaxProgress]);
                _gameDB.SaveSyncInfo(keyMaxProgress, (string)responseJsonOnject [keyMaxProgress]);
            }
            if (responseJsonOnject.Keys.Contains(keyServerTime))
            {
                _serverTime.Set((string)responseJsonOnject [keyServerTime]);
            }
            if (responseJsonOnject.Keys.Contains(keyListStateData))
            {
                //Debug.Log ("Got shared data update " + responseJsonOnject[key].GetType());
                JsonData sharedItems = (JsonData)responseJsonOnject [keyListStateData];
                HandleSharedStateResponse(sharedItems, affectedSharedStateTables);
            }

            if (affectedSharedStateTables.Count > 0)
            {
                if (syncSharedStateSignal != null)
                {
                    syncSharedStateSignal.Dispatch(affectedSharedStateTables);
                }
            }

            _gameDB.SetSyncStatus(SyncStatus.InProgress, SyncStatus.Updated);
        }
Beispiel #3
0
 private void HandleHandshakeResponse(ConnectionHandler.RequestResult result, string response)
 {
     Debug.Log("HandleHandshakeResponse (result=" + result + ")\nresponse=" + response);
     if (result != ConnectionHandler.RequestResult.Ok)
     {
         HandleErrorResponse(result, response);
         return;
     }
     _handshakeState = HandshakeLoopState.CanContinue;
     Debug.Log("HandleGetVersionResponse - no update required");
 }
Beispiel #4
0
        private void HandleGetVersionResponse(ConnectionHandler.RequestResult result, string response)
        {
            logger.Log(Tag, "HandleGetVersionResponse (result=" + result + ")\nresponse=" + response.SSubstring(200));
            if (result != ConnectionHandler.RequestResult.Ok)
            {
                HandleErrorResponse(result, response);
                return;
            }

            logger.Log(Tag, "HandleGetVersionResponse - no update required");
        }
Beispiel #5
0
        public void HandleUploadConfigRepsonse(ConnectionHandler.RequestResult result, string response)
        {
            if (result != ConnectionHandler.RequestResult.Ok)
            {
                logger.LogError(Tag, "Error response: " + result + " response: " + response);
                HandleErrorResponse(result, response);
                return;
            }

            logger.Log(Tag, "HandleUploadConfigRepsonse (result=" + result + ")\nresponse=" + response.SSubstring(200));
        }
Beispiel #6
0
        private void HandleServerTimeResponse(ConnectionHandler.RequestResult result, string response)
        {
            if (result != ConnectionHandler.RequestResult.Ok)
            {
                HandleErrorResponse(result, response);
                return;
            }

            JsonData responseJsonObject = JsonMapper.ToObject(response);

            if (responseJsonObject.Keys.Contains(keyServerTime))
            {
                _serverTime.Set((string)responseJsonObject [keyServerTime]);
            }
        }
            public void HandleGetRelationshipsScoresResponse(ConnectionHandler.RequestResult result, string response)
            {
                PlayerPrefs.SetString(RELATIONS_SCORES_KEY_PREFIX + levelConfigId, DateTime.UtcNow.ToFileTimeUtc().ToString());
                PlayerPrefs.Save();

                if (result != ConnectionHandler.RequestResult.Ok)
                {
                    Debug.Log("error getting relationships scores");
                    return;
                }

                outer.logger.Log(Tag, "HandleGetRelationshipsScoresResponse (result=" + result + ")\nresponse=" + response.SSubstring(200));

                JsonData responseData = JsonMapper.ToObject(response);

                if (responseData.IsArray)
                {
                    HashSet <string> levels = new HashSet <string>();
                    string           table  = outer.relationshipScoreStateModel.GetTableName();

                    if (responseData.Count > 0)
                    {
                        for (int i = 0; i < responseData.Count; ++i)
                        {
                            JsonData data = (JsonData)responseData [i];
                            string   id   = data ["id"].ToString();
                            Debug.Log("Saving sharedItem: table=" + table + " id=" + id + " data=" + data.ToJson().SSubstring(200));
                            outer.gameDB.SaveSharedState(table, id, data.ToJson());
                            levels.Add(id);
                        }

                        List <string> affectedTableNames = new List <string>();
                        affectedTableNames.Add(outer.relationshipScoreStateModel.GetTableName());
                        outer.syncSharedStateSignal.Dispatch(affectedTableNames);

                        outer.relationshipsScoresUpdateSignal.Dispatch(levels);                         //FIXME: for correctness better move to the model, the model should dispatch it
                    }
                }
                else
                {
                    Debug.LogWarning("relationships scores response bad format A");
                }
            }
Beispiel #8
0
        public void HandleErrorResponse(ConnectionHandler.RequestResult result, string response)
        {
            Debug.Log("GameConnector.HandleErrorResponse (result=" + result + ")\nresponse: " + response);

            string title   = "";
            string message = "";

            switch (result)
            {
            case (ConnectionHandler.RequestResult.NoInternet):
                title   = "Connection Error";
                message = "Unable to connect with server. Check you internet connection and try again";
                break;

            case (ConnectionHandler.RequestResult.CantReachServer):
                title   = "Server under maintenance";
                message = "Server is under maintenance. Please try again in 1 hour.";
                break;

            case (ConnectionHandler.RequestResult.InternalServerError):
                break;

            case (ConnectionHandler.RequestResult.OkWithErrorInside):
                JsonData        responseErrorJsonOnject = JsonMapper.ToObject(response);
                JsonData        errorObject             = (JsonData)responseErrorJsonOnject [keyError];
                ServerErrorData error = JsonMapper.ToObject <ServerErrorData> (errorObject.ToJson());
                Debug.Log("Handling server error message: " + error.ToString());
                if (error.code == (int)ConnectionHandler.RequestResult.ClientUpdateRequired)
                {
                    title   = error.title;
                    message = "You must update your game - update initiated (url=" + error.message + ").";
                    break;
                }

                title   = "Server under maintenance";
                message = "Server is under maintenance. Please try again in 1 hour.";
                break;
            }
            ShowDialog(title, message);
        }
        private void HandleConnectToNetworkResponse(ConnectionHandler.RequestResult result, string response)
        {
            logger.Log(Tag, "HandleConnectToNetworkResponse (result=" + result + ")\nresponse=" + response);

            if (result != ConnectionHandler.RequestResult.Ok)
            {
                modelSyncService.HandleErrorResponse(result, response);
                return;
            }

            JsonData responseJsonObject = JsonMapper.ToObject(response);

            _lastRecievedPlayerId = (string)responseJsonObject[keyPlayerId];
            NewSocialPlayerData playerData = new NewSocialPlayerData();

            playerData.id = _lastRecievedPlayerId;

            // Response body contains SocialStateData:
            if (responseJsonObject.Keys.Contains(keySocialStateData))
            {
                logger.Log(Tag, "Got social update");
                JsonData jsonData = (JsonData)responseJsonObject[keySocialStateData];
                string   data     = jsonData.ToJson();

                if (data.CompareTo("{}") != 0)
                {
                    gameDB.SyncState(keySocialStateData, data);
                    syncStatesSignal.Dispatch(new List <string> {
                        keySocialStateData
                    });
                }
            }

            //playerData.socialType = SocialStateData.GetNetworkFromString((string)responseJsonObject[keySocialType]);

            string currentPlayerId = TTPlayerPrefs.GetValue(keyPlayerId, "0");

            //string currentPlayerId = gameDB.LoadSyncInfo(keyPlayerId);

            if (_lastRecievedPlayerId.CompareTo("0") == 0)
            {
                logger.Log(Tag, "HandleConnectToNetworkResponse - got \"0\", no action required");
                //Logger.LogDebug ("SocialSync.HandleConnectToNetworkResponse - got \"0\", after changing network user => asking player to choose start new game or keep playing without being connected to this network.");
                //_socialConnectionStatus[playerData.socialType] = false;
                //connectionAllowUserToStartNewGameSignal.Dispatch(playerData);

                socialSyncCompletedSignal.Dispatch();
            }
            else if (currentPlayerId.CompareTo(_lastRecievedPlayerId) != 0)
            {
                logger.Log(Tag, "HandleConnectToNetworkResponse - got new user id from server: " + _lastRecievedPlayerId + ", switching to it from "
                           + currentPlayerId);
                //Logger.LogDebug ("SocialSync.HandleConnectToNetworkResponse - got new user id from server, allowing player to replace the game playerId.\nOld="
                //           + currentPlayerId + " new=" + _lastRecievedPlayerId);
                //_socialConnectionStatus[playerData.socialType] = false;
                //connectionAllowUserToSwitchUserSignal.Dispatch(playerData);
                SwitchUser(playerData.id);
            }
            else
            {
                logger.Log(Tag, "HandleConnectToNetworkResponse - got same user id, first time connected to this network => saving new network user id in state.");
                socialStateModel.SetNetworkUserId(playerData.socialType, _socialUserId[playerData.socialType]);
                //_socialConnectionStatus[playerData.socialType] = true;

                socialSyncCompletedSignal.Dispatch();
            }
        }
Beispiel #10
0
        private void HandleGetdataResponse(ConnectionHandler.RequestResult result, string response)
        {
            if (CheckSyncTimeout())
            {
                return;
            }

            logger.Log(Tag, "HandleGetdataResponse (result=" + result + ")\nresponse=" + response.SSubstring(200));
            if (result != ConnectionHandler.RequestResult.Ok)
            {
                HandleErrorResponse(result, response);
                return;
            }

            JsonData responseJsonOnject = JsonMapper.ToObject(response);

            if (!_editorMode)
            {
                UpdateSyncInfo(responseJsonOnject);
            }

            ICollection <string> affectedConfigTables      = new List <string>();
            ICollection <string> affectedSharedStateTables = new List <string>();
            ICollection <string> affectedStates            = new List <string>();


            if (responseJsonOnject.Keys.Contains(keyGameData))
            {
                //Debug.Log ("Got player data update " + responseJsonOnject[key].GetType());
                JsonData configs = (JsonData)responseJsonOnject [keyGameData];
                foreach (string config in configs.Keys)
                {
                    logger.Log(Tag, "Got config updates for config: " + config);
                    //TODO: Add the pre and post send here too.
                    JsonData configUpdates = (JsonData)configs [config];
                    int      updatesCount  = configUpdates.Count;
                    for (int index = 0; index < updatesCount; index++)
                    {
                        JsonData data = (JsonData)configUpdates [index];
                        string   id   = data ["id"].ToString();

                        data = PostReceive(data, id, config);

                        logger.Log(Tag, "Saving config: table=" + config + " id=" + id + " data=" + data.ToJson().SSubstring(200));
                        _gameDB.SaveConfig(config, id, data.ToJson());
                        affectedConfigTables.Add(config);
                    }
                }
            }

            // Running in editor mode would update only config tables - for syncing only the gld form the server
            if (_editorMode)
            {
                return;
            }

            if (responseJsonOnject.Keys.Contains(keySharedStateData))
            {
                //Debug.Log ("Got shared data update " + responseJsonOnject[key].GetType());
                JsonData sharedItems = (JsonData)responseJsonOnject [keySharedStateData];
                HandleSharedStateResponse(sharedItems, affectedSharedStateTables);
            }
            if (responseJsonOnject.Keys.Contains(keyListStateData))
            {
                //Debug.Log ("Got liststate data update " + responseJsonOnject[key].GetType());
                JsonData stateItems = (JsonData)responseJsonOnject [keyListStateData];
                HandleSharedStateResponse(stateItems, affectedSharedStateTables);
            }
            if (responseJsonOnject.Keys.Contains(keyPlayerData))
            {
                JsonData states = (JsonData)responseJsonOnject [keyPlayerData];
                foreach (string state in states.Keys)
                {
//					Debug.Log ("Got state update: key=" + state + " value=" + ((JsonData)states [state]).ToJson ());
                    JsonData decoded = PostReceive(states[state], state);
                    string   data    = decoded.ToJson();

                    if (data.CompareTo("{}") != 0)
                    {
                        _gameDB.SyncState(state, data);
                        affectedStates.Add(state);
                    }
                }
            }

            if (affectedConfigTables.Count > 0)
            {
                if (syncConfigsSignal != null)
                {
                    syncConfigsSignal.Dispatch(affectedConfigTables);
                }
            }

            if (affectedSharedStateTables.Count > 0)
            {
                if (syncSharedStateSignal != null)
                {
                    syncSharedStateSignal.Dispatch(affectedSharedStateTables);
                }
            }

            if (affectedStates.Count > 0)
            {
                if (syncStatesSignal != null)
                {
                    syncStatesSignal.Dispatch(affectedStates);
                }
            }

            _loggedIn  = true;
            _syncState = SyncLoopState.Connected;

            if (responseJsonOnject.Keys.Contains(keyRunFullSync))
            {
                bool shouldRunFullSync = (bool)responseJsonOnject[keyRunFullSync];
                if (shouldRunFullSync)
                {
                    logger.Log(Tag, "ModelSync - Running full sync");
                    _gameDB.SetStateDataAsOutdated();
                    _coroutineFactory.StartCoroutine(TrySyncData);
                }
            }

            logger.Log(Tag, "Sending event OnModelSyncCompleted");
            if (modelSyncCompletedSignal != null)
            {
                _timedOut = false;
                modelSyncCompletedSignal.Dispatch();
                promise.Dispatch();
            }
        }
Beispiel #11
0
        public void HandleErrorResponse(ConnectionHandler.RequestResult result, string response)
        {
            logger.Log(Tag.Italics(), "ModelSync.HandleErrorResponse (result=" + result + ")\nresponse: " + response.SSubstring(200));

            string title      = "";
            string message    = "";
            string button     = "";
            bool   showDialog = false;
            bool   recoverUnidentifiedUSer = false;

            switch (result)
            {
            case (ConnectionHandler.RequestResult.NoInternet):
                _flowDisconnectReason = FlowDisconnectReason.NoInternet;
                title   = "Connection Error";
                message = "Unable to connect with server. Check you internet connection and try again";
                button  = "Try Again";
                break;

            case (ConnectionHandler.RequestResult.CantReachServer):
                title   = "Connection Error";
                message = "Unable to connect with server. Please try again";
                button  = "Try Again";
                _flowDisconnectReason = FlowDisconnectReason.CantReachServer;
                break;

            case (ConnectionHandler.RequestResult.InternalServerError):
                _flowDisconnectReason = FlowDisconnectReason.ServerInternalError;
                break;

            case (ConnectionHandler.RequestResult.UnAuthorized):
                title   = "Progress Detected";
                message = "You have been playing on another device. Please reload game to load your progress";
                button  = "Reload";
                _flowDisconnectReason = FlowDisconnectReason.ExpiredToken;
                break;

            case (ConnectionHandler.RequestResult.OkWithErrorInside):
                JsonData        responseErrorJsonOnject = JsonMapper.ToObject(response);
                JsonData        errorObject             = (JsonData)responseErrorJsonOnject [keyError];
                ServerErrorData error = JsonMapper.ToObject <ServerErrorData> (errorObject.ToJson());
                logger.Log(Tag, "Handling server error message: " + error.ToString());
                if (error.code == (int)ConnectionHandler.RequestResult.UnAuthorized)
                {
                    _flowDisconnectReason = FlowDisconnectReason.ExpiredToken;
                    title   = "Progress Detected";
                    message = "You have been playing on another device. Please reload game to load your progress";
                    button  = "Reload";
                    break;
                }
                if (error.code == (int)ConnectionHandler.RequestResult.ClientUpdateRequired)
                {
                    _flowDisconnectReason = FlowDisconnectReason.ClientUpdateStarted;
                    title   = error.title;
                    message = "You must update your game - update initiated (url=" + error.message + ").";
                    button  = "";
                    break;
                }

                if (error.code == (int)ConnectionHandler.RequestResult.InternalServerError &&
                    error.message == "User not foundPlayer not found")
                {
                    logger.Log(Tag, "ModelSync.HandleErrorResponse() - PlayerId not found on server => staring new game");

                    recoverUnidentifiedUSer = true;
                    //_gameDB.SaveSyncInfo(keyPlayerId, "0");
                    TTPlayerPrefs.SetValue(keyPlayerId, "0");
                    _gameDB.SaveSyncInfo(keyLastStateUpdate, "");
                    RestartFlowAfterUserSwitch();
                }

                title   = "Unidentified Server Error";
                message = "error " + error.ToString();
                button  = "reload";
                break;
            }

            if (!recoverUnidentifiedUSer)
            {
                _syncState = SyncLoopState.DisconnectedOnHold;
            }

            if (connectionDisconnectedSignal != null)
            {
                connectionDisconnectedSignal.Dispatch(_flowDisconnectReason);
            }

            if (showDialog)
            {
                ShowErrorDialog(title, message, button);
            }
        }