Next we implement the server-side functionality. Copy the generated skeleton file into the already known server/src/ directory.
~/build/pkg/hiworld/idl/OBJ-x86_586-l4v2> cp hiworld-template.c \
~/src/l4/pkg/hiworld/server/src/server.c
Modify the functions so they do what we want, write code that registers at the DROPS name server and calls the main server loop:
| hiworld/server/src/server.c |
#include <stdio.h>
#include <l4/names/libnames.h>
#include "hiworld-server.h"
char LOG_tag[9]="hiserver";
static int count;
void
hi_print_component(CORBA_Object _dice_corba_obj,
CORBA_Environment *_dice_corba_env){
printf("Hi world\n");
count++;
}
int
hi_count_component(CORBA_Object _dice_corba_obj,
CORBA_Environment *_dice_corba_env){
return count;
}
int main(void){
if(names_register("hiworld")==0){
printf("Error registering at nameserver\n");
return 1;
}
hi_server_loop(0);
}
|
We still have to tell BID that we want to compile another binary, containing the IDL server code and our implementation. Modify the makefile the following way:
| hiworld/server/src/Makefile |
PKGDIR ?= ../.. L4DIR ?= $(PKGDIR)/../.. TARGET = hiserver DEFAULT_RELOC = 0x01800000 SRC_C = server.c SERVERIDL = hiworld.idl include $(L4DIR)/mk/prog.mk |
You are ready to compile the server. BID knows where to find the files generated by the IDL compiler and arranges the include paths and additional object files for you.
~/src/l4/pkg/hiworld/server/src> make O=/path/to/build
If there are any problems, they are likely caused by typos, as your installation has already been proved correct in the previous steps.