The design is more Object Oriented and cleaner than it is for the server thanks to QPluginLoader.
This is an example of what a plugin looks like:
#include "UtilityInterface.h"
#include "GuiInterface.h"
#include "NetworkInterface.h"
class FilesUtility : public QObject, public UtilityInterface, public GuiInterface, public NetworkInterface
{
Q_OBJECT
Q_INTERFACES(UtilityInterface GuiInterface NetworkInterface)
public:
FilesUtility();
~FilesUtility();
bool initialize_gui(QLayout* qt_layout);
bool receive_message(const std::string& workplace_name, const std::string& message);
bool load_workspace(const std::string& workspace_name);
};
Basically you have to implement interfaces in order for Mira core to be able to interact with the Plugin.
There are some interfaces that are going to be required, and others are going to be optional.
With this design it is also really easy for utilities to communicate with each other. All that is necessary is for utilities to share interfaces, request the other utility's object, and just use the interface. This is not implemented yet, but it's fairly easy to do.
All that's needed now is a good library for plugins to use to interact with Mira core. This will probably be an ever-evolving library, at least until we get to release our first version of Mira.
After I get the library started, I will propose a merge with trunk. But for now you can follow this code in my Launchpad branch.
After I get the library started, I will propose a merge with trunk. But for now you can follow this code in my Launchpad branch.
2 comments:
This is excellent work so far, Alan. Great job with the design. Keep it up!
Thanks Max.
I think we're heading to 0.1 here soon.
I think at the latest, by mid January we should be able to release 0.1 with more than the features expected.
Post a Comment