Что ж, это было удивительно просто, когда я нашел правильный код.
Реализация команды достаточно проста, в данном случае я только что начал с заглушки для тестирования:
class ALLO : AbstractCommand() {
override fun execute(session: FtpIoSession, context: FtpServerContext, request: FtpRequest) {
session.write(LocalizedFtpReply.translate(session, request, context,
FtpReply.REPLY_200_COMMAND_OKAY, "ALLO", "bring it!"))
}
}
Унаследовать AbstractCommand, переопределить execute и записать ответ на сеанс.
Конечно, тогда возникает вопрос, как сообщить серверу о реализации, что также оказывается действительно простым, хотя там, конечно, чертовски нет никакой документации.Но вы можете просто создать экземпляр CommandFactoryFactory, отобразить вашу реализацию, построить CommandFactory и установить его в FtpServerFactory:
val commandFactoryFactory = CommandFactoryFactory()
commandFactoryFactory.addCommand("ALLO", ALLO())
serverFactory.commandFactory = commandFactoryFactory.createCommandFactory()