About good practice for GLib.Application and Soup.Server

156 views Asked by At

I'm trying to create a simple server in vala using libsoup.

I am wondering if it is a good way to start a Soup.Server from a GLib.Application. Since using it synchronously (run is deprecated) is not recommended, the only way I found to keep it alive is to hold the default application.

public class Simple.Server : Soup.Server
{

    public Server () {
        Application.get_default ().hold ();
        add_handler(null, null_handler);
    }

    private void null_handler (Soup.Server server, Soup.Message message,
                               string path, HashTable<string,string>? query,
                               Soup.ClientContext client) {
        GLib.message ("path: %s", path);
        message.status_code = 404;
        message.set_response ("text/plain", Soup.MemoryUse.COPY, "".data);
    }
}

public class Simple.App : Application 
{
    private Simple.Server server;

    App () {
        Object (application_id: "org.dev.simple-server",
               flags: ApplicationFlags.FLAGS_NONE);
    }

    protected override void activate () {
        base.activate ();

        server = new Simple.Server();
        try {
            server.listen_all(8080, 0);
        }
        catch (Error e) {
            GLib.message ("Error n°%u: %s", e.code, e.message);
        }
    }

    protected override void shutdown () {
        base.shutdown ();
        server.disconnect ();
    }

    static int main (string[] args) {
        App app = new  Simple.App();
        return app.run (args);
    }
}

This is mimic of my code.

So here is the question, is it a good practice for starting the server, still using GLib.Application, or should I use (like examples say) only the server, starting/stopping manually the MainLoop ?

thanks.

0

There are 0 answers