コード例 #1
0
        public void UpdateSessionFeatures(string features)
        {
            lock (updateLock)
            {
                var data   = (features ?? string.Empty).Split(',').Select(t => t.Trim().ToLower()).Where(t => !string.IsNullOrEmpty(t)).ToArray();
                var result = new Dictionary <string, object>();
                foreach (var item in data)
                {
                    var itemData = item.Split(new[] { ':' }, 2);
                    result[itemData[0]] = itemData.Length > 1 ? (object)itemData[1].Trim() : true;
                }

                HasProvablyFair = result.ContainsKey("provably_fair");
                this.Features   = result;

                CallbackData = null;

                if (UserId == 0 || !result.ContainsKey("seamless") || !result.ContainsKey("external_access_point"))
                {
                    return;
                }

                var accessPointId = result["external_access_point"].ToLong();
                CallbackData = ExternalServiceFacade.GetGameCoreService().GetGameCallbackData(accessPointId, UserId);
            }
        }
コード例 #2
0
        public bool saveUserSettings(string sessionId, object settings)
        {
            var session = GetSession(sessionId);

            if (session != null)
            {
                var userId = session.UserId;
                if (userId != 0)
                {
                    try
                    {
                        ExternalServiceFacade.GetGameCoreService().SaveGameUserSettings(gameData.Id, userId, settings.SerializeJSON());
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex, game.Id);
                    }
                }
                else
                {
                    session.setLocalSettings(gameData.Id, settings);
                    return(true);
                }
            }

            return(false);
        }
コード例 #3
0
        public bool Initialize(IScriptedGameServerRole parent)
        {
            MonitoringFacade.RegisterMonitoringSource(id);
            var entryScript = entryFile.ReadAllTextFromFile();

            try
            {
                using (var context = JavascriptContextFactory.Create())
                {
                    context.Run(entryScript, Path.GetFileName(entryFile));
                }
            }
            catch (JavascriptException ex)
            {
                LogScriptError(entryFile, folderName, ex);
                return(false);
            }

            if (string.IsNullOrEmpty(id))
            {
                throw new BusinessException("Game type cannot be empty (entry file '{0}').".FormatString(entryFile));
            }

            gameTypeEntity = ExternalServiceFacade.GetGameCoreService().GetGameType(id);

            return(true);
        }
コード例 #4
0
        public RoundCounter(ScriptedGameContext context)
        {
            this.context = context;
            gameId       = context.Game.IdLong;

            currentValue = ExternalServiceFacade.GetGameCoreService().GetRoundId(gameId);
            if (currentValue == 0)
            {
                currentValue = increase();
            }

            var tmpResult = NoSQLFacade.Get <GenericNoSqlObject>("SavedGameRoundId", context.Game.IdLong);

            if (tmpResult != null)
            {
                var longValue = (long)tmpResult.Value;
                if (currentValue < longValue)
                {
                    context.Game.Log("Restoring round counter from NoSQL storage from value {0} to value {1}", currentValue, longValue);
                    currentValue      = longValue;
                    hasUnsyncedValues = true;
                    CheckSync();
                    NoSQLFacade.Delete("SavedGameRoundId", context.Game.IdLong);
                }
            }
        }
コード例 #5
0
        public object loadUserSettings(string sessionId)
        {
            var session = GetSession(sessionId);

            if (session != null)
            {
                var userId = session.UserId;
                if (userId != 0)
                {
                    try
                    {
                        return(ExternalServiceFacade.GetGameCoreService().GetGameUserSettings(gameData.Id, userId).ParseJsonAny());
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex, game.Id);
                    }
                }
                else
                {
                    return(session.getLocalSettings(gameData.Id));
                }

                return(null);
            }

            return(null);
        }
コード例 #6
0
        public CasinoInfo getCasinoInfo(string sessionId)
        {
            var session = GetSession(sessionId);

            if (session == null)
            {
                return(null);
            }

            return(ExternalServiceFacade.GetGameCoreService().GetCasino(session.CasinoId));
        }
コード例 #7
0
        public object loadSettings()
        {
            try
            {
                return(ExternalServiceFacade.GetGameCoreService().GetGameSettings(gameData.Id).ParseJsonAny());
            }
            catch (Exception ex)
            {
                Logger.Log(ex, game.Id);
            }

            return(null);
        }
コード例 #8
0
        public bool saveSettings(object settings)
        {
            try
            {
                ExternalServiceFacade.GetGameCoreService().SaveGameSettings(gameData.Id, settings.SerializeJSON());
                return(true);
            }
            catch (Exception ex)
            {
                Logger.Log(ex, game.Id);
            }

            return(false);
        }
コード例 #9
0
 private void CheckSync()
 {
     if (hasUnsyncedValues)
     {
         try
         {
             ExternalServiceFacade.GetGameCoreService().SetRoundId(gameId, currentValue);
             hasUnsyncedValues = false;
         }
         catch (Exception ex)
         {
             SaveRoundIdToNoSql();
             context.Game.LogError(ex);
         }
     }
 }
コード例 #10
0
 public long increase()
 {
     try
     {
         CheckSync();
         currentValue = ExternalServiceFacade.GetGameCoreService().IncreaseRoundId(gameId);
         return(currentValue);
     }
     catch (Exception ex)
     {
         context.Game.LogError(ex);
         SaveRoundIdToNoSql();
         hasUnsyncedValues = true;
         return(currentValue++);
     }
 }
コード例 #11
0
        public void InitializeInstances()
        {
            if (isDisposed)
            {
                return;
            }

            Log(Id, "Initializing game instances...");

            var games = ExternalServiceFacade.GetGameCoreService().GetGames(gameTypeEntity.Id);

            foreach (var game in games)
            {
                var instance = new ScriptedGameInstance(this, game, externalGameUrl, externalGameSSLUrl, GetInstanceSettings(game), accountingFacadeFactory.CreateFacade(), reportTracker);
                instance.Start();
            }
        }
コード例 #12
0
        public static ServiceApplicationInfo ParseServiceAppToken(string token)
        {
            var result = new ServiceApplicationInfo
            {
                CasinoId        = 0,
                ApplicationType = 1
            };

            string[] parsedData;

            try
            {
                var bytes         = Enumerable.Range(0, token.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(token.Substring(x, 2), 16)).ToArray();
                var reversedBytes = bytes.Reverse().ToArray();
                parsedData = Encoding.UTF8.GetString(reversedBytes).Split(new [] { ':' }, 4);
            }
            catch (Exception ex)
            {
                throw new Exception("Invalid token");
            }

            try
            {
                if (parsedData.Length < 4)
                {
                    throw new Exception("Wrong token length");
                }

                var appId = parsedData[0].ToLong();
                var code  = parsedData[3];

                result = ExternalServiceFacade.GetGameCoreService().GetServiceApplicationInfo(appId, code);
            }
            catch (Exception ex)
            {
                throw new Exception("Wrong token version");
            }

            return(result);
        }