Example: Real-Time Mobile Robot Control with Mobile Agents
mobagent1
<?xml version="1.0"?>
<!DOCTYPE myMessage SYSTEM "gafmessage.dtd">
<GAF_MESSAGE>
 <MESSAGE message="MOBILE_AGENT">
  <MOBILE_AGENT>
   <AGENT_DATA>
    <NAME>mobagent1</NAME>
    <OWNER>IEL</OWNER>
    <HOME>10.0.0.11:5050</HOME>
    <TASKS task="1" num="0">
     <TASK num="0" 
           return="no-return" 
           complete="0" 
           server="10.0.0.15:5050">
     </TASK>
     <AGENT_CODE>
      <![CDATA[
#include <unistd.h>

struct Robot {
  int tabsens[9];
  int left_speed;
  int right_speed;
};

int main() {
  MCAgent_t agent, agent2;
  int retval;
  char **agentName;
  char **serviceName;
  int *agentID;
  int numResult;
  struct Robot system;
  int i, mutex_id;

  mutex_id = mc_SyncInit(55);

  mc_SearchForService("InitRobot",
                      &agentName,
                      &serviceName,
                      &agentID,
                      &numResult);
  agent = mc_FindAgentByID(agentID[0]);
  mc_CallAgentFunc(agent, "InitRobot", &retval, NULL);

  for(i=0; i<numResult; i++) {
    free(agentName[i]);
    free(serviceName[i]);
  }
  free(agentName);
  free(serviceName);
  free(agentID);

  while(mc_GetAgentStatus(mc_current_agent) == MC_AGENT_ACTIVE) {
    mc_CallAgentFunc(agent, "SensorMatrix", &retval, &system);

    mc_MutexLock(mutex_id);
    mc_SearchForService("RobotBehaviour",
                        &agentName,
                        &serviceName,
                        &agentID,
                        &numResult);
    while(numResult == 0) {
      mc_MutexUnlock(mutex_id);
      mc_MutexLock(mutex_id);
      mc_SearchForService("RobotBehaviour",
                          &agentName,
                          &serviceName,
                          &agentID,
                          &numResult);
    }
    agent2 = mc_FindAgentByID(agentID[0]);
    mc_CallAgentFunc(agent2, "RobotBehaviour", &retval, &system);
    mc_MutexUnlock(mutex_id);
    mc_CallAgentFunc(agent, "MoveRobot", &retval, &system);

    for(i=0; i<numResult; i++) {
      free(agentName[i]);
      free(serviceName[i]);
    }
    free(agentName);
    free(serviceName);
    free(agentID);

    usleep(100000);
  }

  mc_CallAgentFunc(agent, "StopRobot", &retval, NULL);

  mc_SetAgentStatus(mc_current_agent, MC_WAIT_FINISHED);

  return 0;
}
      ]]>
     </AGENT_CODE>
    </TASK>
   </AGENT_DATA>
  </MOBILE_AGENT>
 </MESSAGE>
</GAF_MESSAGE>