예제 #1
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <IDownloadableContentServerServiceClient>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncEndpointDownloadableContentService(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            });

            //IStaticContentDataServiceClient
            builder.Register <IStaticContentDataServiceClient>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncStaticContentDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            });
        }
예제 #2
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <IZoneAuthenticationService>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncZoneAuthenticationServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ZoneAuthentication"), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            })
            .SingleInstance();

            builder.Register <IZoneRegistryService>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncEndpointZoneRegistryService(QueryForRemoteServiceEndpoint(serviceDiscovery, "ZoneManager"), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            })
            //.As<IZoneRegistryServiceQueueable>()
            .As <IZoneRegistryService>()
            .SingleInstance();
        }
 public AuthorizedServiceDiscoveryServiceResolver(IServiceDiscoveryService discoveryClient,
                                                  TServiceEnumType serviceType,
                                                  IReadonlyAuthTokenRepository tokenRepository)
     : base(discoveryClient, serviceType)
 {
     TokenRepository = tokenRepository ?? throw new ArgumentNullException(nameof(tokenRepository));
 }
예제 #4
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <IDownloadableContentServerServiceClient>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncEndpointDownloadableContentService(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            });

            builder.Register <ICreatureDataServiceClient>(context =>
            {
                IServiceDiscoveryService serviceDiscovery = context.Resolve <IServiceDiscoveryService>();
                //IReadonlyAuthTokenRepository tokenRepository = context.Resolve<IReadonlyAuthTokenRepository>();

                //return new AsyncCreatureDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings() { HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository) });
                return(new AsyncCreatureDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer")));
            });

            builder.Register <IGameObjectDataServiceClient>(context =>
            {
                IServiceDiscoveryService serviceDiscovery = context.Resolve <IServiceDiscoveryService>();
                //IReadonlyAuthTokenRepository tokenRepository = context.Resolve<IReadonlyAuthTokenRepository>();

                //return new AsyncCreatureDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings() { HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository) });
                return(new AsyncGameObjectDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer")));
            });

            builder.Register <IPlayerSpawnPointDataServiceClient>(context =>
            {
                IServiceDiscoveryService serviceDiscovery = context.Resolve <IServiceDiscoveryService>();
                //IReadonlyAuthTokenRepository tokenRepository = context.Resolve<IReadonlyAuthTokenRepository>();

                //return new AsyncCreatureDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings() { HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository) });
                return(new AsyncPlayerSpawnPointDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer")));
            });

            builder.Register <IGameObjectBehaviourDataServiceClient <WorldTeleporterInstanceModel> >(context =>
            {
                IServiceDiscoveryService serviceDiscovery = context.Resolve <IServiceDiscoveryService>();
                //IReadonlyAuthTokenRepository tokenRepository = context.Resolve<IReadonlyAuthTokenRepository>();

                //return new AsyncCreatureDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings() { HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository) });
                return(new AsyncGameObjectBehaviourDataServiceClient <WorldTeleporterInstanceModel>(CreateBehaviourDataEndpointFromServiceEndpoint(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), "WorldTeleporterData")));
            });

            builder.Register <IGameObjectBehaviourDataServiceClient <AvatarPedestalInstanceModel> >(context =>
            {
                IServiceDiscoveryService serviceDiscovery = context.Resolve <IServiceDiscoveryService>();
                //IReadonlyAuthTokenRepository tokenRepository = context.Resolve<IReadonlyAuthTokenRepository>();

                //return new AsyncCreatureDataServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), new RefitSettings() { HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository) });
                return(new AsyncGameObjectBehaviourDataServiceClient <AvatarPedestalInstanceModel>(CreateBehaviourDataEndpointFromServiceEndpoint(QueryForRemoteServiceEndpoint(serviceDiscovery, "ContentServer"), "AvatarPedestalData")));
            });
        }
예제 #5
0
 /// <inheritdoc />
 public AuthenticatedHttpClientHandler(IReadonlyAuthTokenRepository authTokenProvider, HttpMessageHandler innerHandler)
     : base(innerHandler)
 {
     if (innerHandler == null)
     {
         throw new ArgumentNullException(nameof(innerHandler));
     }
     AuthTokenProvider = authTokenProvider ?? throw new ArgumentNullException(nameof(authTokenProvider));
 }
예제 #6
0
 /// <inheritdoc />
 public WorldDownloadingGameInitializable(ICharacterService characterService, ICharacterDataRepository localCharacterData, IReadonlyAuthTokenRepository authTokenRepo, IZoneServerService zoneDataService, IContentServerServiceClient contentService, ILog logger)
 {
     CharacterService   = characterService;
     LocalCharacterData = localCharacterData;
     AuthTokenRepo      = authTokenRepo;
     ZoneDataService    = zoneDataService;
     ContentService     = contentService;
     Logger             = logger;
 }
예제 #7
0
 public OnConnectionEstablishedClaimSessionEventListener(INetworkConnectionEstablishedEventSubscribable subscriptionService,
                                                         [NotNull] IPeerPayloadSendService <GameClientPacketPayload> sendService,
                                                         [NotNull] IReadonlyAuthTokenRepository authTokenRepository,
                                                         [NotNull] ILocalCharacterDataRepository characterDataRepository)
     : base(subscriptionService)
 {
     SendService             = sendService ?? throw new ArgumentNullException(nameof(sendService));
     AuthTokenRepository     = authTokenRepository ?? throw new ArgumentNullException(nameof(authTokenRepository));
     CharacterDataRepository = characterDataRepository ?? throw new ArgumentNullException(nameof(characterDataRepository));
 }
예제 #8
0
 /// <inheritdoc />
 public CharacterSelectionSelectCharacterImmediatelyOnButtonClickedEventListener(
     [NotNull] ICharacterSelectionButtonClickedEventSubscribable subscriptionService,
     [NotNull] ICharacterService characterService,
     [NotNull] ICharacterDataRepository characterData,
     [NotNull] IReadonlyAuthTokenRepository authTokenRepo,
     [NotNull] ILog logger)
     : base(subscriptionService)
 {
     CharacterService = characterService ?? throw new ArgumentNullException(nameof(characterService));
     CharacterData    = characterData ?? throw new ArgumentNullException(nameof(characterData));
     AuthTokenRepo    = authTokenRepo ?? throw new ArgumentNullException(nameof(authTokenRepo));
     Logger           = logger ?? throw new ArgumentNullException(nameof(logger));
 }
예제 #9
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <IVivoxAuthorizationService>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncVivoxAuthorizationServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, GladMMONetworkConstants.VIVOX_AUTHENTICATION_SERVICE_NAME), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            });
        }
 /// <inheritdoc />
 public SocialConnectionGameInitializable(
     [NotNull] IEnumerable <ISignalRConnectionHubInitializable> initializableSocialServices,
     [NotNull] IServiceDiscoveryService serviceDiscoveryService,
     [NotNull] ILocalPlayerDetails playerDetails,
     [NotNull] IReadonlyAuthTokenRepository authTokenProvider,
     [NotNull] ILog logger)
 {
     InitializableSocialServices = initializableSocialServices ?? throw new ArgumentNullException(nameof(initializableSocialServices));
     ServiceDiscoveryService     = serviceDiscoveryService ?? throw new ArgumentNullException(nameof(serviceDiscoveryService));
     PlayerDetails     = playerDetails ?? throw new ArgumentNullException(nameof(playerDetails));
     AuthTokenProvider = authTokenProvider ?? throw new ArgumentNullException(nameof(authTokenProvider));
     Logger            = logger ?? throw new ArgumentNullException(nameof(logger));
 }
        /// <inheritdoc />
        public DefaultLoadableContentResourceManager(
            [NotNull] IContentServerServiceClient contentClient,
            [NotNull] IReadonlyAuthTokenRepository authTokenRepo,
            [NotNull] ILog logger)
        {
            //TODO: We haven't implemented the refcounted cleanup. We ref count, but don't yet dispose.
            ProjectVersionStage.AssertAlpha();

            ContentClient = contentClient ?? throw new ArgumentNullException(nameof(contentClient));
            AuthTokenRepo = authTokenRepo ?? throw new ArgumentNullException(nameof(authTokenRepo));
            Logger        = logger ?? throw new ArgumentNullException(nameof(logger));

            ResourceHandleCache = new Dictionary <long, ReferenceCountedPrefabContentResourceHandle>();

            ReleaseUnmanagedResources();
        }
예제 #12
0
 public InitializeRealtimeSocialServiceEventListener(ILocalPlayerSpawnedEventSubscribable subscriptionService,
                                                     [NotNull] ILog logger,
                                                     [NotNull] IServiceDiscoveryService serviceDiscoveryService,
                                                     [NotNull] ILocalPlayerDetails playerDetails,
                                                     [NotNull] IReadonlyAuthTokenRepository authTokenProvider,
                                                     [NotNull] IRemoteSocialHubClient remoteSocialClient,
                                                     [NotNull] IEnumerable <IConnectionHubInitializable> connectionHubInitializable)
     : base(subscriptionService)
 {
     Logger = logger ?? throw new ArgumentNullException(nameof(logger));
     ServiceDiscoveryService    = serviceDiscoveryService ?? throw new ArgumentNullException(nameof(serviceDiscoveryService));
     PlayerDetails              = playerDetails ?? throw new ArgumentNullException(nameof(playerDetails));
     AuthTokenProvider          = authTokenProvider ?? throw new ArgumentNullException(nameof(authTokenProvider));
     RemoteSocialClient         = remoteSocialClient ?? throw new ArgumentNullException(nameof(remoteSocialClient));
     ConnectionHubInitializable = connectionHubInitializable ?? throw new ArgumentNullException(nameof(connectionHubInitializable));
 }
 public OnConnectionEstablishedClaimSessionEventListener(INetworkConnectionEstablishedEventSubscribable subscriptionService,
                                                         [NotNull] IPeerPayloadSendService <GameClientPacketPayload> sendService,
                                                         [NotNull] IReadonlyAuthTokenRepository authTokenRepository,
                                                         [NotNull] ILocalCharacterDataRepository characterDataRepository,
                                                         [NotNull] ICharacterService characterService,
                                                         [JetBrains.Annotations.NotNull] ILog logger,
                                                         [JetBrains.Annotations.NotNull] IGameContextEventQueueable eventQueueable)
     : base(subscriptionService)
 {
     SendService             = sendService ?? throw new ArgumentNullException(nameof(sendService));
     AuthTokenRepository     = authTokenRepository ?? throw new ArgumentNullException(nameof(authTokenRepository));
     CharacterDataRepository = characterDataRepository ?? throw new ArgumentNullException(nameof(characterDataRepository));
     CharacterService        = characterService ?? throw new ArgumentNullException(nameof(characterService));
     Logger         = logger ?? throw new ArgumentNullException(nameof(logger));
     EventQueueable = eventQueueable ?? throw new ArgumentNullException(nameof(eventQueueable));
 }
예제 #14
0
        /// <inheritdoc />
        protected override void Load(ContainerBuilder builder)
        {
            builder.Register <ISocialService>(context =>
            {
                IServiceDiscoveryService serviceDiscovery    = context.Resolve <IServiceDiscoveryService>();
                IReadonlyAuthTokenRepository tokenRepository = context.Resolve <IReadonlyAuthTokenRepository>();

                return(new AsyncSocialServiceClient(QueryForRemoteServiceEndpoint(serviceDiscovery, GladMMONetworkConstants.SOCIAL_SERVICE_NAME), new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(tokenRepository)
                }));
            });

            builder.RegisterType <DefaultRemoteSocialHubServer>()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder.RegisterType <DefaultRemoteSocialHubClient>()
            .AsImplementedInterfaces()
            .SingleInstance();
        }
예제 #15
0
 /// <inheritdoc />
 public PreBurstStartInstanceClientConnection([NotNull] IManagedNetworkClient <GameClientPacketPayload, GameServerPacketPayload> client, [NotNull] ICharacterService characterDataService, [NotNull] IReadonlyAuthTokenRepository authTokenRepo, [NotNull] ICharacterDataRepository characterDataRepo, [NotNull] IZoneServerService zoneService, [NotNull] ILog logger, [NotNull] INetworkClientManager networkClientManager)
 {
     Client = client ?? throw new ArgumentNullException(nameof(client));
     CharacterDataService = characterDataService ?? throw new ArgumentNullException(nameof(characterDataService));
     AuthTokenRepo        = authTokenRepo ?? throw new ArgumentNullException(nameof(authTokenRepo));
     CharacterDataRepo    = characterDataRepo ?? throw new ArgumentNullException(nameof(characterDataRepo));
     ZoneService          = zoneService ?? throw new ArgumentNullException(nameof(zoneService));
     Logger = logger ?? throw new ArgumentNullException(nameof(logger));
     NetworkClientManager = networkClientManager ?? throw new ArgumentNullException(nameof(networkClientManager));
 }
예제 #16
0
 /// <inheritdoc />
 public ProxiedAzureServiceBusHttpClientHandler([NotNull] IReadonlyAuthTokenRepository authTokenProvider, IQueueClient azureServiceBusClient, ILog logger)
 {
     AuthTokenProvider     = authTokenProvider ?? throw new ArgumentNullException(nameof(authTokenProvider));
     AzureServiceBusClient = azureServiceBusClient ?? throw new ArgumentNullException(nameof(azureServiceBusClient));
     Logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }
예제 #17
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            //https://stackoverflow.com/questions/4926676/mono-https-webrequest-fails-with-the-authentication-or-decryption-has-failed
            ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            ServicePointManager.CheckCertificateRevocationList = false;

            services.AddMvc(options =>
            {
                //This prevents ASP Core from trying to validate Vector3's children, which contain Vector3 (because Unity3D thanks)
                //so it will cause stack overflows. This will avoid it.
                //options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Vector3)));
            })
            .RegisterHealthCheckController();

            X509Certificate2 cert     = null;
            string           certPath = "Certs/TestCert.pfx";

            try
            {
                cert = X509Certificate2Loader.Create(certPath).Load();
            }
            catch (Exception e)
            {
                throw new System.InvalidOperationException($"Failed to load {nameof(X509Certificate2)} from Path: {certPath} \n\n StackTrace: {e.StackTrace}", e);
            }

            //This provides JwtBearer support for Authorize attribute/header
            services.AddJwtAuthorization(cert);
            services.AddResponseCaching();

            ISignalRServerBuilder signalRBuilder = services.AddSignalR(options => { }).AddJsonProtocol();

            //TODO: Handle failure.
            //This adds the SignalR rerouting to the specified SignalR backplane.
#if AZURE_RELEASE || AZURE_DEBUG
            signalRBuilder.AddAzureSignalR(Environment.GetEnvironmentVariable(GladMMOServiceConstants.AZURE_SIGNALR_CONNECTION_STRING_ENV_VAR_PATH));
#endif

            services.AddSingleton <IUserIdProvider, SignalRPlayerCharacterUserIdProvider>();

            //TODO: Support release/prod service query.
#if AZURE_RELEASE || AZURE_DEBUG
            services.AddSingleton <IServiceDiscoveryService>(provider => RestService.For <IServiceDiscoveryService>("https://test-guardians-servicediscovery.azurewebsites.net"));
#else
            services.AddSingleton <IServiceDiscoveryService>(provider => RestService.For <IServiceDiscoveryService>("http://72.190.177.214:5000"));
#endif

            services.AddSingleton <IReadonlyAuthTokenRepository, SocialServiceAuthTokenRepository>();

            services.AddSingleton <IAuthenticationService, AsyncEndpointAuthenticationService>(provider =>
            {
                return(new AsyncEndpointAuthenticationService(QueryForRemoteServiceEndpoint(provider.GetService <IServiceDiscoveryService>(), "Authentication"),
                                                              new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new BypassHttpsValidationHandler()
                }));
            });

            services.AddSingleton <ISocialServiceToGameServiceClient, AsyncEndpointISocialServiceToGameServiceClient>(provider =>
            {
                IReadonlyAuthTokenRepository repository = provider.GetService <IReadonlyAuthTokenRepository>();

                return(new AsyncEndpointISocialServiceToGameServiceClient(QueryForRemoteServiceEndpoint(provider.GetService <IServiceDiscoveryService>(), "GameServer"),
                                                                          new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(repository)
                }));
            });

            services.AddSingleton <INameQueryService>(provider =>
            {
                IReadonlyAuthTokenRepository repository = provider.GetService <IReadonlyAuthTokenRepository>();

                return(new AsyncEndpointNameQueryService(QueryForRemoteServiceEndpoint(provider.GetService <IServiceDiscoveryService>(), "NameQuery"),
                                                         new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(repository)
                }));
            });

            services.AddSingleton <ISocialService>(provider =>
            {
                IReadonlyAuthTokenRepository repository = provider.GetService <IReadonlyAuthTokenRepository>();

                return(new AsyncSocialServiceClient(QueryForRemoteServiceEndpoint(provider.GetService <IServiceDiscoveryService>(), GladMMONetworkConstants.SOCIAL_SERVICE_NAME),
                                                    new RefitSettings()
                {
                    HttpMessageHandlerFactory = () => new AuthenticatedHttpClientHandler(repository)
                }));
            });

            //This is for Hub connection event listeners
            services.AddSingleton <IOnHubConnectionEventListener, CharacterZoneOnHubConnectionEventListener>();
            services.AddSingleton <IOnHubConnectionEventListener, CharacterGuildOnHubConnectionEventListener>();

            //SocialSignalRMessageRouter<TRemoteClientHubInterfaceType> : ISocialModelMessageRouter<TRemoteClientHubInterfaceType>
            services.AddSingleton <ISocialModelMessageRouter <IRemoteSocialHubClient>, SocialSignalRMessageRouter <IRemoteSocialHubClient> >();
            services.AddSingleton <ISocialModelPayloadHandler <IRemoteSocialHubClient>, TestSocialModelHandler>();
            services.AddSingleton <ISocialModelPayloadHandler <IRemoteSocialHubClient>, GuildMemberInviteRequestModelHandler>();
            services.AddSingleton <ISocialModelPayloadHandler <IRemoteSocialHubClient>, PendingGuildInviteResultHandler>();

            RegisterDatabaseServices(services);
        }
예제 #18
0
 /// <inheritdoc />
 public AuthenticatedHttpClientHandler(IReadonlyAuthTokenRepository authTokenProvider)
     : base(new HttpClientHandler())
 {
     AuthTokenProvider = authTokenProvider ?? throw new ArgumentNullException(nameof(authTokenProvider));
 }
예제 #19
0
 /// <inheritdoc />
 public CharacterSelectionOnStartRequestCharacterListInitializable([NotNull] ICharacterService characterQueryable, [NotNull] IReadonlyAuthTokenRepository authTokenRepository, [NotNull] ILog logger)
 {
     CharacterQueryable  = characterQueryable ?? throw new ArgumentNullException(nameof(characterQueryable));
     AuthTokenRepository = authTokenRepository ?? throw new ArgumentNullException(nameof(authTokenRepository));
     Logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }