Giter VIP home page Giter VIP logo

Comments (4)

azzahrah avatar azzahrah commented on May 28, 2024 1

@eduard-vasinskyi thank for detail answer... really nice work with ActiveJ...

from activej.

eduard-vasinskyi avatar eduard-vasinskyi commented on May 28, 2024

Hello, @azzahrah
ActiveFsServer can work with any ActiveFs implementation. So if you need to create custom ActiveFs, you can do just that! One way to do so is to use a Decorator pattern. You can create a wrapper that would delegate all method calls to some ActiveFs, and decorate only methods that you need (upload() in your case). This approach would allow you to add custom logging, filtering, filename transformations, and other functionality to the ActiveFsServer. There are some pre-built adapters that you can find in ActiveFsAdapters class.
As for adding onFinishUpload handler, you may extend ForwardingActiveFs class and override upload() method to provide a custom upload finish handler. upload() actually returns a Promise of ChannelConsumer. To add a handler that would be called on upload finish you need to transform ChannelConsumer’s acknowledgement promise (by calling consumer.withAcknowledgement(...)). Acknowledgment promise will be completed once the upload ends either successfully or with an exception. You may log the result or do some other custom action. Here is an example of an adapter that writes upload status on upload finish. You can wrap any ActiveFs using this adapter and each upload() would end up calling a custom handler on finish.

    class CustomActiveFs extends ForwardingActiveFs {
        public CustomActiveFs(ActiveFs peer) {
            super(peer);
        }

        @Override
        public Promise<ChannelConsumer<ByteBuf>> upload(@NotNull String name) {
            return super.upload(name)
                    .map(consumer -> consumer.withAcknowledgement(ack ->
                            ack.whenComplete((result, e) -> {
                                // Your custom handler goes here
                                if (e == null) {
                                    System.out.println("Successful upload");
                                } else {
                                    System.err.println("Upload finished with error: " + e);
                                }
                            })));
        }
    }

PS. if you need to call asynchronous code in your handler, use ack.then()/ack.thenEx() instead of ack.whenComplete().

from activej.

eduard-vasinskyi avatar eduard-vasinskyi commented on May 28, 2024

We have added a standalone example based on this issue

from activej.

azzahrah avatar azzahrah commented on May 28, 2024

@eduard-vasinskyi thanks very much this really what we want... thanks...

from activej.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.