public static void Log(this IShamanLogger src, string source, string message)
 {
     if (!src.IsNullOrEmpty())
     {
         src.Log(new ShamanLogMessage(source, message));
     }
 }
示例#2
0
        public static CallerInfoType GetCallerInfo(IShamanLogger logger)
        {
#if NET451
            var st = new StackTrace(true);
            for (var i = 0; i < st.FrameCount; i++)
            {
                var frame  = st.GetFrame(i);
                var method = frame.GetMethod();
                var declaringTypeFullName = GetDeclaringTypeFullName(method, logger);
                if (declaringTypeFullName != "Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations")
                {
                    continue;
                }
                switch (method.Name)
                {
                case "RemoveMigration":
                    return(CallerInfoType.RemoveMigration);

                case "AddMigration":
                    return(CallerInfoType.AddMigration);
                }
            }
#else
#warning CallerInfo is not supported :(
#endif
            return(CallerInfoType.Other);
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplication server,
                              IShamanLogger logger, IMatchMaker matchMaker, IServerActualizer serverActualizer, IMatchMakerServerInfoProvider serverInfoProvider, IBundleLoader bundleLoader)
        {
            serverActualizer.Start(Convert.ToInt32(Configuration["LauncherSettings:ActualizationIntervalMs"]));

            base.ConfigureMm(app, env, server, logger, matchMaker, serverInfoProvider, bundleLoader);
        }
        public MmApplication(
            IShamanLogger logger,
            IApplicationConfig config,
            ISerializer serializer,
            ISocketFactory socketFactory,
            IMatchMaker matchMaker,
            IRequestSender requestSender,
            ITaskSchedulerFactory taskSchedulerFactory,
            IPacketSender packetSender,
            IShamanMessageSenderFactory messageSenderFactory,
            IMatchMakerServerInfoProvider serverProvider,
            IRoomManager roomManager, IMatchMakingGroupsManager matchMakingGroupManager, IPlayersManager playersManager, IMmMetrics mmMetrics, IProtectionManager protectionManager) : base(logger, config, serializer,
                                                                                                                                                                                            socketFactory, taskSchedulerFactory, requestSender, mmMetrics, protectionManager)
        {
            _packetSender            = packetSender;
            _messageSenderFactory    = messageSenderFactory;
            _serverProvider          = serverProvider;
            _roomManager             = roomManager;
            _matchMakingGroupManager = matchMakingGroupManager;
            _playersManager          = playersManager;
            _matchMaker = matchMaker;
            _id         = Guid.NewGuid();

            Logger?.Debug($"MmApplication constructor called. Id = {_id}");
        }
        public static void SetRawModel(Type type, IMutableModel model, IShamanLogger logger)
        {
            void Log(string message)
            {
                logger.Log(typeof(ModelsCachedContainer), nameof(SetRawModel), message);
            }

            string MutableEntityTypeToString(IMutableEntityType mutableEntityType)
            {
                try
                {
                    var r = mutableEntityType.Relational();
                    return($"{r.Schema}.{r.TableName}");
                }
                catch (Exception e)
                {
                    logger.LogException(Guid.Parse("{22CC8890-B871-45BF-890E-9341B41183F6}"), e);
                    return("??");
                }
            }

            var value  = EfModelWrapper.FromModel(model);
            var result = Cache.TryAdd(type, value);

            Log(result ? "Success" : "Skipped");
        }
示例#6
0
        public void UpdateColumnInfoOnModelCreating(IDbSetInfo dbSetInfo, ColumnInfo columnInfo,
                                                    EntityTypeBuilder entityBuilder,
                                                    IShamanLogger logger)
        {
            const string source = nameof(DefaultValueColumnInfoUpdateService) + "." + nameof(UpdateColumnInfoOnModelCreating);
            var          dv     = columnInfo.DefaultValue;

            if (columnInfo.DefaultValue == null)
            {
                return;
            }
            string action;

            switch (dv.Kind)
            {
            case ValueInfoKind.Clr:
                action = $"{columnInfo.PropertyName}.HasDefaultValue(\"{columnInfo.DefaultValue.ClrValue}\")";
                logger.LogCalling(source, dbSetInfo.EntityType, action);
                entityBuilder.Property(columnInfo.PropertyName).HasDefaultValue(columnInfo.DefaultValue.ClrValue);
                break;

            case ValueInfoKind.Sql:
                action = $"{columnInfo.PropertyName}.HasDefaultValueSql(\"{columnInfo.DefaultValue.SqlValue}\")";
                logger.LogCalling(source, dbSetInfo.EntityType, action);
                entityBuilder.Property(columnInfo.PropertyName).HasDefaultValueSql(columnInfo.DefaultValue.SqlValue);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
示例#7
0
 public void Initialize(IPEndPoint endpoint, Guid peerId, IReliableSock socket, ISerializer serializer, IApplicationConfig config, IShamanLogger logger)
 {
     _endpoint = endpoint;
     _peerId   = peerId;
     _socket   = socket;
     _logger   = logger;
 }
示例#8
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IShamanLogger logger, IRouterServerInfoProvider serverInfoProvider)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();
            app.UseCookiePolicy();
            if (IsMetricsEnabled())
            {
                app.UseMiddleware <RequestMetricsMiddleWare>();
            }
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

            serverInfoProvider.Start();

            logger.Error($"Initial server list: {JsonConvert.SerializeObject(serverInfoProvider.GetAllServers(), Formatting.Indented)}");
            logger.Error($"Initial bundles list: {JsonConvert.SerializeObject(serverInfoProvider.GetAllBundles(), Formatting.Indented)}");
        }
示例#9
0
 public MatchmakerController(ISerializer serializer, IShamanLogger logger, IRoomManager roomManager, IMatchMakerServerInfoProvider serverInfoProvider)
 {
     _serializer         = serializer;
     _logger             = logger;
     _roomManager        = roomManager;
     _serverInfoProvider = serverInfoProvider;
 }
        public void UpdateColumnInfoOnModelCreating(IDbSetInfo dbSetInfo,
                                                    ColumnInfo columnInfo,
                                                    EntityTypeBuilder entityBuilder,
                                                    IShamanLogger logger)
        {
            const string source = nameof(SqlServerReflectionService) + "." + nameof(UpdateColumnInfoOnModelCreating);

            if (!UseDataType)
            {
                return;
            }
            if (columnInfo.ClrProperty?.PropertyType != typeof(string))
            {
                return;
            }
            var modelInfo = dbSetInfo.Model;
            var collation = GetCollation(columnInfo, dbSetInfo, modelInfo);

            if (string.IsNullOrEmpty(collation))
            {
                logger.Log(source, $"Column {dbSetInfo.GetSqlTableName()}.{columnInfo.PropertyName} has no SQL collation info");
                return;
            }

            var isUnicode   = columnInfo.IsUnicode ?? modelInfo.DefaultIsUnicodeText;
            var sqlDataType = SqlServerFixerService.MkStringType(isUnicode, columnInfo.MaxLength, collation);
            var action      = $"{columnInfo.PropertyName}.HasColumnType(\"{sqlDataType}\")";

            logger.LogCalling(source, dbSetInfo.EntityType, action);
            entityBuilder.Property(columnInfo.PropertyName).HasColumnType(sqlDataType);
        }
示例#11
0
        public Room(IShamanLogger logger, ITaskSchedulerFactory taskSchedulerFactory, IRoomManager roomManager,
                    IRoomPropertiesContainer roomPropertiesContainer,
                    IRoomControllerFactory roomControllerFactory, IPacketSender packetSender,
                    Guid roomId, IRoomStateUpdater roomStateUpdater)
        {
            _logger                  = logger;
            _roomId                  = roomId;
            _roomStateUpdater        = roomStateUpdater;
            _createdOn               = DateTime.UtcNow;
            _taskScheduler           = taskSchedulerFactory.GetTaskScheduler();
            _roomPropertiesContainer = roomPropertiesContainer;
            _packetSender            = packetSender;

            _roomStats = new RoomStats(GetRoomId(), roomPropertiesContainer.GetPlayersCount());

            _roomController =
                roomControllerFactory.GetGameModeController(
                    new RoomContext(this), _taskScheduler, roomPropertiesContainer);

            _ = _taskScheduler.ScheduleOnInterval(() =>
            {
                var maxQueueSIze = _packetSender.GetMaxQueueSIze();
                _roomStats.AddMaxQueueSize(maxQueueSIze);
                _roomStats.AddAvgQueueSize(_packetSender.GetAverageQueueSize());
            }, 0, 1000, true);

            _ = _taskScheduler.ScheduleOnInterval(async() => await SendRoomStateUpdate(), 0, 2000, true);
        }
示例#12
0
        public void UpdateColumnInfoInModelInfo(ColumnInfo columnInfo, IDbSetInfo dbSetInfo,
                                                IShamanLogger logger)
        {
            if (columnInfo.IsNotMapped || columnInfo.IsNavigationProperty)
            {
                return;
            }
            var propertyInfo = columnInfo.ClrProperty;

            if (propertyInfo == null)
            {
                return;
            }
            var attribute = propertyInfo.GetCustomAttribute <NavigationPropertyAttribute>();

            if (attribute != null)
            {
                return;
            }
            if (propertyInfo.PropertyType == typeof(string) || propertyInfo.PropertyType.IsEnum ||
                propertyInfo.PropertyType.IsPrimitive)
            {
                return;
            }
            if (IsEntityType(propertyInfo.PropertyType))
            {
                columnInfo.IsNavigationProperty = true;
            }
            else if (IsListOfEntityType(propertyInfo.PropertyType))
            {
                columnInfo.IsNavigationProperty = true;
            }
        }
示例#13
0
        public void UpdateColumnInfoInModelInfo(ColumnInfo columnInfo,
                                                IDbSetInfo dbSetInfo, IShamanLogger logger)
        {
            var attribute = columnInfo.ClrProperty?.GetCustomAttribute <NavigationPropertyAttribute>();

            if (attribute == null)
            {
                return;
            }
            Action <string> log =
                txt => logger.Log(typeof(NavigationPropertyAttributeUpdater), nameof(UpdateColumnInfoOnModelCreating),
                                  txt);
            var targetType = attribute.ForceNavigation ? "navigation" : "non-navigation";

            if (columnInfo.IsNavigationProperty == attribute.ForceNavigation)
            {
                log(
                    $"column {columnInfo.ColumnName} has been already set as {targetType} property. NavigationPropertyAttribute is not necessary.");
            }
            else
            {
                columnInfo.IsNavigationProperty = attribute.ForceNavigation;
                log($"column {columnInfo.ColumnName} is {targetType} property because of NavigationPropertyAttribute");
            }
        }
        public void UpdateColumnInfoInModelInfo(ColumnInfo columnInfo,
                                                IDbSetInfo dbSetInfo, IShamanLogger logger)
        {
            var notMappedAttribute = columnInfo.ClrProperty?.GetCustomAttribute <KeyAttribute>();

            columnInfo.IsInPrimaryKey = notMappedAttribute != null;
            // todo : log
        }
 public LiteNetSock(IShamanLogger logger)
 {
     _logger                  = logger;
     _listener                = new EventBasedNetListener();
     _peer                    = new NetManager(_listener);
     _peer.ReconnectDelay     = 100;
     _peer.MaxConnectAttempts = 50;
 }
 public RoomManager(IMatchMakerServerInfoProvider serverProvider, IShamanLogger logger,
                    ITaskSchedulerFactory taskSchedulerFactory, IRoomApiProvider roomApiProvider)
 {
     _serverProvider  = serverProvider;
     _logger          = logger;
     _roomApiProvider = roomApiProvider;
     _taskScheduler   = taskSchedulerFactory.GetTaskScheduler();
 }
 public static EfModelWrapper GetRawModel(Type dbContextType, IShamanLogger logger)
 {
     return(Cache.GetOrAdd(dbContextType, t =>
     {
         var model = GetModel(t, false, logger);
         return model;
     }));
 }
 public PacketBatchSender(ITaskSchedulerFactory taskSchedulerFactory, IPacketSenderConfig config,
                          IShamanLogger logger)
 {
     _config        = config;
     _logger        = logger;
     _taskScheduler = taskSchedulerFactory.GetTaskScheduler();
     _peerToPackets = new ConcurrentDictionary <IPeerSender, IPacketQueue>();
 }
示例#19
0
 public RouterServerInfoProvider(IConfigurationRepository configRepo, ITaskSchedulerFactory taskSchedulerFactory, IOptions <RouterConfiguration> config, IShamanLogger logger)
 {
     _configRepo           = configRepo;
     _taskSchedulerFactory = taskSchedulerFactory;
     _config        = config;
     _logger        = logger;
     _taskScheduler = _taskSchedulerFactory.GetTaskScheduler();
 }
 public ServerSender(IShamanLogger logger, Action <DataPacket, Action> onPackageReceived,
                     ITaskScheduler taskScheduler)
 {
     _logger            = logger;
     _onPackageReceived = onPackageReceived;
     _taskScheduler     = taskScheduler;
     _connected         = false;
 }
 public ShamanClientFactory()
 {
     _logger = new ConsoleLogger("C", LogLevel.Error | LogLevel.Info);
     _taskSchedulerFactory = new TaskSchedulerFactory(_logger);
     _serializer           = new BinarySerializer();
     _requestSender        = new TestClientHttpSender(_logger, _serializer);
     _clientPeerListener   = new TestClientPeerListener(_logger);
     _clientPeerConfig     = new ClientPeerConfig();
 }
示例#22
0
 public RouterMetaProvider(ITaskSchedulerFactory taskSchedulerFactory, IRouterClient routerClient,
                           IServerIdentityProvider serverIdentityProvider, IShamanLogger logger)
 {
     _serverIdentity = serverIdentityProvider.Get();
     _taskScheduler  = taskSchedulerFactory.GetTaskScheduler();
     _routerClient   = routerClient;
     _logger         = logger;
     Load().Wait();
 }
        public static object CreateInstance(Type contextType, IShamanLogger logger, params object[] constructorParameters)
        {
            var inst = new InstanceCreator(logger)
            {
                ConstructorParameters = constructorParameters?.ToList() ?? new List <object>()
            };

            return(inst.CreateInstanceInternal(contextType));
        }
示例#24
0
 public RouterServerActualizer(IStatisticsProvider statsProvider, ITaskSchedulerFactory taskSchedulerFactory, IRequestSender requestSender,
                               IRoutingConfig routingConfig, IShamanLogger logger)
 {
     _statsProvider = statsProvider;
     _requestSender = requestSender;
     _routingConfig = routingConfig;
     _logger        = logger;
     _taskScheduler = taskSchedulerFactory.GetTaskScheduler();
 }
示例#25
0
        public static T CreateInstance <T>(IShamanLogger logger, params object[] values)
        {
            var inst = new InstanceCreator(logger)
            {
                ConstructorParameters = values?.ToList() ?? new List <object>()
            };

            return((T)inst.CreateInstanceInternal(typeof(T)));
        }
 public void UpdateColumnInfoInModelInfo(ColumnInfo columnInfo,
                                         IDbSetInfo dbSetInfo, IShamanLogger logger)
 {
     if (columnInfo.ClrProperty?.GetCustomAttribute <NotMappedAttribute>() != null)
     {
         columnInfo.IsNotMapped = true;
     }
     // todo log NotMappedAttributeUpdater.UpdateColumnInfo
 }
 public static ShamanOptions WithLogger(this ShamanOptions options, IShamanLogger logger)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     options.Logger = logger ?? EmptyShamanLogger.Instance;
     return(options);
 }
示例#28
0
 public void UpdateColumnInfoInModelInfo(ColumnInfo columnInfo,
                                         IDbSetInfo dbSetInfo, IShamanLogger logger)
 {
     if (columnInfo.ClrProperty?.GetCustomAttribute <InversePropertyAttribute>() != null)
     {
         columnInfo.IsNavigationProperty = true;
     }
     // todo log
 }
 public ConnectDdosProtection(
     IProtectionManagerConfig config,
     ITaskSchedulerFactory taskSchedulerFactory,
     IShamanLogger logger)
 {
     _config        = config;
     _taskScheduler = taskSchedulerFactory.GetTaskScheduler();
     _logger        = logger;
 }
 public MatchMakerServerInfoProvider(ITaskSchedulerFactory taskSchedulerFactory,
                                     IRouterServerInfoProviderConfig config, IShamanLogger logger, IRouterClient routerClient)
 {
     _logger          = logger;
     _routerClient    = routerClient;
     _taskScheduler   = taskSchedulerFactory.GetTaskScheduler();
     _config          = config;
     _isRequestingNow = false;
 }