packages feed

hs-mesos-0.20.0.2: ext/executor.cpp

#include "executor.h"

using namespace mesos;
namespace HsFFI {
class HsExecutor : public Executor
{
public:
	HsExecutor(
		OnExecutorRegisteredCallback* registeredCb,
		OnExecutorReRegisteredCallback* reRegisteredCb,
		OnExecutorDisconnectedCallback* disconnectedCb,
		OnExecutorLaunchTaskCallback* launchTaskCb,
		OnExecutorTaskKilledCallback* taskKilledCb,
		OnExecutorFrameworkMessageCallback* frameworkMessageCb,
		OnExecutorShutdownCallback* shutdownCb,
		OnExecutorErrorCallback* errorCb
	)
	{
		this->registeredCb = registeredCb;
		this->reRegisteredCb = reRegisteredCb;
		this->disconnectedCb = disconnectedCb;
		this->launchTaskCb = launchTaskCb;
		this->taskKilledCb = taskKilledCb;
		this->frameworkMessageCb = frameworkMessageCb;
		this->shutdownCb = shutdownCb;
		this->errorCb = errorCb;
	}

	void registered(ExecutorDriver* driver,
			const ExecutorInfo& executorInfo,
			const FrameworkInfo& frameworkInfo,
			const SlaveInfo& slaveInfo)
	{
		this->registeredCb(driver, &executorInfo, &frameworkInfo, &slaveInfo);
	}

	void reregistered(ExecutorDriver* driver,
			const SlaveInfo& slaveInfo)
	{
		this->reRegisteredCb(driver, &slaveInfo);
	}

	void disconnected(ExecutorDriver* driver)
	{
		this->disconnectedCb(driver);
	}

	void launchTask(ExecutorDriver* driver,
			const TaskInfo& taskInfo)
	{
		this->launchTaskCb(driver, &taskInfo);
	}

	void killTask(ExecutorDriver* driver,
			const TaskID& taskId)
	{
		this->taskKilledCb(driver, &taskId);
	}

	void frameworkMessage(ExecutorDriver* driver,
			const std::string& str)
	{
		this->frameworkMessageCb(driver, str.size(), str.data());
	}

	void shutdown(ExecutorDriver* driver)
	{
		this->shutdownCb(driver);
	}

	void error(ExecutorDriver* driver,
			const std::string& str)
	{
		this->errorCb(driver, str.size(), str.data());
	}
private:
	OnExecutorRegisteredCallback* registeredCb;
	OnExecutorReRegisteredCallback* reRegisteredCb;
	OnExecutorDisconnectedCallback* disconnectedCb;
	OnExecutorLaunchTaskCallback* launchTaskCb;
	OnExecutorTaskKilledCallback* taskKilledCb;
	OnExecutorFrameworkMessageCallback* frameworkMessageCb;
	OnExecutorShutdownCallback* shutdownCb;
	OnExecutorErrorCallback* errorCb;
};
}

// Executor
Executor* createExecutor(
		OnExecutorRegisteredCallback* registeredCb,
		OnExecutorReRegisteredCallback* reRegisteredCb,
		OnExecutorDisconnectedCallback* disconnectedCb,
		OnExecutorLaunchTaskCallback* launchTaskCb,
		OnExecutorTaskKilledCallback* taskKilledCb,
		OnExecutorFrameworkMessageCallback* frameworkMessageCb,
		OnExecutorShutdownCallback* shutdownCb,
		OnExecutorErrorCallback* errorCb
	)
{
	return new HsFFI::HsExecutor(registeredCb, reRegisteredCb, disconnectedCb, launchTaskCb, taskKilledCb, frameworkMessageCb, shutdownCb, errorCb);
}

void destroyExecutor(mesos::Executor* executor)
{
	delete executor;
}

// ExecutorDriver
ExecutorDriver* createExecutorDriver(Executor* executor)
{
	return new MesosExecutorDriver(executor);
}

void destroyExecutorDriver(ExecutorDriver* driver)
{
	delete driver;
}

int startExecutorDriver(ExecutorDriver* driver)
{
	return driver->start();
}

int stopExecutorDriver(ExecutorDriver* driver)
{
	return driver->stop();
}

int abortExecutorDriver(ExecutorDriver* driver)
{
	return driver->abort();
}

int joinExecutorDriver(ExecutorDriver* driver)
{
	return driver->join();
}

int runExecutorDriver(ExecutorDriver* driver)
{
	return driver->run();
}

int sendExecutorDriverStatusUpdate(ExecutorDriver* driver, TaskStatus* status)
{
	return driver->sendStatusUpdate(*status);
}

int sendExecutorDriverFrameworkMessage(ExecutorDriver* driver, char* stringData, int stringLength)
{
	std::string message(stringData, stringLength);
	return driver->sendFrameworkMessage(message);
}