Presuming you have a bocca 0.3 installed and in path, here's a simple example.
bocca create project myproj
cd myproj
./configure ; # generates utility scripts important when testing
bocca create port myport
bocca create component mycomponent --uses=myport:out --provides:myport:in
This creates a component with two ports (named "in" and "out") of the same type myport (full SIDL type name is myproj.myport). It uses the default language c++. To specify using another language, add the --language="LANG" option to create component; LANG is one of "c,cxx,f77,f90,python,java".
To put some brains in the system we need to add a method to the port:
bocca edit myport
brings up the editor with the myport sidl file. The sidl file actually resides somewhere in the project source tree (myproj/ports/sidl/myproj.myport.sidl) that we don't want to remember.
(If there's a problem starting the editor, see
BoccaEdit for hints.) Add method:
double doSomething(in double x);
in the block of the sidl file surrounded by:
// DO-NOT-DELETE bocca.splicer.begin(myproj.myport.methods)
...
// DO-NOT-DELETE bocca.splicer.end(myproj.myport.methods)
Now we need to implement doSomething in the component.
bocca edit -i mycomponent
brings up the editor with the component impl (implementation) file in c++.
here you will find (if you search):
// DO-NOT-DELETE splicer.begin(myproj.mycomponent.doSomething)
// Insert-Code-Here {myproj.mycomponent.doSomething} (doSomething method)
// DO-DELETE-WHEN-IMPLEMENTING exception.begin()
/*
* This method has not been implemented
*/
sidl
NotImplementedException ex = sidl
NotImplementedException::_create();
ex.setNote("This method has not been implemented");
ex.add(FILE, LINE, "doSomething");
throw ex;
// DO-DELETE-WHEN-IMPLEMENTING exception.end()
// DO-NOT-DELETE splicer.end(myproj.mycomponent.doSomething)
Replace the block contents with some code:
// DO-NOT-DELETE splicer.begin(myproj.mycomponent.doSomething)
return x*x;
// DO-NOT-DELETE splicer.end(myproj.mycomponent.doSomething)
and then type 'make' again and you have a working component!
To prove the component is working, type 'make check'.
To prove the component is working with a gui, type 'make testgui'.
Please note that the ccafe-gui freezing up after loading some but not all components is a known bug and has nothing to do with your component.