-
Notifications
You must be signed in to change notification settings - Fork 2
description.hello_world
Dmitry Koplyarov edited this page Sep 5, 2017
·
6 revisions
First, you need to describe some interfaces for the components in Joint IDL.
IGreeter.idl
package example
{
interface IGreeter
{
string Greet(string target);
}
}
Now, you should generate the adapters for the target languages.
Of course, in real life you would want a better integration with your buildsystem.
>> mkdir component
>> mkdir runner
>> joint-gen -l python -o component/adapters.py IGreeter.idl
>> joint-gen -l c++ -o runner/adapters.hpp IGreeter.idl
Implementing components is pretty straightforward.
component/__init__.py
from .adapters import *
class Greeter(example_IGreeter):
def Greet(self, target):
return "Hello, {}!!!".format(target)
def GetGreeter(moduleCtx):
return moduleCtx.CreateComponent(joint_IObject, Greeter)
Each component need a manifest that describes the binding that is used to load the component and some binding-dependent parameters (e.g. python module to be imported)
component.jm
{
"binding": "python",
"module": "component"
}
runner/main.cpp
#include "adapters.hpp"
#include <iostream>
int main(int argc, const char** argv)
{
joint::Module m("component.jm");
example::IGreeter_Ptr greeter = m.GetRootObject<example::IGreeter>("GetGreeter");
std::cout << greeter->Greet("World") << std::endl;
return 0;
}
>> g++ -Ljoint -Ljoint-loader -oexample runner/main.cpp
>> ./example
Hello, World!!!