protected override void HandleOperationRequest(OperationRequest request) { base.HandleOperationRequest(request); if (request.OperationCode == 0) { if (CommandHandlers.TryGetValue((ClientCommandName)request.Parameters[0], out Type type)) { var constraint = type.GetGenericArguments()[0]; var handleAction = type.GetMethod("Handle"); var activator = Activator.CreateInstance(type); handleAction.Invoke(activator, new object[] { this, Body.DeserializeRaw((byte[])request.Parameters[2], constraint, out long InReadCount) });
public Option <Any> HandleCommand(Any command, ICommandContext context) { return(Unwrap(() => { // TODO: Used to be a maybe... if (!CommandHandlers.TryGetValue(context.CommandName, out var handler)) { throw new InvalidOperationException( $"No command handler found for command [{context.CommandName}] on CRDT entity: {EntityClass}"); } return handler.Invoke(Entity, command, context); })); }
private void AddExtensions(IEnumerable <FtpCommandHandlerExtension> extensions) { foreach (var extension in extensions) { FtpCommandHandler handler; if (CommandHandlers.TryGetValue(extension.ExtensionFor, out handler)) { var extensionHost = handler as IFtpCommandHandlerExtensionHost; if (extensionHost != null) { foreach (var name in extension.Names) { extensionHost.Extensions.Add(name, extension); } } } } }
private Tuple <FtpCommand, IFtpCommandBase, bool> FindCommandHandler(FtpCommand command) { if (!CommandHandlers.TryGetValue(command.Name, out var handler)) { return(null); } if (!string.IsNullOrWhiteSpace(command.Argument) && handler is IFtpCommandHandlerExtensionHost extensionHost) { var extensionCommand = FtpCommand.Parse(command.Argument); if (extensionHost.Extensions.TryGetValue(extensionCommand.Name, out var extension)) { return(Tuple.Create(extensionCommand, (IFtpCommandBase)extension, extension.IsLoginRequired ?? handler.IsLoginRequired)); } } return(Tuple.Create(command, (IFtpCommandBase)handler, handler.IsLoginRequired)); }
private Tuple <FtpCommand, FtpCommandHandlerBase, bool> FindCommandHandler(FtpCommand command) { FtpCommandHandler handler; if (!CommandHandlers.TryGetValue(command.Name, out handler)) { return(null); } var extensionHost = handler as IFtpCommandHandlerExtensionHost; if (!string.IsNullOrWhiteSpace(command.Argument) && extensionHost != null) { var extensionCommand = FtpCommand.Parse(command.Argument); FtpCommandHandlerExtension extension; if (extensionHost.Extensions.TryGetValue(extensionCommand.Name, out extension)) { return(Tuple.Create(extensionCommand, (FtpCommandHandlerBase)extension, extension.IsLoginRequired ?? handler.IsLoginRequired)); } } return(Tuple.Create(command, (FtpCommandHandlerBase)handler, handler.IsLoginRequired)); }