/**
* Constructor for the Unity plugin, initialized Unity, and common options values
*
+ */
+
+UnityPlugin::UnityPlugin() : mUnityUpdateChannel(NULL)
+{
+}
+
+/**
+ * Initializer for the Unity plugin, initialized Unity, and common options values
+ *
* @param[in] ctx Host application context.
*
+ * @return true if initialization was successful.
*/
-UnityPlugin::UnityPlugin(ToolsAppCtx *ctx) : mUnityUpdateChannel(NULL)
+gboolean
+UnityPlugin::Initialize(ToolsAppCtx *ctx)
{
ASSERT(ctx);
mUnityUpdateChannel = UnityUpdateChannelInit();
if (NULL == mUnityUpdateChannel) {
Warning("%s: Unable to initialize Unity update channel.\n", __FUNCTION__);
- return;
+ return false;
}
unityHostCallbacks.updateCbCtx = mUnityUpdateChannel;
/* blue */ 0xdc << 16;
}
Unity_SetConfigDesktopColor(desktopColor);
+ return true;
}
public:
virtual ~ToolsPlugin() {};
+
+ /**
+ * Initializer for the plugin.
+ *
+ * @param[in] ctx Host application context.
+ *
+ * @return true if initialization was successful.
+ */
+ virtual gboolean Initialize(ToolsAppCtx *ctx) = 0;
+
/**
* Handles a reset signal. This callback is called when the service receives a
* "reset" message from the VMX, meaning the VMX may be restarting the RPC
class UnityPlugin : public ToolsPlugin {
public:
- UnityPlugin(ToolsAppCtx *ctx);
+ UnityPlugin();
virtual ~UnityPlugin();
+ virtual gboolean Initialize(ToolsAppCtx *ctx);
+
virtual gboolean Reset(gpointer src) { return TRUE; }
virtual void Shutdown(gpointer src) {};
virtual gboolean SetOption(gpointer src, const std::string &option, const std::string &value)
#ifdef _WIN32
class UnityPluginWin32 : public UnityPlugin {
public:
- UnityPluginWin32(ToolsAppCtx *ctx);
+ UnityPluginWin32();
virtual ~UnityPluginWin32();
+ virtual gboolean Initialize(ToolsAppCtx *ctx);
+
virtual std::vector<ToolsAppCapability> GetCapabilities(gboolean set);
virtual void SessionChange(gpointer src, DWORD code, DWORD id) {};
ToolsPlugin *pluginInstance = NULL;
#if WIN32
- pluginInstance = new UnityPluginWin32(ctx);
+ pluginInstance = new UnityPluginWin32();
#else // Linux
- pluginInstance = new UnityPlugin(ctx);
+ pluginInstance = new UnityPlugin();
#endif
if (!pluginInstance) {
// There's nothing we can do if we can't construct the plugin instance
return NULL;
}
+
+ if (!pluginInstance->Initialize(ctx)) {
+ g_warning("%s: Unity Plugin failed to initialize.\n", __FUNCTION__);
+ delete pluginInstance;
+ return NULL;
+ }
regData._private = pluginInstance;
std::vector<RpcChannelCallback> rpcs = pluginInstance->GetRpcCallbackList();