public SnapshotSerializer(
     IHaveState <TState> stateHolder,
     ISnapshotRepository <TState> repository,
     ILog log)
 {
     _stateHolder = stateHolder;
     _repository  = repository;
     _log         = log.CreateComponentScope($"{nameof(SnapshotSerializer<TState>)}[{_stateHolder.GetType().Name}]");
 }
Ejemplo n.º 2
0
 public NPCBaseState(GameObject npc)
 {
     this.npc = npc;
     steer    = npc.GetComponent <ContextSteering>();
     if (steer is null)
     {
         throw new UnassignedReferenceException("NPC must have a ContextSteering component");
     }
     stateController = npc.GetComponent <IHaveState>();
     if (stateController is null)
     {
         throw new UnassignedReferenceException("NPC must have component implementing IHaveState");
     }
 }
        private async Task <bool> DeserializeAsync <TState>(ILog log, IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
        {
            await log.WriteInfoAsync(nameof(DeserializeAsync), "", "Loading state...");

            var state = await repository.TryGetAsync();

            if (state == null)
            {
                await log.WriteWarningAsync("SnapshotSerializer", nameof(DeserializeAsync),
                                            stateHolder.GetType().Name, "No snapshot found to deserialize");

                return(false);
            }

            string stateDescription;

            try
            {
                stateDescription = stateHolder.DescribeState(state);
            }
            catch (NotSupportedException)
            {
                await log.WriteWarningAsync(nameof(DeserializeAsync), "", "Not supported, skipping");

                return(false);
            }

            await log.WriteInfoAsync(nameof(DeserializeAsync), stateDescription, "Settings state...");

            try
            {
                stateHolder.SetState(state);
            }
            catch (NotSupportedException)
            {
                await log.WriteWarningAsync(nameof(DeserializeAsync), "", "Not supported, skipping");

                return(false);
            }

            await log.WriteInfoAsync(nameof(DeserializeAsync), "", "State was set");

            return(true);
        }
        private static async Task SerializeAsync <TState>(ILog log, IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
        {
            log.Info(nameof(SerializeAsync), "Gettings state...");

            TState state;

            try
            {
                state = stateHolder.GetState();
            }
            catch (NotSupportedException)
            {
                log.Warning(nameof(SerializeAsync), "Not supported, skipping");
                return;
            }

            log.Info(nameof(SerializeAsync), "Saving state...", stateHolder.DescribeState(state));

            await repository.SaveAsync(state);

            log.Info(nameof(SerializeAsync), "State saved");
        }
 public async Task <bool> DeserializeAsync <TState>(IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
 {
     return(await DeserializeAsync(_log.CreateComponentScope($"{nameof(SnapshotSerializer)}[{stateHolder.GetType().Name}]"), stateHolder, repository));
 }
 public async Task SerializeAsync <TState>(IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
 {
     await SerializeAsync(_logFactory.CreateLog($"{nameof(SnapshotSerializer)}[{stateHolder.GetType().Name}]"), stateHolder, repository);
 }
Ejemplo n.º 7
0
 public UpdateByState(IHaveState gameOjbect) =>
 this.gameOjbect = gameOjbect;