private void HandleReceiveBodyPart(int key) { if (PerformerCache == null || !PerformerCache.TryGetComponent(out IActorComponent? actor)) { return; } CloseSurgeryUI(actor.playerSession); if (BodyCache == null) { return; } // TODO: sanity checks to see whether user is in range, user is still able-bodied, target is still the same, etc etc if (!OptionsCache.TryGetValue(key, out var targetObject)) { BodyCache.Owner.PopupMessage(PerformerCache, Loc.GetString("You see no useful way to use the {0} anymore.", Owner.Name)); return; } var target = (IBodyPart)targetObject; var message = target.TryAddMechanism(this) ? Loc.GetString("You jam {0:theName} inside {1:them}.", Owner, PerformerCache) : Loc.GetString("You can't fit it in!"); BodyCache.Owner.PopupMessage(PerformerCache, message); // TODO: {1:theName} }
void IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { if (eventArgs.Target == null) { return; } CloseAllSurgeryUIs(); OptionsCache.Clear(); PerformerCache = null; BodyCache = null; if (eventArgs.Target.TryGetComponent(out IBody? body)) { SendBodyPartListToUser(eventArgs, body); } else if (eventArgs.Target.TryGetComponent <IBodyPart>(out var part)) { DebugTools.AssertNotNull(part); if (!part.TryAddMechanism(this)) { eventArgs.Target.PopupMessage(eventArgs.User, Loc.GetString("You can't fit it in!")); } } }
private void SendBodyPartListToUser(AfterInteractEventArgs eventArgs, IBody body) { // Create dictionary to send to client (text to be shown : data sent back if selected) var toSend = new Dictionary <string, int>(); foreach (var(key, value) in body.Parts) { // For each limb in the target, add it to our cache if it is a valid option. if (value.CanAddMechanism(this)) { OptionsCache.Add(IdHash, value); toSend.Add(key + ": " + value.Name, IdHash++); } } if (OptionsCache.Count > 0 && eventArgs.User.TryGetComponent(out IActorComponent? actor)) { OpenSurgeryUI(actor.playerSession); UpdateSurgeryUIBodyPartRequest(actor.playerSession, toSend); PerformerCache = eventArgs.User; BodyCache = body; } else // If surgery cannot be performed, show message saying so. { eventArgs.Target.PopupMessage(eventArgs.User, Loc.GetString("You see no way to install the {0}.", Owner.Name)); } }
/// <summary> /// Called after the client chooses from a list of possible BodyParts that can be operated on. /// </summary> private void HandleReceiveBodyPart(int key) { if (PerformerCache == null || !_entities.TryGetComponent(PerformerCache.Value, out ActorComponent? actor)) { return; } CloseSurgeryUI(actor.PlayerSession); if (BodyCache == null) { return; } // TODO: sanity checks to see whether user is in range, user is still able-bodied, target is still the same, etc etc if (!OptionsCache.TryGetValue(key, out var targetObject)) { BodyCache.Owner.PopupMessage(PerformerCache.Value, Loc.GetString("mechanism-component-no-useful-way-to-use-message", ("partName", Name: _entities.GetComponent <MetaDataComponent>(Owner).EntityName))); return; } var target = (SharedBodyPartComponent)targetObject; var message = target.TryAddMechanism(this) ? Loc.GetString("mechanism-component-jam-inside-message", ("ownerName", Owner), ("them", PerformerCache)) : Loc.GetString("mechanism-component-cannot-fit-message"); BodyCache.Owner.PopupMessage(PerformerCache.Value, message); // TODO: {1:theName} }
private void SendBodyPartListToUser(AfterInteractEventArgs eventArgs, SharedBodyComponent body) { // Create dictionary to send to client (text to be shown : data sent back if selected) var toSend = new Dictionary <string, int>(); foreach (var(part, slot) in body.Parts) { // For each limb in the target, add it to our cache if it is a valid option. if (part.CanAddMechanism(this)) { OptionsCache.Add(IdHash, slot); toSend.Add(part + ": " + part.Name, IdHash++); } } if (OptionsCache.Count > 0 && _entities.TryGetComponent(eventArgs.User, out ActorComponent? actor)) { OpenSurgeryUI(actor.PlayerSession); UpdateSurgeryUIBodyPartRequest(actor.PlayerSession, toSend); PerformerCache = eventArgs.User; BodyCache = body; } else // If surgery cannot be performed, show message saying so. { eventArgs.Target?.PopupMessage(eventArgs.User, Loc.GetString("mechanism-component-no-way-to-install-message", ("partName", Name: _entities.GetComponent <MetaDataComponent>(Owner).EntityName))); } }
async Task <bool> IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { if (eventArgs.Target == null) { return(false); } CloseAllSurgeryUIs(); OptionsCache.Clear(); PerformerCache = null; BodyCache = null; if (_entities.TryGetComponent(eventArgs.Target.Value, out SharedBodyComponent? body)) { SendBodyPartListToUser(eventArgs, body); } else if (_entities.TryGetComponent <SharedBodyPartComponent?>(eventArgs.Target.Value, out var part)) { DebugTools.AssertNotNull(part); if (!part.TryAddMechanism(this)) { eventArgs.Target.Value.PopupMessage(eventArgs.User, Loc.GetString("mechanism-component-cannot-fit-message")); } } return(true); }
/// <summary> /// 添加自定义的Repository服务,完成dbcontext的注入,Repository的注入 /// </summary> /// <param name="services"></param> /// <param name="action"></param> public static void AddCache(this IServiceCollection services, Action <OptionsCache> action) { OptionsCache options = new OptionsCache(); action.Invoke(options); ServiceCache srv = new ServiceCache(services, options); srv.LoadCache(); }
static async Task Main(string[] args) { var loggerFactory = new LoggerFactory(); var optionsFactory = new OptionsFactory <ConsoleLoggerOptions>(new IConfigureOptions <ConsoleLoggerOptions> [0], new IPostConfigureOptions <ConsoleLoggerOptions> [0]); var optionsTokenChangeSource = new IOptionsChangeTokenSource <ConsoleLoggerOptions> [0]; var optionsCache = new OptionsCache <ConsoleLoggerOptions>(); var optionsMonitor = new OptionsMonitor <ConsoleLoggerOptions>(optionsFactory, optionsTokenChangeSource, optionsCache); var consoleLoggerProvider = new ConsoleLoggerProvider(optionsMonitor); loggerFactory.AddProvider(consoleLoggerProvider); var logger = loggerFactory.CreateLogger <Program>(); logger.LogTrace("Logging trace-level event"); logger.LogDebug("Logging debug-level event"); logger.LogInformation("Logging information-level event"); logger.LogWarning("Logging warning-level event"); logger.LogError("Logging error-level event"); logger.LogCritical("Logging critical-level event"); Console.ReadKey(); }
private static void InitializeLogger() { // Here a method had been used that was marked as obsolete in Microsoft.Extensions.Logging 2.2 // and has been removed in version 3.0 -> this is the workaround for it. // Refactoring the whole thing to make use of dependencyInjection will become necessary at some // point in the future. var configureNamedOptions = new ConfigureNamedOptions <ConsoleLoggerOptions>("", null); var postConfigureOptions = Enumerable.Empty <IPostConfigureOptions <ConsoleLoggerOptions> >(); var setups = new [] { configureNamedOptions }; var optionsFactory = new OptionsFactory <ConsoleLoggerOptions>(setups, postConfigureOptions); var optionsChangeTokenSources = Enumerable.Empty <IOptionsChangeTokenSource <ConsoleLoggerOptions> >(); var optionsMonitorCache = new OptionsCache <ConsoleLoggerOptions>(); var optionsMonitor = new OptionsMonitor <ConsoleLoggerOptions>(optionsFactory, optionsChangeTokenSources, optionsMonitorCache); var loggerFilterOptions = new LoggerFilterOptions { MinLevel = LogLevel.Debug }; var consoleLoggerProvider = new ConsoleLoggerProvider(optionsMonitor); var loggerFactory = new LoggerFactory(new[] { consoleLoggerProvider }, loggerFilterOptions); ApplicationLogging.LoggerFactory = loggerFactory; Logger = ApplicationLogging.CreateLogger("Program"); }
public ServiceCache(IServiceCollection _services, OptionsCache _options) { options = _options; services = _services; }