public async Task <IActionResult> JoinZoneProximityChat([FromServices] ICharacterSessionRepository characterSessionRepository, [FromServices] IFactoryCreatable <VivoxTokenClaims, VivoxTokenClaimsCreationContext> claimsFactory, [FromServices] IVivoxTokenSignService signService) { int accountId = this.ClaimsReader.GetAccountIdInt(User); //If the user doesn't actually have a claimed session in the game //then we shouldn't log them into Vivox. if (!await characterSessionRepository.AccountHasActiveSession(accountId)) { return(BuildFailedResponseModel(VivoxLoginResponseCode.NoActiveCharacterSession)); } int characterId = await RetrieveSessionCharacterIdAsync(characterSessionRepository, accountId); CharacterSessionModel session = await characterSessionRepository.RetrieveAsync(characterId); //Players in the same zone will all join the same proximity channel such as Prox-1. //They can use this for proximity text and voice chat. //TODO: Use a factory for channel name generation maybe? VivoxTokenClaims claims = claimsFactory.Create(new VivoxTokenClaimsCreationContext(characterId, VivoxAction.JoinChannel, new VivoxChannelData(true, $"Prox-{session.ZoneId}"))); //We don't send it back in a JSON form even though it's technically a JSON object //because the client just needs it as a raw string anyway to put through the Vivox client API. return(BuildSuccessfulResponseModel(new VivoxChannelJoinResponse(signService.CreateSignature(claims), claims.DestinationSIPURI))); }
public virtual async Task <IActionResult> CreateObjectInstance([FromRoute(Name = "world")] long worldId, [FromServices][NotNull] TInstanceRepositoryType instanceObjectRepository, [FromServices][NotNull] IFactoryCreatable <TInstanceEntryModelType, WorldInstanceableEntryModelCreationContext> defaultInstanceEntryModelFactory, [FromServices][NotNull] ITypeConverterProvider <TInstanceEntryModelType, TInstanceTransportModelType> tableToNetworkModelConverter) { if (instanceObjectRepository == null) { throw new ArgumentNullException(nameof(instanceObjectRepository)); } if (defaultInstanceEntryModelFactory == null) { throw new ArgumentNullException(nameof(defaultInstanceEntryModelFactory)); } if (tableToNetworkModelConverter == null) { throw new ArgumentNullException(nameof(tableToNetworkModelConverter)); } TInstanceEntryModelType entry = defaultInstanceEntryModelFactory.Create(new WorldInstanceableEntryModelCreationContext(worldId)); bool result = await instanceObjectRepository.TryCreateAsync(entry); //No known reason that this should fail. if (!result) { return(BuildFailedResponseModel(SceneContentQueryResponseCode.GeneralServerError)); } //Otherwise, it has been created so let's get it return(await GetObjectInstance(entry.ObjectInstanceId, instanceObjectRepository, tableToNetworkModelConverter)); }
/// <inheritdoc /> public SpawnPlayerOnBurstingFinishedEventListener([NotNull] IClientFinishedBurstingEventSubscribable subscriptionService, [NotNull] ILocalPlayerData playerData, [NotNull] IReadonlyEntityGuidMappable <PlayerZoneData> zoneMappable, [NotNull] IFactoryCreatable <GameObject, RemotePlayerWorldRepresentationCreationContext> remotePlayerFactory) : base(subscriptionService) { PlayerData = playerData ?? throw new ArgumentNullException(nameof(playerData)); ZoneMappable = zoneMappable ?? throw new ArgumentNullException(nameof(zoneMappable)); RemotePlayerFactory = remotePlayerFactory ?? throw new ArgumentNullException(nameof(remotePlayerFactory)); }
/// <inheritdoc /> public GuildMessageBroadcastMessageHandler( [JetBrains.Annotations.NotNull] IFactoryCreatable <GuildChatMessageEventModel, GenericChatMessageContext <GuildChatMessageRequestModel> > outgoingMessageFactory, [JetBrains.Annotations.NotNull] IEntityGuidMappable <CharacterGuildMembershipStatusResponse> guildStatusMappable) : base(ChatChannels.GuildChannel, outgoingMessageFactory) { GuildStatusMappable = guildStatusMappable ?? throw new ArgumentNullException(nameof(guildStatusMappable)); }
public override Task <IActionResult> CreateObjectInstance([FromRoute(Name = "id")] long worldId, [FromServices] TInstanceRepositoryType instanceObjectRepository, [FromServices] IFactoryCreatable <TInstanceEntryModelType, WorldInstanceableEntryModelCreationContext> defaultInstanceEntryModelFactory, [FromServices] ITypeConverterProvider <TInstanceEntryModelType, TInstanceTransportModelType> tableToNetworkModelConverter) { return(Task.FromResult((IActionResult)BadRequest($"This request is not valid for {typeof(TInstanceTransportModelType).Name}."))); }
public async Task <IActionResult> JoinGuildChat([FromServices] ICharacterSessionRepository characterSessionRepository, [FromServices] IFactoryCreatable <VivoxTokenClaims, VivoxTokenClaimsCreationContext> claimsFactory, [FromServices] IGuildCharacterMembershipRepository guildMembershipRepository, [FromServices] IVivoxTokenSignService signService) { int accountId = this.ClaimsReader.GetAccountIdInt(User); //If the user doesn't actually have a claimed session in the game //then we shouldn't log them into Vivox. if (!await characterSessionRepository.AccountHasActiveSession(accountId)) { return(BuildFailedResponseModel(VivoxLoginResponseCode.NoActiveCharacterSession)); } int characterId = await RetrieveSessionCharacterIdAsync(characterSessionRepository, accountId); if (!await guildMembershipRepository.ContainsAsync(characterId)) { return(BuildFailedResponseModel(VivoxLoginResponseCode.ChannelUnavailable)); } int guildId = (await guildMembershipRepository.RetrieveAsync(characterId)).GuildId; //TODO: Use a factory for channel name generation maybe? VivoxTokenClaims claims = claimsFactory.Create(new VivoxTokenClaimsCreationContext(characterId, VivoxAction.JoinChannel, new VivoxChannelData(false, $"Guild-{guildId}"))); //We don't send it back in a JSON form even though it's technically a JSON object //because the client just needs it as a raw string anyway to put through the Vivox client API. return(BuildSuccessfulResponseModel(new VivoxChannelJoinResponse(signService.CreateSignature(claims), claims.DestinationSIPURI))); }
public ClientInitializeDefaultMovementGeneratorEventListener(IEntityCreationFinishedEventSubscribable subscriptionService, IEntityGuidMappable <IMovementGenerator <GameObject> > movementGeneratorMappable, IFactoryCreatable <IMovementGenerator <GameObject>, EntityAssociatedData <IMovementData> > movementGeneratorFactory, IReadonlyEntityGuidMappable <IMovementData> movementDataMappable) : base(subscriptionService, movementGeneratorMappable, movementGeneratorFactory, movementDataMappable) { }
public LoadSelectedCharacterAvatarEventListener(ICharacterSelectionButtonClickedEventSubscribable subscriptionService, [NotNull] IReadonlyEntityGuidMappable <CharacterAppearanceResponse> characterAppearanceMappable, [NotNull] IFactoryCreatable <CustomModelLoaderCancelable, CustomModelLoaderCreationContext> avatarLoaderFactory) : base(subscriptionService) { CharacterAppearanceMappable = characterAppearanceMappable ?? throw new ArgumentNullException(nameof(characterAppearanceMappable)); AvatarLoaderFactory = avatarLoaderFactory ?? throw new ArgumentNullException(nameof(avatarLoaderFactory)); }
public ClientOnEntityCreatingCreateWorldObjectRepresentationEventListener(IEntityCreationStartingEventSubscribable subscriptionService, IFactoryCreatable <GameObject, EntityPrefab> prefabFactory, IReadonlyEntityGuidMappable <IMovementData> movementDataMappable, ILocalCharacterDataRepository characterDataRepository) : base(subscriptionService, prefabFactory, movementDataMappable) { CharacterDataRepository = characterDataRepository; }
public PlayerSelfSpawnEventPayloadHandler(ILog logger, [NotNull] IFactoryCreatable <NetworkEntityNowVisibleEventArgs, EntityCreationData> visibileEventFactory , [NotNull] INetworkEntityVisibilityEventPublisher visibilityEventPublisher) : base(logger) { VisibileEventFactory = visibileEventFactory ?? throw new ArgumentNullException(nameof(visibileEventFactory)); VisibilityEventPublisher = visibilityEventPublisher ?? throw new ArgumentNullException(nameof(visibilityEventPublisher)); }
protected SharedOnEntityCreatingCreateWorldObjectRepresentationEventListener(IEntityCreationStartingEventSubscribable subscriptionService, [NotNull] IFactoryCreatable <GameObject, EntityPrefab> prefabFactory, [NotNull] IReadonlyEntityGuidMappable <IMovementData> movementDataMappable) : base(subscriptionService) { PrefabFactory = prefabFactory ?? throw new ArgumentNullException(nameof(prefabFactory)); MovementDataMappable = movementDataMappable ?? throw new ArgumentNullException(nameof(movementDataMappable)); }
/// <summary> /// Simplified creation API that creates a type <typeparamref name="TConstructionType"/> with provided <see cref="factory"/>. /// Only for creation contexts of <see cref="EmptyFactoryContext"/>. /// </summary> /// <typeparam name="TConstructionType">The construction type.</typeparam> /// <param name="factory">The factory instance.</param> /// <returns>An instance of the construction type.</returns> public static TConstructionType Create <TConstructionType>(this IFactoryCreatable <TConstructionType, EmptyFactoryContext> factory) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } return(factory.Create(EmptyFactoryContext.Instance)); }
/// <inheritdoc /> public InterestChangedPacketBuilder( [NotNull] IReadonlyEntityGuidMappable <IMovementData> movementMapper, [NotNull] IReadonlyEntityGuidMappable <IChangeTrackableEntityDataCollection> entityDataMapper, [NotNull] IFactoryCreatable <FieldValueUpdate, EntityFieldUpdateCreationContext> fieldUpdateFactory) { MovementMapper = movementMapper ?? throw new ArgumentNullException(nameof(movementMapper)); EntityDataMapper = entityDataMapper ?? throw new ArgumentNullException(nameof(entityDataMapper)); FieldUpdateFactory = fieldUpdateFactory ?? throw new ArgumentNullException(nameof(fieldUpdateFactory)); }
public ClientInitializeDefaultMovementGeneratorEventListener(IEntityCreationFinishedEventSubscribable subscriptionService, [NotNull] IEntityGuidMappable <IMovementGenerator <IWorldObject> > movementGeneratorMappable, [NotNull] IFactoryCreatable <IMovementGenerator <IWorldObject>, EntityAssociatedData <IMovementData> > movementGeneratorFactory, [NotNull] IReadonlyEntityGuidMappable <IMovementData> movementDataMappable) : base(subscriptionService) { MovementGeneratorMappable = movementGeneratorMappable ?? throw new ArgumentNullException(nameof(movementGeneratorMappable)); MovementGeneratorFactory = movementGeneratorFactory ?? throw new ArgumentNullException(nameof(movementGeneratorFactory)); MovementDataMappable = movementDataMappable ?? throw new ArgumentNullException(nameof(movementDataMappable)); }
/// <inheritdoc /> protected BaseTextChatGroupBroadcastSignalRMessageHandler(ChatChannels targetChannel, [JetBrains.Annotations.NotNull] IFactoryCreatable <TSendMessageType, GenericChatMessageContext <TMessageType> > outgoingMessageFactory) { if (!Enum.IsDefined(typeof(ChatChannels), targetChannel)) { throw new InvalidEnumArgumentException(nameof(targetChannel), (int)targetChannel, typeof(ChatChannels)); } TargetChannel = targetChannel; OutgoingMessageFactory = outgoingMessageFactory ?? throw new ArgumentNullException(nameof(outgoingMessageFactory)); }
public DefaultAvatarPedestalGameObjectBehaviour(NetworkEntityGuid targetEntity, GameObject rootSceneObject, IEntityDataFieldContainer data, [NotNull] IFactoryCreatable <CustomModelLoaderCancelable, CustomModelLoaderCreationContext> avatarLoaderFactory, [NotNull] ILog logger) : base(targetEntity, rootSceneObject, data) { AvatarLoaderFactory = avatarLoaderFactory ?? throw new ArgumentNullException(nameof(avatarLoaderFactory)); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
/// <inheritdoc /> public PlayerSelfSpawnEventHandler( ILog logger, IFactoryCreatable <GameObject, DefaultEntityCreationContext> playerFactory, IReadOnlyCollection <IGameInitializable> initializables, ILocalPlayerDetails localPlayerDetails) : base(logger) { PlayerFactory = playerFactory ?? throw new ArgumentNullException(nameof(playerFactory)); Initializables = initializables ?? throw new ArgumentNullException(nameof(initializables)); LocalPlayerDetails = localPlayerDetails ?? throw new ArgumentNullException(nameof(localPlayerDetails)); }
/// <inheritdoc /> public VisibilityChangeMessageSender( [NotNull] IReadonlyEntityGuidMappable <IMovementData> movementDataMappable, [NotNull] IReadonlyEntityGuidMappable <IPeerPayloadSendService <GameServerPacketPayload> > sessionMappable, [NotNull] IReadonlyEntityGuidMappable <IChangeTrackableEntityDataCollection> entityDataMapper, [NotNull] IFactoryCreatable <FieldValueUpdate, EntityFieldUpdateCreationContext> fieldUpdateFactory) { MovementDataMappable = movementDataMappable ?? throw new ArgumentNullException(nameof(movementDataMappable)); SessionMappable = sessionMappable ?? throw new ArgumentNullException(nameof(sessionMappable)); EntityDataMapper = entityDataMapper ?? throw new ArgumentNullException(nameof(entityDataMapper)); FieldUpdateFactory = fieldUpdateFactory ?? throw new ArgumentNullException(nameof(fieldUpdateFactory)); }
/// <inheritdoc /> public AdditionalServerRegisterationPlayerEntityFactoryDecorator( IFactoryCreatable <GameObject, PlayerEntityCreationContext> decoratedFactory, IEntityGuidMappable <IPeerPayloadSendService <GameServerPacketPayload> > guidToSessionMappable, IEntityGuidMappable <InterestCollection> guidToInterestCollectionMappable, IDictionary <int, NetworkEntityGuid> connectionIdToControllingEntityMap) { DecoratedFactory = decoratedFactory; GuidToSessionMappable = guidToSessionMappable; GuidToInterestCollectionMappable = guidToInterestCollectionMappable; ConnectionIdToControllingEntityMap = connectionIdToControllingEntityMap; }
public RequestStaticGameObjectSpawnsEventListener(IServerStartingEventSubscribable subscriptionService, [NotNull] IEventPublisher <IEntityCreationRequestedEventSubscribable, EntityCreationRequestedEventArgs> entityCreationRequester, [NotNull] IFactoryCreatable <NetworkEntityGuid, GameObjectInstanceModel> gameObjectGuidFactory, [NotNull] IGameObjectDataService gameObjectDataService, [NotNull] ILog logger) : base(subscriptionService) { EntityCreationRequester = entityCreationRequester ?? throw new ArgumentNullException(nameof(entityCreationRequester)); GameObjectGuidFactory = gameObjectGuidFactory ?? throw new ArgumentNullException(nameof(gameObjectGuidFactory)); GameObjectDataService = gameObjectDataService ?? throw new ArgumentNullException(nameof(gameObjectDataService)); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
public OnEntityCreatingRegisterModelChangeListenerEventListener(IEntityCreationStartingEventSubscribable subscriptionService, [NotNull] IEntityDataChangeCallbackRegisterable entityDataCallbackRegister, [NotNull] ILog logger, [NotNull] IFactoryCreatable <CustomModelLoaderCancelable, CustomModelLoaderCreationContext> avatarLoaderFactory, [NotNull] IEntityGuidMappable <CustomModelLoaderCancelable> avatarLoaderMappable) : base(subscriptionService) { EntityDataCallbackRegister = entityDataCallbackRegister ?? throw new ArgumentNullException(nameof(entityDataCallbackRegister)); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); AvatarLoaderFactory = avatarLoaderFactory ?? throw new ArgumentNullException(nameof(avatarLoaderFactory)); AvatarLoaderMappable = avatarLoaderMappable ?? throw new ArgumentNullException(nameof(avatarLoaderMappable)); }
public PlayerCreatedSendPlayerCreationPayloadToPlayerEventListener(IEntityCreationFinishedEventSubscribable subscriptionService, INetworkMessageSender <GenericSingleTargetMessageContext <PlayerSelfSpawnEventPayload> > sender, IReadonlyEntityGuidMappable <IMovementData> movementDataMappable, IFactoryCreatable <FieldValueUpdate, EntityFieldUpdateCreationContext> entityDataUpdateFactory, IReadonlyEntityGuidMappable <IEntityDataFieldContainer> entityDataMappable) : base(subscriptionService) { Sender = sender; MovementDataMappable = movementDataMappable; EntityDataUpdateFactory = entityDataUpdateFactory; EntityDataMappable = entityDataMappable; }
/// <inheritdoc /> public PlayerCreatedSendPlayerCreationPayloadToPlayerEventListener( IPlayerWorldSessionCreatedEventSubscribable subscriptionService, [NotNull] INetworkMessageSender <GenericSingleTargetMessageContext <PlayerSelfSpawnEventPayload> > sender, [NotNull] IReadonlyEntityGuidMappable <IMovementData> movementDataMappable, [NotNull] IFactoryCreatable <FieldValueUpdate, EntityFieldUpdateCreationContext> entityDataUpdateFactory, [NotNull] IReadonlyEntityGuidMappable <IEntityDataFieldContainer> entityDataMappable) : base(subscriptionService) { Sender = sender ?? throw new ArgumentNullException(nameof(sender)); MovementDataMappable = movementDataMappable ?? throw new ArgumentNullException(nameof(movementDataMappable)); EntityDataUpdateFactory = entityDataUpdateFactory ?? throw new ArgumentNullException(nameof(entityDataUpdateFactory)); EntityDataMappable = entityDataMappable ?? throw new ArgumentNullException(nameof(entityDataMappable)); }
/// <inheritdoc /> public GameRemotePlayerWarpAckedSpawnEventListener( IRemoteClientAcknowledgedWarpEventSubscribable subscriptionService, [NotNull] IZoneSettings zoneSettings, [NotNull] ILog logger, [NotNull] IFactoryCreatable <GameObject, RemotePlayerWorldRepresentationCreationContext> remotePlayerFactory, IReadonlyEntityGuidMappable <PlayerZoneData> zoneDataMappable) : base(subscriptionService) { ZoneSettings = zoneSettings ?? throw new ArgumentNullException(nameof(zoneSettings)); Logger = logger ?? throw new ArgumentNullException(nameof(logger)); RemotePlayerFactory = remotePlayerFactory ?? throw new ArgumentNullException(nameof(remotePlayerFactory)); ZoneDataMappable = zoneDataMappable; }
/// <inheritdoc /> public EntityDataUpdateManager( IReadonlyEntityGuidMappable <IPeerPayloadSendService <GameServerPacketPayload> > sessionMappable, IReadonlyEntityGuidMappable <InterestCollection> guidToInterestCollectionMappable, IFactoryCreatable <FieldValueUpdate, EntityFieldUpdateCreationContext> updateFactory, IReadonlyEntityGuidMappable <IChangeTrackableEntityDataCollection> changeTrackingCollections, [NotNull] IReadonlyKnownEntitySet knownEntities) { SessionMappable = sessionMappable; GuidToInterestCollectionMappable = guidToInterestCollectionMappable; UpdateFactory = updateFactory; ChangeTrackingCollections = changeTrackingCollections; KnownEntities = knownEntities ?? throw new ArgumentNullException(nameof(knownEntities)); }
/// <inheritdoc /> public MovementUpdateMessageHandler( ILog logger, [NotNull] IFactoryCreatable <IMovementGenerator <IWorldObject>, EntityAssociatedData <IMovementData> > movementGeneratorFactory, [NotNull] IEntityGuidMappable <IMovementGenerator <IWorldObject> > movementGeneratorMappable, [NotNull] IEntityGuidMappable <IMovementData> movementDataMappable, [NotNull] IKnownEntitySet knownEntities) : base(logger) { MovementGeneratorFactory = movementGeneratorFactory ?? throw new ArgumentNullException(nameof(movementGeneratorFactory)); MovementGeneratorMappable = movementGeneratorMappable ?? throw new ArgumentNullException(nameof(movementGeneratorMappable)); MovementDataMappable = movementDataMappable ?? throw new ArgumentNullException(nameof(movementDataMappable)); KnownEntities = knownEntities ?? throw new ArgumentNullException(nameof(knownEntities)); }
public ClientInitializeDefaultMovementGeneratorEventListener(IEntityWorldObjectCreatedEventSubscribable subscriptionService, [NotNull] IEntityGuidMappable <IMovementGenerator <IWorldObject> > movementGeneratorMappable, [NotNull] IFactoryCreatable <IMovementGenerator <IWorldObject>, EntityAssociatedData <IMovementData> > movementGeneratorFactory, [NotNull] IReadonlyEntityGuidMappable <IMovementData> movementDataMappable, [JetBrains.Annotations.NotNull] RsUnityClient client, [JetBrains.Annotations.NotNull] IReadonlyNetworkTimeService timeService) : base(subscriptionService) { MovementGeneratorMappable = movementGeneratorMappable ?? throw new ArgumentNullException(nameof(movementGeneratorMappable)); MovementGeneratorFactory = movementGeneratorFactory ?? throw new ArgumentNullException(nameof(movementGeneratorFactory)); MovementDataMappable = movementDataMappable ?? throw new ArgumentNullException(nameof(movementDataMappable)); Client = client ?? throw new ArgumentNullException(nameof(client)); TimeService = timeService ?? throw new ArgumentNullException(nameof(timeService)); }
public LocalPlayerSpawnedBroadcastTrackerStateChangesTickable(ILocalPlayerSpawnedEventSubscribable subscriptionService, [NotNull] ICameraInputChangedEventSubscribable cameraInputSubscriptionService, [NotNull] IFactoryCreatable <PlayerNetworkTrackerChangeUpdateRequest, NetworkMovementTrackerTypeFlags> networkTrackerUpdateFactory, [NotNull] IPeerPayloadSendService <GameClientPacketPayload> sendService) : base(subscriptionService) { if (cameraInputSubscriptionService == null) { throw new ArgumentNullException(nameof(cameraInputSubscriptionService)); } NetworkTrackerUpdateFactory = networkTrackerUpdateFactory ?? throw new ArgumentNullException(nameof(networkTrackerUpdateFactory)); SendService = sendService ?? throw new ArgumentNullException(nameof(sendService)); cameraInputSubscriptionService.OnCameraInputChange += OnCameraInputChanged; }
/// <inheritdoc /> public PlayerEntityEntryManager( IPlayerSessionClaimedEventSubscribable subscriptionService, ISessionDisconnectionEventSubscribable disconnectionSubscriptionService, IFactoryCreatable <GameObject, PlayerEntityCreationContext> playerFactory, INetworkMessageSender <GenericSingleTargetMessageContext <PlayerSelfSpawnEventPayload> > spawnPayloadSender, ILog logger, GlobalEntityCollectionsLockingPolicy lockingPolicy) : base(subscriptionService, false, logger) { PlayerFactory = playerFactory; SpawnPayloadSender = spawnPayloadSender; LockingPolicy = lockingPolicy; disconnectionSubscriptionService.OnSessionDisconnection += OnSessionDisconnection; }
/// <inheritdoc /> public EntityDataUpdateManager( [NotNull] IPlayerEntityGuidEnumerable playerGuids, IReadonlyEntityGuidMappable <IPeerPayloadSendService <GameServerPacketPayload> > sessionMappable, IReadonlyEntityGuidMappable <InterestCollection> guidToInterestCollectionMappable, IFactoryCreatable <FieldValueUpdate, EntityFieldUpdateCreationContext> updateFactory, IReadonlyEntityGuidMappable <IChangeTrackableEntityDataCollection> changeTrackingCollections, [NotNull] GlobalEntityCollectionsLockingPolicy lockingPolicy) { PlayerGuids = playerGuids ?? throw new ArgumentNullException(nameof(playerGuids)); SessionMappable = sessionMappable; GuidToInterestCollectionMappable = guidToInterestCollectionMappable; UpdateFactory = updateFactory; ChangeTrackingCollections = changeTrackingCollections; LockingPolicy = lockingPolicy ?? throw new ArgumentNullException(nameof(lockingPolicy)); }