Skip to content

description.hello_world

Dmitry Koplyarov edited this page Sep 5, 2017 · 6 revisions

Back to description

Table of contents

IDL

First, you need to describe some interfaces for the components in Joint IDL.

IGreeter.idl

package example
{
    interface IGreeter
    {
        string Greet(string target);
    }
}

Generating adapters

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

Component code

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)

Component manifest

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"
}

Client code

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;
}

Running the example

>> g++ -Ljoint -Ljoint-loader -oexample runner/main.cpp
>> ./example
Hello, World!!!
Clone this wiki locally