Asynchronous capture

Exporting can be invoked from the injected JavaScript (done using the --callbackFilePath option). If the --asyncCapture option is enabled, the injected script will trigger the CAPTURE_EXIT event. You need to call the following method to invoke the export:


FusionExport.emit('CAPTURE_EXIT');

By default, FusionExport waits for 6 seconds for the event to trigger/occur. You can opt to increase the wait time up to 60 seconds. To do so, set the --maxWaitForCaptureExit option in milliseconds. To use asynchronous capture, you can use the CLI or SDKs of the languages mentioned below, using the commands given below:


    using System;
    using System.IO;
    using System.Linq;
    using FusionCharts.FusionExport.Client; // Import sdk

    namespace FusionExportTest {
        public static class AsyncCapture {
            public static void Run(string host = Constants.DEFAULT_HOST, int port = Constants.DEFAULT_PORT) {
                // Instantiate the ExportConfig class and add the required configurations
                ExportConfig exportConfig = new ExportConfig();
                exportConfig.Set("chartConfig", File.ReadAllText("./resources/scrollchart.json"));
                exportConfig.Set("callbackFilePath", "./resources/expand_scroll.js");
                exportConfig.Set("asyncCapture", "true");

                // Instantiate the ExportManager class
                ExportManager em = new ExportManager(host: host, port: port);
                // Call the Export() method with the export config and the respective callbacks
                em.Export(exportConfig, OnExportDone, OnExportStateChanged);
            }

            // Called when export is done
            static void OnExportDone(ExportEvent ev, ExportException error) {
                if (error != null) {
                    Console.WriteLine("Error: " + error);
                } else {
                    var fileNames = ExportManager.GetExportedFileNames(ev.exportedFiles);
                    Console.WriteLine("Done: " + String.Join(", ", fileNames)); // export result
                }
            }

            // Called on each export state change
            static void OnExportStateChanged(ExportEvent ev) {
                Console.WriteLine("State: " + ev.state.customMsg);
            }
        }
    }


    import com.fusioncharts.fusionexport.client.*; // import sdk

    public class ExportChart {
        public static void main(String[] args) throws Exception {

            String chartConfig = "fullPath/resources/static/scrollchart.json";
            String localJS = "fullPath/resources/static/expand_scroll.js";

            // Instantiate the ExportConfig class and add the required configurations
            ExportConfig config = new ExportConfig();
            config.set("chartConfig", chartConfig);
            config.set("callbackFilePath", localJS);
            config.set("asyncCapture", "true");

            // Instantiate the ExportManager class
            ExportManager manager = new ExportManager(config);
            // Call the export() method with the export config and the respective callbacks
            manager.export(new ExportDoneListener() {
                    @Override
                    public void exportDone(ExportDoneData result, ExportException error) {
                        if (error != null) {
                            System.out.println(error.getMessage());
                        } else {
                            ExportManager.saveExportedFiles("fullpath", result);
                        }
                    }
                },
                new ExportStateChangedListener() {
                    @Override
                    public void exportStateChanged(ExportState state) {
                        System.out.println("STATE: " + state.reporter);
                    }
                });
        }
    }


    <?php
    // Async capture
    require DIR . '/../vendor/autoload.php';
    // Use the sdk
    use FusionExport\ExportManager;
    use FusionExport\ExportConfig;
    // Instantiate the ExportConfig class and add the required configurations
    $exportConfig = new ExportConfig();
    $exportConfig->set('chartConfig', realpath('resources/single.json'));
    $exportConfig->set('callbackFilePath', realpath('resources/expand_scroll.js'));
    $exportConfig->set('asyncCapture', 'true');
    // Called on each export state change
    $onStateChange = function ($event) {
        $state = $event->state;
        echo('STATE: [' . $state->reporter . '] ' . $state->customMsg . "\n");
    };
    // Called when export is done
    $onDone = function ($event, $e) {
        $export = $event->export;
        if ($e) {
            echo('ERROR: ' . $e->getMessage());
        } else {
            foreach ($export as $file) {
                echo('DONE: ' . $file->realName. "\n");
            }
            ExportManager::saveExportedFiles($export);
        }
    };
    // Instantiate the ExportManager class
    $exportManager = new ExportManager();
    // Call the export() method with the export config and the respective callbacks
    $exportManager->export($exportConfig, $onDone, $onStateChange);


    // Async capture
    const path = require('path');

    // Require FusionExport
    const {
        ExportManager,
        ExportConfig
    } = require('../');

    // Instantiate ExportManager
    const exportManager = new ExportManager();

    // Instantiate ExportConfig and add the required configurations
    const exportConfig = new ExportConfig();

    exportConfig.set('chartConfig', path.join(dirname, 'resources', 'single.json'));
    exportConfig.set('callbackFilePath', path.join(dirname, 'resources', 'expand_scroll.js'));
    exportConfig.set('asyncCapture', true);

    // provide the export config
    exportManager.export(exportConfig);

    // Called when export is done
    exportManager.on('exportDone', (outputFileBag) => {
        outputFileBag.forEach((op) => {
            console.log(DONE: ${op.realName});
        });

        ExportManager.saveExportedFiles(outputFileBag);
    });

    // Called on each export state change
    exportManager.on('exportStateChange', (state) => {
        console.log([${state.reporter}] ${state.customMsg});
    });

    // Called on erroe
    exportManager.on('error', (err) => {
        console.error(err);
    });


    #!/usr/bin/env python

    from fusionexport
    import ExportManager, ExportConfig# Import sdk


    def read_file(file_path):
        try:
        with open(file_path, "r") as f:
        return f.read()
    except Exception as e:
        print(e)


    # Called when
    export is done
    def on_export_done(event, error):
        if error:
        print(error)
    else :
        ExportManager.save_exported_files("exported_images", event["result"])


    # Called on each
    export state change
    def on_export_state_changed(event):
        print(event["state"])


    # Instantiate the ExportConfig class and add the required configurations
    export_config = ExportConfig()
    export_config["chartConfig"] = read_file("scrollchart.json")
    export_config["callbackFilePath"] = "expand_scroll.js"
    export_config["asyncCapture"] = True

    # Provide port and host of FusionExport Service
    export_server_host = "127.0.0.1"
    export_server_port = 1337

    # Instantiate the ExportManager class
    em = ExportManager(export_server_host, export_server_port)# Call the
    export () method with the
    export config and the respective callbacks
    em.export(export_config, on_export_done, on_export_state_changed)