#include <unistd.h>
#include <pthread.h>
#include <embedch.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include "include/libmc.h"
#include "include/macros.h"
#include "include/mc_platform.h"
#include "include/message.h"
#include "include/data_structures.h"
#include "include/fipa_acl_envelope.h"
#include "include/fipa_acl.h"
#include "include/agent.h"
#include "include/agent_task.h"
Go to the source code of this file.
Defines | |
#define | HOST_NAME_MAX 255 |
Functions | |
int | MC_AclDestroy (struct fipa_acl_message_s *message) |
Destroy a FIPA ACL message. | |
EXPORTMC fipa_acl_message_t * | MC_AclNew (void) |
Allocate a new ACL Message. | |
EXPORTMC int | MC_AclPost (MCAgent_t agent, struct fipa_acl_message_s *message) |
Post ACL message to agent. | |
EXPORTMC fipa_acl_message_t * | MC_AclReply (fipa_acl_message_t *acl_message) |
Reply to an ACL message. | |
EXPORTMC fipa_acl_message_t * | MC_AclRetrieve (MCAgent_t agent) |
Retrieve an ACL message. | |
EXPORTMC int | MC_AclSend (MCAgency_t attr, fipa_acl_message_t *acl) |
Send a composed ACL Message. | |
EXPORTMC fipa_acl_message_t * | MC_AclWaitRetrieve (MCAgent_t agent) |
Wait for and retrieve an ACL message. | |
int | MC_Acl_SetPerformative (fipa_acl_message_t *acl, enum fipa_performative_e performative) |
int | MC_Acl_SetSender (fipa_acl_message_t *acl, const char *name, const char *address) |
int | MC_Acl_AddReceiver (fipa_acl_message_t *acl, const char *name, const char *address) |
int | MC_Acl_AddReplyTo (fipa_acl_message_t *acl, const char *name, const char *address) |
int | MC_Acl_SetContent (fipa_acl_message_t *acl, const char *content) |
EXPORTMC int | MC_AddAgent (MCAgency_t attr, MCAgent_t agent) |
Add an agent to the agency 'attr'. | |
int | MC_Barrier (MCAgency_t attr, int id) |
EXPORTMC int | MC_BarrierInit (MCAgency_t attr, int id, int num_procs) |
Initialize a MobileC Barrier. | |
EXPORTMC int | MC_BarrierDelete (MCAgency_t attr, int id) |
Find and delete an initialized MobileC Barrier. | |
EXPORTMC int | MC_CallAgentFunc (MCAgent_t agent, const char *funcName, void *returnVal, void *varg) |
Calls a function defined in an agent. | |
EXPORTMC int | MC_ChInitializeOptions (MCAgency_t attr, ChOptions_t *options) |
Use custom ChOptions_t type for internal Ch interpretor. | |
MCAgent_t | MC_ComposeAgent (const char *name, const char *home, const char *owner, const char *code, const char *return_var_name, const char *server, int persistent) |
EXPORTMC int | MC_CondBroadcast (MCAgency_t attr, int id) |
Wakes up all agents/threads waiting on a condition variable. | |
EXPORTMC int | MC_CondSignal (MCAgency_t attr, int id) |
Wakes up at least one thread waiting on a condition variable. | |
EXPORTMC int | MC_CondWait (MCAgency_t attr, int id) |
Wait on a MobileC synchronization variable. | |
EXPORTMC int | MC_CondReset (MCAgency_t attr, int id) |
Reset a previously signalled MobileC condition variable. | |
int | MC_CopyAgent (MCAgent_t *agent_out, const MCAgent_t agent_in) |
Performs a deep-copy of an agent structure. | |
EXPORTMC int | MC_DeleteAgent (MCAgent_t agent) |
Stop and remove an agent. | |
int | MC_DestroyServiceSearchResult (char **agentName, char **serviceName, int *agentID, int numResult) |
Free memory allocated by a Service Search operation. | |
int | MC_DeregisterService (MCAgency_t agency, int agentID, const char *serviceName) |
EXPORTMC int | MC_End (MCAgency_t agency) |
End an agency. | |
EXPORTMC MCAgent_t | MC_FindAgentByName (MCAgency_t attr, const char *name) |
Find an agent by its name. | |
EXPORTMC MCAgent_t | MC_FindAgentByID (MCAgency_t attr, int ID) |
Find an agent by its id. | |
time_t | MC_GetAgentArrivalTime (MCAgent_t agent) |
EXPORTMC int | MC_GetAgentStatus (MCAgent_t agent) |
Get an agent's current status. | |
EXPORTMC char * | MC_GetAgentXMLString (MCAgent_t agent) |
Get an agent's xml string. | |
EXPORTMC void * | MC_GetAgentExecEngine (MCAgent_t agent) |
Retrieve an agent's Ch interpreter. | |
EXPORTMC int | MC_GetAgentID (MCAgent_t agent) |
Retrieve an agent's id. | |
EXPORTMC char * | MC_GetAgentName (MCAgent_t agent) |
EXPORTMC int | MC_GetAgentReturnData (MCAgent_t agent, int task_num, void **data, int *dim, int **extent) |
Get an agent's return data. | |
EXPORTMC int | MC_GetAgentNumTasks (MCAgent_t agent) |
Retrive the number of tasks an agent has. | |
EXPORTMC enum MC_AgentType_e | MC_GetAgentType (MCAgent_t agent) |
Get an agent's type. | |
int | MC_GetAllAgents (MCAgency_t attr, MCAgent_t **agents, int *num_agents) |
EXPORTMC int | MC_HaltAgency (MCAgency_t attr) |
Halt an agency: Do not process new entries in queues. | |
EXPORTMC MCAgency_t | MC_Initialize (int port, MCAgencyOptions_t *options) |
Initialize and start a MobileC agency. | |
EXPORTMC int | MC_InitializeAgencyOptions (struct MCAgencyOptions_s *options) |
Initialize MobileC options. | |
EXPORTMC int | MC_MutexLock (MCAgency_t attr, int id) |
Locks a MobileC synchronization variable as a mutex. | |
EXPORTMC int | MC_MutexUnlock (MCAgency_t attr, int id) |
EXPORTMC int | MC_PrintAgentCode (MCAgent_t agent) |
Prints an agents code to stdout. | |
EXPORTMC int | MC_RegisterService (MCAgency_t agency, MCAgent_t agent, int agentID, const char *agentName, char **serviceNames, int numServices) |
Register a new service with the Directory Facilitator. | |
EXPORTMC int | MC_ResumeAgency (MCAgency_t attr) |
Resumes a halted agency. | |
EXPORTMC MCAgent_t | MC_RetrieveAgent (MCAgency_t attr) |
Retrieves the oldest agent from an agency. | |
EXPORTMC char * | MC_RetrieveAgentCode (MCAgent_t agent) |
Retrieves an agent's Ch code. | |
EXPORTMC int | MC_ResetSignal (MCAgency_t attr) |
Reset a MobileC signal. | |
EXPORTMC int | MC_SearchForService (MCAgency_t attr, const char *searchString, char ***agentNames, char ***serviceNames, int **agentIDs, int *numResults) |
Search the directory facilitator for a service. | |
EXPORTMC int | MC_SemaphorePost (MCAgency_t attr, int id) |
Post to a MobileC synchronization variable semaphore. | |
EXPORTMC int | MC_SemaphoreWait (MCAgency_t attr, int id) |
Decreases a MobileC synchronization variable semaphore count by one. | |
int | MC_SendCh (MCAgency_t attr, const char *filename, const char *remotehost, int port) |
EXPORTMC int | MC_SendAgentMigrationMessage (MCAgency_t attr, const char *string, const char *hostname, int port) |
Sends an agent migration message. | |
EXPORTMC int | MC_SendAgentMigrationMessageFile (MCAgency_t attr, const char *filename, const char *hostname, int port) |
Sends an agent migration message. | |
EXPORTMC int | MC_SendSteerCommand (MCAgency_t attr, enum MC_SteerCommand_e cmd) |
int | MC_SetAgentStatus (MCAgent_t agent, int status) |
Set an agent's status. | |
int | MC_SetDefaultAgentStatus (MCAgency_t agency, enum MC_AgentStatus_e status) |
Sets default incoming agent status. | |
EXPORTMC int | MC_SetThreadOn (MCAgencyOptions_t *options, enum MC_ThreadIndex_e index) |
Sets a MobileC thread to "on" status. | |
EXPORTMC int | MC_SetThreadsAllOn (MCAgencyOptions_t *options) |
Set all Mobile-C threads on. | |
EXPORTMC int | MC_SetThreadOff (MCAgencyOptions_t *options, enum MC_ThreadIndex_e index) |
Sets a MobileC thread to "off" status. | |
EXPORTMC int | MC_SetThreadsAllOff (MCAgencyOptions_t *options) |
Set all MobileC threads to 'off' status. | |
EXPORTMC int | MC_Steer (MCAgency_t attr, int(*funcptr)(void *data), void *arg) |
Set up a steerable algorithm. | |
EXPORTMC enum MC_SteerCommand_e | MC_SteerControl (void) |
The MobileC user-algorithm steering function. | |
EXPORTMC int | MC_SyncDelete (MCAgency_t attr, int id) |
Deletes a previously initialized synchronization variable. | |
EXPORTMC int | MC_SyncInit (MCAgency_t attr, int id) |
Initializes a new MobileC synchronization variable. | |
EXPORTMC int | MC_TerminateAgent (MCAgent_t agent) |
Halt a running agent. | |
int | MC_MainLoop (MCAgency_t attr) |
Wait indefinitely. | |
EXPORTMC int | MC_WaitAgent (MCAgency_t attr) |
Wait indefinitely. | |
EXPORTMC MCAgent_t | MC_WaitRetrieveAgent (MCAgency_t attr) |
Wait and retrieve an agent. | |
EXPORTMC int | MC_WaitSignal (MCAgency_t attr, int signals) |
Wait for a MobileC signal. | |
int | MC_AclDestroy_chdl (void *varg) |
void * | MC_AclNew_chdl (void *varg) |
int | MC_AclPost_chdl (void *varg) |
EXPORTCH void * | MC_AclReply_chdl (void *varg) |
EXPORTCH void * | MC_AclRetrieve_chdl (void *varg) |
EXPORTCH int | MC_AclSend_chdl (void *varg) |
EXPORTCH void * | MC_AclWaitRetrieve_chdl (void *varg) |
EXPORTCH int | MC_Acl_SetPerformative_chdl (void *varg) |
EXPORTCH int | MC_Acl_SetSender_chdl (void *varg) |
EXPORTCH int | MC_Acl_AddReceiver_chdl (void *varg) |
EXPORTCH int | MC_Acl_AddReplyTo_chdl (void *varg) |
EXPORTCH int | MC_Acl_SetContent_chdl (void *varg) |
EXPORTCH int | MC_AddAgent_chdl (void *varg) |
EXPORTCH int | MC_CallAgentFunc_chdl (void *varg) |
EXPORTCH int | MC_Barrier_chdl (void *varg) |
EXPORTCH int | MC_BarrierDelete_chdl (void *varg) |
EXPORTCH int | MC_BarrierInit_chdl (void *varg) |
EXPORTCH int | MC_CondBroadcast_chdl (void *varg) |
EXPORTCH MCAgent_t | MC_ComposeAgent_chdl (void *varg) |
EXPORTCH int | MC_CondSignal_chdl (void *varg) |
EXPORTCH int | MC_CondReset_chdl (void *varg) |
EXPORTCH int | MC_CondWait_chdl (void *varg) |
EXPORTCH int | MC_DeleteAgent_chdl (void *varg) |
EXPORTCH int | MC_DestroyServiceSearchResult_chdl (void *varg) |
EXPORTCH int | MC_DeregisterService_chdl (void *varg) |
EXPORTCH int | MC_End_chdl (void *varg) |
EXPORTCH MCAgent_t | MC_FindAgentByID_chdl (void *varg) |
EXPORTCH MCAgent_t | MC_FindAgentByName_chdl (void *varg) |
EXPORTCH time_t | MC_GetAgentArrivalTime_chdl (void *varg) |
EXPORTCH int | MC_GetAgentID_chdl (void *varg) |
EXPORTCH char * | MC_GetAgentName_chdl (void *varg) |
EXPORTCH int | MC_GetAgentNumTasks_chdl (void *varg) |
EXPORTCH int | MC_GetAgentStatus_chdl (void *varg) |
EXPORTCH char * | MC_GetAgentXMLString_chdl (void *varg) |
EXPORTCH int | MC_GetTimeOfDay_chdl (void *varg) |
EXPORTCH int | MC_HaltAgency_chdl (void *varg) |
EXPORTCH int | MC_MutexLock_chdl (void *varg) |
EXPORTCH int | MC_MutexUnlock_chdl (void *varg) |
EXPORTCH int | MC_PrintAgentCode_chdl (void *varg) |
EXPORTCH int | MC_RegisterService_chdl (void *varg) |
EXPORTCH int | MC_ResumeAgency_chdl (void *varg) |
EXPORTCH MCAgent_t | MC_RetrieveAgent_chdl (void *varg) |
EXPORTCH char * | MC_RetrieveAgentCode_chdl (void *varg) |
EXPORTCH int | MC_SearchForService_chdl (void *varg) |
EXPORTCH int | MC_SemaphorePost_chdl (void *varg) |
EXPORTCH int | MC_SemaphoreWait_chdl (void *varg) |
EXPORTCH int | MC_SendAgentMigrationMessage_chdl (void *varg) |
EXPORTCH int | MC_SendAgentMigrationMessageFile_chdl (void *varg) |
EXPORTCH int | MC_SendSteerCommand_chdl (void *varg) |
EXPORTCH int | MC_SetAgentStatus_chdl (void *varg) |
EXPORTCH int | MC_SetDefaultAgentStatus_chdl (void *varg) |
EXPORTCH int | MC_SyncDelete_chdl (void *varg) |
EXPORTCH int | MC_SyncInit_chdl (void *varg) |
EXPORTCH int | MC_TerminateAgent_chdl (void *varg) |
Variables | |
mc_platform_p | g_mc_platform |
#define HOST_NAME_MAX 255 |
int MC_Acl_AddReceiver | ( | fipa_acl_message_t * | acl, | |
const char * | name, | |||
const char * | address | |||
) |
Definition at line 226 of file libmc.c.
References fipa_agent_identifier_s::addresses, fipa_agent_identifier_New(), fipa_agent_identifier_set_New(), fipa_agent_identifier_set_s::fipa_agent_identifiers, fipa_url_New(), fipa_url_sequence_New(), fipa_agent_identifier_s::name, fipa_url_sequence_s::num, fipa_agent_identifier_set_s::num, fipa_acl_message_s::receiver, fipa_acl_message_s::receiver_num, fipa_url_s::str, and fipa_url_sequence_s::urls.
Referenced by MC_Acl_AddReceiver_chdl().
EXPORTCH int MC_Acl_AddReceiver_chdl | ( | void * | varg | ) |
Definition at line 1728 of file libmc.c.
References MC_Acl_AddReceiver().
Referenced by agent_RunChScriptThread().
int MC_Acl_AddReplyTo | ( | fipa_acl_message_t * | acl, | |
const char * | name, | |||
const char * | address | |||
) |
Definition at line 262 of file libmc.c.
References fipa_agent_identifier_s::addresses, fipa_agent_identifier_New(), fipa_agent_identifier_set_New(), fipa_agent_identifier_set_s::fipa_agent_identifiers, fipa_url_New(), fipa_url_sequence_New(), fipa_agent_identifier_s::name, fipa_url_sequence_s::num, fipa_agent_identifier_set_s::num, fipa_acl_message_s::reply_to, fipa_url_s::str, and fipa_url_sequence_s::urls.
Referenced by MC_Acl_AddReplyTo_chdl().
EXPORTCH int MC_Acl_AddReplyTo_chdl | ( | void * | varg | ) |
Definition at line 1748 of file libmc.c.
References MC_Acl_AddReplyTo().
Referenced by agent_RunChScriptThread().
int MC_Acl_SetContent | ( | fipa_acl_message_t * | acl, | |
const char * | content | |||
) |
Definition at line 297 of file libmc.c.
References fipa_string_s::content, fipa_acl_message_s::content, fipa_string_Destroy(), and fipa_string_New().
Referenced by MC_Acl_SetContent_chdl().
EXPORTCH int MC_Acl_SetContent_chdl | ( | void * | varg | ) |
Definition at line 1768 of file libmc.c.
References fipa_acl_message_s::content, and MC_Acl_SetContent().
Referenced by agent_RunChScriptThread().
int MC_Acl_SetPerformative | ( | fipa_acl_message_t * | acl, | |
enum fipa_performative_e | performative | |||
) |
Definition at line 195 of file libmc.c.
References fipa_acl_message_s::performative.
Referenced by MC_Acl_SetPerformative_chdl().
EXPORTCH int MC_Acl_SetPerformative_chdl | ( | void * | varg | ) |
Definition at line 1690 of file libmc.c.
References MC_Acl_SetPerformative(), and fipa_acl_message_s::performative.
Referenced by agent_RunChScriptThread().
int MC_Acl_SetSender | ( | fipa_acl_message_t * | acl, | |
const char * | name, | |||
const char * | address | |||
) |
Definition at line 203 of file libmc.c.
References fipa_agent_identifier_s::addresses, fipa_agent_identifier_Destroy(), fipa_agent_identifier_New(), fipa_url_New(), fipa_url_sequence_New(), fipa_agent_identifier_s::name, fipa_url_sequence_s::num, fipa_acl_message_s::sender, fipa_url_s::str, and fipa_url_sequence_s::urls.
Referenced by MC_Acl_SetSender_chdl().
EXPORTCH int MC_Acl_SetSender_chdl | ( | void * | varg | ) |
Definition at line 1708 of file libmc.c.
References MC_Acl_SetSender().
Referenced by agent_RunChScriptThread().
int MC_AclDestroy | ( | struct fipa_acl_message_s * | message | ) |
Destroy a FIPA ACL message.
message | The ACL message to destroy |
Definition at line 69 of file libmc.c.
References fipa_acl_message_Destroy().
Referenced by MC_AclDestroy_chdl().
int MC_AclDestroy_chdl | ( | void * | varg | ) |
Definition at line 1575 of file libmc.c.
References MC_AclDestroy().
Referenced by agent_RunChScriptThread().
EXPORTMC fipa_acl_message_t* MC_AclNew | ( | void | ) | [read] |
Allocate a new ACL Message.
Definition at line 75 of file libmc.c.
References fipa_acl_message_New().
Referenced by MC_AclNew_chdl().
void* MC_AclNew_chdl | ( | void * | varg | ) |
Definition at line 1590 of file libmc.c.
References MC_AclNew().
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_AclPost | ( | MCAgent_t | agent, | |
struct fipa_acl_message_s * | message | |||
) |
Post ACL message to agent.
agent | The agent to post the message to | |
message | The message to post |
Definition at line 80 of file libmc.c.
References agent_mailbox_Post(), and agent_s::mailbox.
Referenced by MC_AclPost_chdl(), and MC_AclSend().
int MC_AclPost_chdl | ( | void * | varg | ) |
Definition at line 1598 of file libmc.c.
References MC_AclPost().
Referenced by agent_RunChScriptThread().
EXPORTMC fipa_acl_message_t* MC_AclReply | ( | struct fipa_acl_message_s * | acl_message | ) | [read] |
Reply to an ACL message.
acl_message | The incoming acl message to reply to |
Definition at line 86 of file libmc.c.
References fipa_Reply().
Referenced by MC_AclReply_chdl().
EXPORTCH void* MC_AclReply_chdl | ( | void * | varg | ) |
Definition at line 1616 of file libmc.c.
References MC_AclReply().
Referenced by agent_RunChScriptThread().
EXPORTMC fipa_acl_message_t* MC_AclRetrieve | ( | MCAgent_t | agent | ) | [read] |
Retrieve an ACL message.
agent | Agent to retrieve message from. |
Definition at line 92 of file libmc.c.
References agent_mailbox_Retrieve(), and agent_s::mailbox.
Referenced by MC_AclRetrieve_chdl().
EXPORTCH void* MC_AclRetrieve_chdl | ( | void * | varg | ) |
Definition at line 1632 of file libmc.c.
References MC_AclRetrieve().
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_AclSend | ( | MCAgency_t | attr, | |
struct fipa_acl_message_s * | acl | |||
) |
Send a composed ACL Message.
attr | An initialized and running MobileC agency | |
acl | An allocated and fully composed ACL message. |
Definition at line 98 of file libmc.c.
References fipa_agent_identifier_s::addresses, mtp_http_s::content, mtp_http_content_s::content_type, mtp_http_content_s::data, dynstring_Destroy(), FIPA_ACL, fipa_acl_Compose(), fipa_agent_identifier_set_s::fipa_agent_identifiers, fipa_envelope_Compose(), mtp_http_s::host, http_to_hostport(), MC_AclPost(), MC_FindAgentByName(), dynstring_s::message, message_Destroy(), mtp_http_s::message_parts, message_Send(), message_s::message_type, mtp_http_CreateMessage(), mtp_http_Destroy(), mtp_http_New(), fipa_agent_identifier_s::name, fipa_url_sequence_s::num, fipa_agent_identifier_set_s::num, port, fipa_acl_message_s::receiver, fipa_url_s::str, mtp_http_s::target, message_s::target, and fipa_url_sequence_s::urls.
Referenced by MC_AclSend_chdl().
EXPORTCH int MC_AclSend_chdl | ( | void * | varg | ) |
Definition at line 1648 of file libmc.c.
References CHECK_NULL, MC_AclSend(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC fipa_acl_message_t* MC_AclWaitRetrieve | ( | MCAgent_t | agent | ) | [read] |
Wait for and retrieve an ACL message.
agent | Agent to retrieve message from. |
Definition at line 188 of file libmc.c.
References agent_mailbox_WaitRetrieve(), and agent_s::mailbox.
Referenced by MC_AclWaitRetrieve_chdl().
EXPORTCH void* MC_AclWaitRetrieve_chdl | ( | void * | varg | ) |
Definition at line 1672 of file libmc.c.
References MC_AclWaitRetrieve().
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_AddAgent | ( | MCAgency_t | attr, | |
MCAgent_t | agent | |||
) |
Add an agent to the agency 'attr'.
attr | a MobileC agency | |
agent | An initialized MobileC agent |
Definition at line 314 of file libmc.c.
References mc_platform_s::agent_queue, mc_platform_s::ams, COND_SIGNAL, agency_s::mc_platform, agent_s::mc_platform, MUTEX_LOCK, and MUTEX_UNLOCK.
Referenced by MC_AddAgent_chdl().
EXPORTCH int MC_AddAgent_chdl | ( | void * | varg | ) |
Definition at line 1788 of file libmc.c.
References CHECK_NULL, MC_AddAgent(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
int MC_Barrier | ( | MCAgency_t | attr, | |
int | id | |||
) |
Definition at line 328 of file libmc.c.
References mc_platform_s::barrier_queue, barrier_queue_Get(), barrier_node_s::cond, COND_BROADCAST, COND_WAIT, barrier_node_s::lock, MC_ERR_NOT_FOUND, agency_s::mc_platform, MC_SUCCESS, MUTEX_LOCK, MUTEX_UNLOCK, node, barrier_node_s::num_registered, and barrier_node_s::num_waiting.
Referenced by MC_Barrier_chdl().
EXPORTCH int MC_Barrier_chdl | ( | void * | varg | ) |
Definition at line 1842 of file libmc.c.
References CHECK_NULL, MC_Barrier(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_BarrierDelete | ( | MCAgency_t | attr, | |
int | id | |||
) |
Find and delete an initialized MobileC Barrier.
attr | A running MobileC agency | |
id | The id of the barrier node to delete |
Definition at line 368 of file libmc.c.
References mc_platform_s::barrier_queue, barrier_queue_Delete(), and agency_s::mc_platform.
Referenced by MC_BarrierDelete_chdl().
EXPORTCH int MC_BarrierDelete_chdl | ( | void * | varg | ) |
Definition at line 1865 of file libmc.c.
References CHECK_NULL, MC_BarrierDelete(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_BarrierInit | ( | MCAgency_t | attr, | |
int | id, | |||
int | num_procs | |||
) |
Initialize a MobileC Barrier.
attr | A running MobileC agency | |
id | The requested barrier id | |
num_procs | The number of agents/threads/processes that will wait on the barrier |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>CommAgent1</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5051</HOME> <TASK task="1" num="0"> <DATA number_of_elements="0" name="no-return" complete="0" server="localhost:5050"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> #define MC_BARRIER_ID 56 #define NUM_PROCS 2 int main() { printf("Comm agent: Setting up the MC_Barriers now...\n"); mc_BarrierInit(MC_BARRIER_ID, NUM_PROCS); mc_BarrierInit(MC_BARRIER_ID + 1, NUM_PROCS); mc_BarrierInit(MC_BARRIER_ID + 2, NUM_PROCS); printf("MC_Barrier Initialized.\n"); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 354 of file libmc.c.
References barrier_node_Initialize(), mc_platform_s::barrier_queue, barrier_queue_Add(), barrier_queue_Get(), MC_ERR, agency_s::mc_platform, MC_SUCCESS, and node.
Referenced by MC_BarrierInit_chdl().
EXPORTCH int MC_BarrierInit_chdl | ( | void * | varg | ) |
Definition at line 1888 of file libmc.c.
References CHECK_NULL, MC_BarrierInit(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_CallAgentFunc | ( | MCAgent_t | agent, | |
const char * | funcName, | |||
void * | returnVal, | |||
void * | varg | |||
) |
Calls a function defined in an agent.
agent | An initialized and executed MobileC agent | |
funcName | The name of the function to call | |
returnVal | The agent function's return value | |
varg | The agent functions argument |
#include <libmc.h> #include <embedch.h> #include <stdio.h> struct arg_struct{ int a; int b; }arg; int main(int argc, char *argv[]) { MCAgent_t agent; ChInterp_t interp; int retval; /* Init the agency */ MCAgency_t agency; agency = MC_Initialize( 5051, NULL); printf("Please press 'enter' once the sample agent has arrived.\n"); getchar(); agent = MC_FindAgentByName(agency, "mobagent1"); if (agent == NULL) { printf("Could not find agent!\n"); exit(0); } /* The following executution of code may be performed two different ways: The first way, which is commented out in this example, involves retrieving the agent's interpreter with MC_GetAgentExecEngine() and using the Embedded Ch api to call the function. The second method involves using the Mobile-C api to call the function. Both of these methods used here produce identical results. */ arg.a = 50; arg.b = 51; /*interp = MC_GetAgentExecEngine(agent); Ch_CallFuncByName(interp, "hello", &retval, arg); */ MC_CallAgentFunc( agent, "hello", &retval, &arg); printf("Value of %d was returned.\n", retval); return 0; }
Definition at line 374 of file libmc.c.
References agent_s::agent_interp, MUTEX_LOCK, MUTEX_UNLOCK, and agent_s::run_lock.
Referenced by MC_CallAgentFunc_chdl().
EXPORTCH int MC_CallAgentFunc_chdl | ( | void * | varg | ) |
Definition at line 1812 of file libmc.c.
References MC_CallAgentFunc().
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_ChInitializeOptions | ( | MCAgency_t | attr, | |
ChOptions_t * | options | |||
) |
Use custom ChOptions_t type for internal Ch interpretor.
attr | A running MobileC agency | |
options | Initialized Ch options structure |
Definition at line 392 of file libmc.c.
References mc_platform_s::interp_options, and agency_s::mc_platform.
MCAgent_t MC_ComposeAgent | ( | const char * | name, | |
const char * | home, | |||
const char * | owner, | |||
const char * | code, | |||
const char * | return_var_name, | |||
const char * | server, | |||
int | persistent | |||
) |
Definition at line 410 of file libmc.c.
References agent_datastate_s::agent_code, agent_datastate_s::agent_code_ids, agent_datastate_s::agent_codes, agent_datastate_New(), agent_New(), agent_s::agent_status, agent_task_New(), agent_s::agent_type, agent_s::datastate, agent_s::home, MC_LOCAL_AGENT, MC_WAIT_MESSGSEND, agent_s::name, agent_datastate_s::number_of_tasks, agent_s::orphan, agent_s::owner, agent_datastate_s::persistent, agent_task_s::server_name, agent_datastate_s::tasks, and agent_task_s::var_name.
Referenced by MC_ComposeAgent_chdl().
EXPORTCH MCAgent_t MC_ComposeAgent_chdl | ( | void * | varg | ) |
Definition at line 1936 of file libmc.c.
References MC_ComposeAgent().
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_CondBroadcast | ( | MCAgency_t | attr, | |
int | id | |||
) |
Wakes up all agents/threads waiting on a condition variable.
attr | A MobileC agency | |
id | Synchronization variable id to broadcast to |
Definition at line 480 of file libmc.c.
References syncListNode_s::cond, COND_BROADCAST, syncListNode_s::lock, MC_ERR_NOT_FOUND, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, syncListNode_s::signalled, mc_platform_s::syncList, and syncListFind().
Referenced by MC_CondBroadcast_chdl().
EXPORTCH int MC_CondBroadcast_chdl | ( | void * | varg | ) |
Definition at line 1913 of file libmc.c.
References CHECK_NULL, MC_CondBroadcast(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_CondReset | ( | MCAgency_t | attr, | |
int | id | |||
) |
Reset a previously signalled MobileC condition variable.
attr | A MobileC Agency | |
id | The synchronization variable id to reset |
Definition at line 532 of file libmc.c.
References syncListNode_s::lock, MC_ERR_NOT_FOUND, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, syncListNode_s::signalled, mc_platform_s::syncList, and syncListFind().
Referenced by MC_CondReset_chdl().
EXPORTCH int MC_CondReset_chdl | ( | void * | varg | ) |
Definition at line 1999 of file libmc.c.
References CHECK_NULL, MC_CondReset(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_CondSignal | ( | MCAgency_t | attr, | |
int | id | |||
) |
Wakes up at least one thread waiting on a condition variable.
attr | A MobileC agency | |
id | synchronization variable id |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>wake_agent</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA dim="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> #define SYNC_ID 55 int main() { int cond_id; cond_id = SYNC_ID; printf("This is the wake agent.\n"); mc_CondSignal(cond_id); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 495 of file libmc.c.
References syncListNode_s::cond, COND_SIGNAL, syncListNode_s::lock, MC_ERR_NOT_FOUND, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, syncListNode_s::signalled, mc_platform_s::syncList, and syncListFind().
Referenced by MC_CondSignal_chdl().
EXPORTCH int MC_CondSignal_chdl | ( | void * | varg | ) |
Definition at line 1976 of file libmc.c.
References CHECK_NULL, MC_CondSignal(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_CondWait | ( | MCAgency_t | attr, | |
int | id | |||
) |
Wait on a MobileC synchronization variable.
attr | A MobileC agency | |
id | a synchronization variable id |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>sleep_agent</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA dim="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> #define SYNC_ID 55 int main() { int cond_id; printf("Sleep agent has arrived.\n"); cond_id = mc_SyncInit(SYNC_ID); if (cond_id != SYNC_ID) { printf("Possible error. Aborting...\n"); exit(1); } printf("This is the sleep agent.\n"); printf("I am going to sleep now...\n"); mc_CondWait(cond_id); printf("This is the sleep agent: I am awake now. Continuing...\n"); mc_SyncDelete(cond_id); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 510 of file libmc.c.
References syncListNode_s::cond, COND_WAIT, syncListNode_s::lock, MC_ERR_NOT_FOUND, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, syncListNode_s::signalled, mc_platform_s::syncList, and syncListFind().
Referenced by MC_CondWait_chdl().
EXPORTCH int MC_CondWait_chdl | ( | void * | varg | ) |
Definition at line 2022 of file libmc.c.
References CHECK_NULL, MC_CondWait(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
Performs a deep-copy of an agent structure.
agent_out | A pointer to the agent to copy to. | |
agent_in | The agent to copy |
Definition at line 550 of file libmc.c.
References agent_Copy(), and MC_SUCCESS.
Stop and remove an agent.
agent | An agent in any state (running, waiting, etc) |
Definition at line 557 of file libmc.c.
References CHECK_NULL, MC_ERR_INVALID, MC_SetAgentStatus(), MC_SUCCESS, MC_TerminateAgent(), and MC_WAIT_FINISHED.
Referenced by MC_DeleteAgent_chdl().
EXPORTCH int MC_DeleteAgent_chdl | ( | void * | varg | ) |
Definition at line 2044 of file libmc.c.
References MC_DeleteAgent().
Referenced by agent_RunChScriptThread().
int MC_DeregisterService | ( | MCAgency_t | agency, | |
int | agentID, | |||
const char * | serviceName | |||
) |
Definition at line 591 of file libmc.c.
References mc_platform_s::df, df_AddRequest(), df_request_list_node_New(), and agency_s::mc_platform.
Referenced by MC_DeregisterService_chdl().
EXPORTCH int MC_DeregisterService_chdl | ( | void * | varg | ) |
Definition at line 2086 of file libmc.c.
References CHECK_NULL, MC_DeregisterService(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
int MC_DestroyServiceSearchResult | ( | char ** | agentName, | |
char ** | serviceName, | |||
int * | agentID, | |||
int | numResult | |||
) |
Free memory allocated by a Service Search operation.
agentName | agent names returned by a search operation. | |
serviceName | service names return by a search operation. | |
agentID | list of agent id's returned by a search operation. | |
numResult | The number of hits returned by a search operation. |
Definition at line 571 of file libmc.c.
Referenced by MC_DestroyServiceSearchResult_chdl().
EXPORTCH int MC_DestroyServiceSearchResult_chdl | ( | void * | varg | ) |
Definition at line 2059 of file libmc.c.
References MC_DestroyServiceSearchResult().
Referenced by agent_RunChScriptThread().
EXPORTMC int MC_End | ( | MCAgency_t | attr | ) |
End an agency.
attr | A running agency |
#include <stdio.h> #include <stdlib.h> #include <libmc.h> int main(int argc, char *argv[]) { MCAgency_t agency; MCAgencyOptions_t options; MC_InitializeAgencyOptions(&options); MC_SetThreadOff(&options, MC_THREAD_CP); agency = MC_Initialize(5050, &options); printf("Mobile-C Started\n"); /* Note: The third argument of the following function may also be a valid IP address in the form of a string. i.e. 192.168.0.1 */ MC_SendAgentMigrationMessageFile(agency, "test1.xml", "localhost", 5051); MC_End(agency); exit(0); }
Definition at line 620 of file libmc.c.
References mc_platform_s::acc, mc_platform_s::ams, mc_platform_s::cmd_prompt, COND_SIGNAL, mc_platform_s::connection_queue, mc_platform_s::df, GET_THREAD_MODE, agency_s::hostName, agency_s::mc_platform, mc_platform_Destroy(), MC_THREAD_ACC, MC_THREAD_AMS, MC_THREAD_CP, MC_THREAD_DF, mc_platform_s::message_queue, MUTEX_LOCK, MUTEX_UNLOCK, mc_platform_s::quit, mc_platform_s::quit_lock, cmd_prompt_s::thread, THREAD_CANCEL, THREAD_JOIN, and agency_s::threads.
Referenced by MC_End_chdl().
EXPORTCH int MC_End_chdl | ( | void * | varg | ) |
Definition at line 2113 of file libmc.c.
References CHECK_NULL, MC_End(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC MCAgent_t MC_FindAgentByID | ( | MCAgency_t | attr, | |
int | ID | |||
) |
Find an agent by its id.
attr | the agency to search | |
ID | the id to search for |
Definition at line 674 of file libmc.c.
References mc_platform_s::agent_queue, and agency_s::mc_platform.
Referenced by MC_FindAgentByID_chdl().
EXPORTCH MCAgent_t MC_FindAgentByID_chdl | ( | void * | varg | ) |
Definition at line 2130 of file libmc.c.
References CHECK_NULL, MC_FindAgentByID(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC MCAgent_t MC_FindAgentByName | ( | MCAgency_t | attr, | |
const char * | name | |||
) |
Find an agent by its name.
attr | a running agency | |
name | name to search for |
#include <stdio.h> #include <libmc.h> int main(int argc, char *argv[]) { MCAgency_t agency; MCAgencyOptions_t options; MCAgent_t agent; int dim, *extent; double *data; int i, j, size; MC_InitializeAgencyOptions(&options); MC_SetThreadOff(&options, MC_THREAD_CP); agency = MC_Initialize(5050, &options); printf("MobileC Started\n"); /* Note: The third argument of the following function may also be a valid IP address in the form of a string. i.e. 192.168.0.1 */ MC_SendAgentMigrationMessageFile(agency, "test.xml", "localhost", 5051); MC_WaitSignal(agency, MC_RECV_RETURN); agent = MC_FindAgentByName(agency, "mobagent3"); if (agent == NULL) { fprintf(stderr, "Did not receive correct agent. \n"); exit(1); } printf("%d tasks.\n", MC_GetAgentNumTasks(agent) ); for (i = 0; i < MC_GetAgentNumTasks(agent); i++) { MC_GetAgentReturnData( agent, i, (void**)&data, &dim, &extent ); printf("Task: %d\n", i); size = 1; printf("dim is %d\n", dim); for (j = 0; j < dim; j++) { size *= extent[j]; } printf("Size: %d\n", size); printf("Data elements: "); for (j = 0; j < size; j++) { printf("%f ", data[j]); } printf("\n\n"); free(data); free(extent); } MC_ResetSignal(agency); MC_End(agency); return 0; }
Definition at line 661 of file libmc.c.
References mc_platform_s::agent_queue, and agency_s::mc_platform.
Referenced by MC_AclSend(), and MC_FindAgentByName_chdl().
EXPORTCH MCAgent_t MC_FindAgentByName_chdl | ( | void * | varg | ) |
Definition at line 2153 of file libmc.c.
References CHECK_NULL, MC_FindAgentByName(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
time_t MC_GetAgentArrivalTime | ( | MCAgent_t | agent | ) |
Definition at line 690 of file libmc.c.
References agent_s::arrival_time.
Referenced by MC_GetAgentArrivalTime_chdl().
EXPORTCH time_t MC_GetAgentArrivalTime_chdl | ( | void * | varg | ) |
EXPORTMC void* MC_GetAgentExecEngine | ( | MCAgent_t | agent | ) |
Retrieve an agent's Ch interpreter.
agent | a valid agent |
Definition at line 726 of file libmc.c.
References agent_s::agent_interp.
EXPORTCH int MC_GetAgentID_chdl | ( | void * | varg | ) |
EXPORTMC char* MC_GetAgentName | ( | MCAgent_t | agent | ) |
Definition at line 740 of file libmc.c.
References agent_s::lock, MUTEX_LOCK, MUTEX_UNLOCK, and agent_s::name.
EXPORTCH char* MC_GetAgentName_chdl | ( | void * | varg | ) |
Retrive the number of tasks an agent has.
#include <stdio.h> #include <libmc.h> int main(int argc, char *argv[]) { MCAgency_t agency; MCAgencyOptions_t options; MCAgent_t agent; int dim, *extent; double *data; int i, j, size; MC_InitializeAgencyOptions(&options); MC_SetThreadOff(&options, MC_THREAD_CP); agency = MC_Initialize(5050, &options); printf("MobileC Started\n"); /* Note: The third argument of the following function may also be a valid IP address in the form of a string. i.e. 192.168.0.1 */ MC_SendAgentMigrationMessageFile(agency, "test.xml", "localhost", 5051); MC_WaitSignal(agency, MC_RECV_RETURN); agent = MC_FindAgentByName(agency, "mobagent3"); if (agent == NULL) { fprintf(stderr, "Did not receive correct agent. \n"); exit(1); } printf("%d tasks.\n", MC_GetAgentNumTasks(agent) ); for (i = 0; i < MC_GetAgentNumTasks(agent); i++) { MC_GetAgentReturnData( agent, i, (void**)&data, &dim, &extent ); printf("Task: %d\n", i); size = 1; printf("dim is %d\n", dim); for (j = 0; j < dim; j++) { size *= extent[j]; } printf("Size: %d\n", size); printf("Data elements: "); for (j = 0; j < size; j++) { printf("%f ", data[j]); } printf("\n\n"); free(data); free(extent); } MC_ResetSignal(agency); MC_End(agency); return 0; }
Definition at line 821 of file libmc.c.
References agent_s::datastate, and agent_datastate_s::number_of_tasks.
EXPORTMC int MC_GetAgentReturnData | ( | MCAgent_t | agent, | |
int | task_num, | |||
void ** | data, | |||
int * | dim, | |||
int ** | extent | |||
) |
Get an agent's return data.
agent | a valid agent | |
task_num | the task for which to retrieve the return data. The task must already be completed. | |
data | the return data. May be multi dimensional array. | |
dim | the number of dimensions of the return array. | |
extent | the extent of each one of the array dimensions. |
/* mc_sample_app.c * * This sample program uses the Mobile C library to build * a simple command-line driven client/server app. * * 12/15/2006 * */ #include <libmc.h> #include <stdio.h> #ifdef _WIN32 #include <windows.h> #endif int main(int argc, char *argv[]) { MCAgency_t agency; MCAgent_t agent; int *extent; int dim; short *array; int i, size; char *xml; MCAgencyOptions_t options; MC_InitializeAgencyOptions(&options); MC_SetThreadOff(&options, MC_THREAD_CP); if (argc == 2) { printf("Starting agency listening on port %d.\n", atoi(argv[1]) ); agency = MC_Initialize( atoi(argv[1]), &options ); } else { agency = MC_Initialize( 5051, &options); } /* Note: The third argument of the following function may also be a valid IP address in the form of a string. i.e. 192.168.0.1 */ MC_SendAgentMigrationMessageFile( agency, "agent.xml", "localhost", 5050 ); while(1) { printf("Waiting for agent return...\n"); MC_WaitSignal( agency, MC_RECV_RETURN ); agent = MC_FindAgentByName(agency, "mobagent1"); if (agent == NULL) { printf("Found wrong agent. Waiting again...\n"); MC_ResetSignal(agency); continue; } if (MC_GetAgentType(agent) != MC_RETURN_AGENT) { printf("Found wrong agent. Waiting again...\n"); MC_ResetSignal(agency); continue; } else { break; } } xml = MC_GetAgentXMLString(agent); printf("%s\n", xml); free(xml); MC_GetAgentReturnData(agent, 0, (void**)&array, &dim, &extent); MC_ResetSignal(agency); printf("dim is %d\n", dim); printf("Extents are: "); size = 1; for (i = 0; i < dim; i++) { printf("%d ", extent[i]); size *= extent[i]; } printf("\n"); printf("%d Elements: \n", size); for (i = 0; i < size; i++) { printf("%d ", array[i]); } printf("\n"); MC_End(agency); return 0; }
<?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>localhost:5051</HOME> <TASK task="1" num="0"> <DATA type="int" dim="0" name="a" complete="0" server="localhost:5050"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> short a[2][3][2]; int main() { int i, j, k, l; k = 0; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { for(l = 0; l < 2; l++) { a[i][j][l] = k; k++; printf("%d ", i+j); } } } printf("\nThis is a mobile agent from port 5050.\n"); printf("I am performing the task on the agency at port 5051 now.\n"); sleep(1); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 758 of file libmc.c.
References agent_task_s::agent_return_data, agent_return_data_s::array_dim, agent_return_data_s::array_extent, CH_DATATYPE_SIZE, agent_return_data_s::data_type, agent_s::datastate, agent_datastate_s::number_of_tasks, size, and agent_datastate_s::tasks.
Get an agent's current status.
Definition at line 704 of file libmc.c.
References agent_s::agent_status, agent_s::lock, MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTCH int MC_GetAgentStatus_chdl | ( | void * | varg | ) |
EXPORTMC enum MC_AgentType_e MC_GetAgentType | ( | MCAgent_t | agent | ) |
Get an agent's type.
Definition at line 827 of file libmc.c.
References agent_s::agent_type.
EXPORTMC char* MC_GetAgentXMLString | ( | MCAgent_t | agent | ) |
Get an agent's xml string.
Definition at line 714 of file libmc.c.
References agent_s::datastate, mxmlSaveAllocString(), and agent_datastate_s::xml_agent_root.
EXPORTCH char* MC_GetAgentXMLString_chdl | ( | void * | varg | ) |
int MC_GetAllAgents | ( | MCAgency_t | attr, | |
MCAgent_t ** | agents, | |||
int * | num_agents | |||
) |
Definition at line 837 of file libmc.c.
References mc_platform_s::agent_queue, mc_platform_s::giant, mc_platform_s::giant_lock, MC_HaltAgency(), agency_s::mc_platform, MC_ResumeAgency(), MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTCH int MC_GetTimeOfDay_chdl | ( | void * | varg | ) |
EXPORTMC int MC_HaltAgency | ( | MCAgency_t | agency | ) |
Halt an agency: Do not process new entries in queues.
agency | A handle to a running MobileC agency. |
Definition at line 873 of file libmc.c.
References mc_platform_s::giant, mc_platform_s::giant_lock, agency_s::mc_platform, MUTEX_LOCK, and MUTEX_UNLOCK.
Referenced by MC_GetAllAgents(), and MC_HaltAgency_chdl().
EXPORTCH int MC_HaltAgency_chdl | ( | void * | varg | ) |
Definition at line 2293 of file libmc.c.
References CHECK_NULL, MC_HaltAgency(), and agency_s::mc_platform.
Referenced by agent_RunChScriptThread().
EXPORTMC MCAgency_t MC_Initialize | ( | int | port, | |
MCAgencyOptions_t * | options | |||
) |
Initialize and start a MobileC agency.
port | the TCP port the agency should bind to | |
options | initialized MobileC options or NULL for default options |
#include <stdio.h> #include <libmc.h> #ifdef _WIN32 #include <windows.h> #endif int main(int argc, char *argv[]) { MCAgency_t agency; int local_port = 5051; agency = MC_Initialize(local_port, NULL); printf("Mobile-C Started\n"); MC_MainLoop(agency); MC_End(agency); return 0; }
Definition at line 882 of file libmc.c.
References CHECK_NULL, agency_s::client, MCAgencyOptions_s::default_agent_status, agency_s::default_agentstatus, MCAgencyOptions_s::enable_security, agency_s::enable_security, HOST_NAME_MAX, agency_s::hostName, MC_InitializeAgencyOptions(), agency_s::mc_platform, mc_platform_Initialize(), MC_THREAD_ALL, agency_s::portno, agency_s::server, MCAgencyOptions_s::stack_size, agency_s::stack_size, MCAgencyOptions_s::threads, and agency_s::threads.
EXPORTMC int MC_InitializeAgencyOptions | ( | struct MCAgencyOptions_s * | options | ) |
Initialize MobileC options.
options | options to initialize. |
#include <stdio.h> #include <libmc.h> #ifdef _WIN32 #include <windows.h> #endif int main(int argc, char *argv[]) { MCAgency_t agency; int local_port = 5051; agency = MC_Initialize(local_port, NULL); printf("Mobile-C Started\n"); MC_MainLoop(agency); MC_End(agency); return 0; }
Definition at line 937 of file libmc.c.
References MCAgencyOptions_s::default_agent_status, MCAgencyOptions_s::enable_security, MC_THREAD_ALL, MC_WAIT_CH, MCAgencyOptions_s::modified, MCAgencyOptions_s::stack_size, and MCAgencyOptions_s::threads.
Referenced by MC_Initialize().
int MC_MainLoop | ( | MCAgency_t | attr | ) |
Wait indefinitely.
Definition at line 1509 of file libmc.c.
References mc_platform_s::ams, and agency_s::mc_platform.
EXPORTMC int MC_MutexLock | ( | MCAgency_t | attr, | |
int | id | |||
) |
Locks a MobileC synchronization variable as a mutex.
attr | a MobileC agency handle | |
id | the synchronization variable id to lock |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>sleep_agent</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA dim="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> int main() { int mutex_id; printf("Sleep agent has arrived.\n"); mutex_id = mc_SyncInit(55); if (mutex_id != 55) { printf("Possible error. Aborting...\n"); exit(1); } printf("This is agent 1.\n"); printf("Agent 1: I am locking the mutex now.\n"); mc_MutexLock(mutex_id); printf("Agent 1: Mutex locked. Perform protected operations here\n"); printf("Agent 1: Waiting for 5 seconds...\n"); sleep(5); printf("Agent 1: Unlocking mutex now...\n"); mc_MutexUnlock(mutex_id); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>wake_agent</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA dim="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> int main() { int mutex_id; mutex_id = 55; printf("Agent 2: Has arrived"); printf("Agent 2: Attempting to lock the mutex...\n"); mc_MutexLock(mutex_id); printf("Agent 2: Mutex locked.\n"); printf("Agent 2: Perform protected operations here.\n"); sleep(5); mc_MutexUnlock(mutex_id); printf("Agent 2: Mutex Unlocked\n"); mc_SyncDelete(mutex_id); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 954 of file libmc.c.
References syncListNode_s::lock, agency_s::mc_platform, MUTEX_LOCK, mc_platform_s::syncList, and syncListFind().
EXPORTCH int MC_MutexLock_chdl | ( | void * | varg | ) |
EXPORTMC int MC_MutexUnlock | ( | MCAgency_t | attr, | |
int | id | |||
) |
Definition at line 966 of file libmc.c.
References syncListNode_s::lock, agency_s::mc_platform, MUTEX_UNLOCK, mc_platform_s::syncList, and syncListFind().
EXPORTCH int MC_MutexUnlock_chdl | ( | void * | varg | ) |
Prints an agents code to stdout.
Definition at line 978 of file libmc.c.
References agent_datastate_s::agent_code, agent_s::datastate, agent_s::lock, MUTEX_LOCK, MUTEX_UNLOCK, agent_datastate_s::number_of_tasks, and agent_datastate_s::task_progress.
EXPORTCH int MC_PrintAgentCode_chdl | ( | void * | varg | ) |
EXPORTMC int MC_RegisterService | ( | MCAgency_t | agency, | |
MCAgent_t | agent, | |||
int | agentID, | |||
const char * | agentName, | |||
char ** | serviceNames, | |||
int | numServices | |||
) |
Register a new service with the Directory Facilitator.
agency | a MobileC agency handle | |
agent | (OPTIONAL: See note) a MobileC agent | |
agentID | (OPTIONAL: See note) a MobileC agent id | |
agentName | (OPTIONAL: See note) a MobileC agent name | |
serviceNames | an array of character strings of service names | |
numServices | the number of services described in 'serviceNames' |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>service_provider_1</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA persistent="1" number_of_elements="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> struct arg_struct { int a; int b; }; int main() { char **services; int i; services = malloc(sizeof(char*)*2); for(i = 0; i < 2; i++) { services[i] = malloc(40); } strcpy(services[0], "addition"); strcpy(services[1], "subtraction"); printf("Service provider 1 has arrived.\n"); printf("I provide addition and subtraction service.\n"); mc_RegisterService( mc_current_agent, services, 2); return 0; } int addition(struct arg_struct* arg) { printf("Adding %d and %d...\n", arg->a, arg->b); return arg->a + arg->b; } int subtraction(struct arg_struct* arg) { printf("Subtracting %d - %d...\n", arg->a, arg->b); return arg->a - arg->b; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 994 of file libmc.c.
References CHECK_NULL, mc_platform_s::df, df_AddRequest(), df_request_list_node_New(), agent_s::id, MC_ERR_INVALID_ARGS, MC_ERR_MEMORY, agency_s::mc_platform, MUTEX_INIT, MUTEX_T, and agent_s::name.
EXPORTCH int MC_RegisterService_chdl | ( | void * | varg | ) |
EXPORTMC int MC_ResetSignal | ( | MCAgency_t | attr | ) |
Reset a MobileC signal.
Definition at line 1128 of file libmc.c.
References COND_SIGNAL, mc_platform_s::giant, mc_platform_s::giant_cond, mc_platform_s::giant_lock, MC_NO_SIGNAL, agency_s::mc_platform, mc_platform_s::MC_signal, MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTMC int MC_ResumeAgency | ( | MCAgency_t | agency | ) |
Resumes a halted agency.
agency | An agency previously halted with the MC_HaltAgency() function. |
Definition at line 1073 of file libmc.c.
References mc_platform_s::giant, mc_platform_s::giant_lock, agency_s::mc_platform, MUTEX_LOCK, and MUTEX_UNLOCK.
Referenced by MC_GetAllAgents().
EXPORTCH int MC_ResumeAgency_chdl | ( | void * | varg | ) |
EXPORTMC MCAgent_t MC_RetrieveAgent | ( | MCAgency_t | attr | ) |
Retrieves the oldest agent from an agency.
Definition at line 1082 of file libmc.c.
References mc_platform_s::agent_queue, agent_s::agent_status, ListSearch(), MC_AGENT_NEUTRAL, agency_s::mc_platform, MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTCH MCAgent_t MC_RetrieveAgent_chdl | ( | void * | varg | ) |
EXPORTMC char* MC_RetrieveAgentCode | ( | MCAgent_t | agent | ) |
Retrieves an agent's Ch code.
Definition at line 1112 of file libmc.c.
References agent_datastate_s::agent_code, agent_s::datastate, agent_s::lock, MUTEX_LOCK, MUTEX_UNLOCK, and agent_datastate_s::task_progress.
EXPORTCH char* MC_RetrieveAgentCode_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SearchForService | ( | MCAgency_t | attr, | |
const char * | searchString, | |||
char *** | agentNames, | |||
char *** | serviceNames, | |||
int ** | agentIDs, | |||
int * | numResults | |||
) |
Search the directory facilitator for a service.
attr | (input) a MobileC agency handle | |
searchString | (input) substring to search services for | |
agentNames | (return) array of agent names with matching services | |
serviceNames | (return) array of matching service names | |
agentIDs | (return) array of matching agent IDs | |
numResults | (return) number of matching results |
<?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>localhost:5051</HOME> <TASK task="1" num="0"> <DATA number_of_elements="0" name="no-return" complete="0" server="localhost:5050"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> struct arg_struct { int a; int b; }; int main() { MCAgent_t agent; int retval; /* Search Return Variables */ char** agentNames; char** serviceNames; int *agentIDs; int numResults; /* Argument Struct */ struct arg_struct arg; /* Search for addition service */ printf("\n\n\nSearching for addition service.\n"); mc_SearchForService( "addition", &agentNames, &serviceNames, &agentIDs, &numResults ); printf("Done searching.\n"); if (numResults < 1) { printf("No agents with service 'addition' found.\n"); exit(0); } /* Just get the first hit */ printf("Using agent %s for addition.\n", agentNames[0]); agent = mc_FindAgentByID(agentIDs[0]); arg.a = 44; arg.b = 45; mc_CallAgentFunc(agent, "addition", &retval, &arg); printf("Result of addition %d + %d is %d.\n", arg.a, arg.b, retval); /* Now search for multiplication service */ printf("\n\n Searching for Multiplication service...\n"); mc_SearchForService( "multiplication", &agentNames, &serviceNames, &agentIDs, &numResults ); if (numResults < 1) { printf("No agents with service 'multiplication' found.\n"); exit(0); } printf("Using agent %s for multiplication.\n", agentNames[0]); agent = mc_FindAgentByID(agentIDs[0]); mc_CallAgentFunc(agent, "multiplication", &retval, &arg); printf("Result of multiplication %d * %d is %d.\n", arg.a, arg.b, retval); /* Now lets try to deregister a service */ mc_DeregisterService( agentIDs[0], serviceNames[0] ); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 1139 of file libmc.c.
References CHECK_NULL, COND_SLEEP_ACTION, mc_platform_s::df, df_AddRequest(), df_request_list_node_Destroy(), df_request_list_node_New(), df_request_search_Destroy(), df_request_search_New(), MC_ERR_MEMORY, agency_s::mc_platform, MC_SUCCESS, and search.
EXPORTCH int MC_SearchForService_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SemaphorePost | ( | MCAgency_t | attr, | |
int | id | |||
) |
Post to a MobileC synchronization variable semaphore.
attr | a MobileC agency handle | |
id | the synchronization variable id to post to |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>wake_agent</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA dim="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> int main() { int semaphore_id; semaphore_id = 55; printf("This is the wake agent.\n"); mc_SemaphorePost(semaphore_id); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 1189 of file libmc.c.
References agency_s::mc_platform, syncListNode_s::sem, SEMAPHORE_POST, mc_platform_s::syncList, and syncListFind().
EXPORTCH int MC_SemaphorePost_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SemaphoreWait | ( | MCAgency_t | attr, | |
int | id | |||
) |
Decreases a MobileC synchronization variable semaphore count by one.
attr | a MobileC agency handle | |
id | synchronization variable id to wait on |
<?xml version="1.0"?> <!DOCTYPE myMessage SYSTEM "gafmessage.dtd"> <GAF_MESSAGE> <MESSAGE message="MOBILE_AGENT"> <MOBILE_AGENT> <AGENT_DATA> <NAME>sleep_agent</NAME> <OWNER>IEL</OWNER> <HOME>localhost:5050</HOME> <TASK task="1" num="0"> <DATA dim="0" name="no-return" complete="0" server="localhost:5051"> </DATA> <AGENT_CODE> <![CDATA[ #include <stdio.h> int main() { int sem_id; printf("Sleep agent has arrived.\n"); sem_id = mc_SyncInit(55); if (sem_id != 55) { printf("Possible error. Aborting...\n"); exit(1); } printf("This is the sleep agent.\n"); printf("I am going to sleep now...\n"); mc_SemaphoreWait(sem_id); printf("This is the sleep agent: I am awake now. Continuing...\n"); mc_SyncDelete(sem_id); return 0; } ]]> </AGENT_CODE> </TASK> </AGENT_DATA> </MOBILE_AGENT> </MESSAGE> </GAF_MESSAGE>
Definition at line 1201 of file libmc.c.
References agency_s::mc_platform, syncListNode_s::sem, SEMAPHORE_WAIT, mc_platform_s::syncList, and syncListFind().
EXPORTCH int MC_SemaphoreWait_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SendAgentMigrationMessage | ( | MCAgency_t | attr, | |
const char * | message, | |||
const char * | hostname, | |||
int | port | |||
) |
Sends an agent migration message.
attr | a MobileC agency handle | |
message | a valid MobileC xml agent migration message | |
hostname | host to send the message to | |
port | port to send the message to |
Definition at line 1223 of file libmc.c.
References MC_ERR, agency_s::mc_platform, message_Destroy(), message_InitializeFromString(), message_New(), and mc_platform_s::message_queue.
EXPORTCH int MC_SendAgentMigrationMessage_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SendAgentMigrationMessageFile | ( | MCAgency_t | attr, | |
const char * | filename, | |||
const char * | hostname, | |||
int | port | |||
) |
Sends an agent migration message.
attr | a MobileC agency handle | |
filename | file containing a valid MobileC xml agent migration message | |
hostname | hostname to send the agent to | |
port | port to send the agent to |
Definition at line 1254 of file libmc.c.
References agency_s::mc_platform, message_Destroy(), message_InitializeFromString(), message_New(), and mc_platform_s::message_queue.
EXPORTCH int MC_SendAgentMigrationMessageFile_chdl | ( | void * | varg | ) |
int MC_SendCh | ( | MCAgency_t | attr, | |
const char * | filename, | |||
const char * | remotehost, | |||
int | port | |||
) |
EXPORTMC int MC_SendSteerCommand | ( | MCAgency_t | attr, | |
enum MC_SteerCommand_e | cmd | |||
) |
Definition at line 1330 of file libmc.c.
References COND_BROADCAST, agency_s::mc_platform, mc_platform_s::MC_steer_command, mc_platform_s::MC_steer_cond, mc_platform_s::MC_steer_lock, MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTCH int MC_SendSteerCommand_chdl | ( | void * | varg | ) |
Set an agent's status.
agent | a MobileC agent | |
status | agent status of type 'enum MC_AgentStatus_e' |
Definition at line 1340 of file libmc.c.
References agent_s::agent_status, mc_platform_s::ams, COND_SIGNAL, agent_s::lock, agent_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, and agent_s::orphan.
Referenced by MC_DeleteAgent().
EXPORTCH int MC_SetAgentStatus_chdl | ( | void * | varg | ) |
int MC_SetDefaultAgentStatus | ( | MCAgency_t | agency, | |
enum MC_AgentStatus_e | status | |||
) |
Sets default incoming agent status.
agency | a MobileC agency handle | |
status | the status to set all incoming agents |
Definition at line 1355 of file libmc.c.
References mc_platform_s::default_agentstatus, and agency_s::mc_platform.
EXPORTCH int MC_SetDefaultAgentStatus_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SetThreadOff | ( | MCAgencyOptions_t * | options, | |
enum MC_ThreadIndex_e | index | |||
) |
Sets a MobileC thread to "off" status.
options | MobileC options previously initialized with MC_InitializeAgencyOptions() | |
index | the thread to set |
Definition at line 1382 of file libmc.c.
References SET_THREAD_OFF, and MCAgencyOptions_s::threads.
EXPORTMC int MC_SetThreadOn | ( | MCAgencyOptions_t * | options, | |
enum MC_ThreadIndex_e | index | |||
) |
Sets a MobileC thread to "on" status.
options | MobileC options previously initialized with MC_InitializeAgencyOptions() | |
index | the thread to set |
Definition at line 1365 of file libmc.c.
References SET_THREAD_ON, and MCAgencyOptions_s::threads.
EXPORTMC int MC_SetThreadsAllOff | ( | MCAgencyOptions_t * | options | ) |
Set all MobileC threads to 'off' status.
options | a MobileC options structure initialized with with the MC_InitializeAgencyOptions() function. |
Definition at line 1389 of file libmc.c.
References MC_THREAD_ALL, SET_THREAD_OFF, and MCAgencyOptions_s::threads.
EXPORTMC int MC_SetThreadsAllOn | ( | MCAgencyOptions_t * | options | ) |
Set all Mobile-C threads on.
options | MobileC options structure, initialized with MC_InitializeAgencyOptions() |
Definition at line 1372 of file libmc.c.
References MC_THREAD_ALL, SET_THREAD_ON, and MCAgencyOptions_s::threads.
EXPORTMC int MC_Steer | ( | MCAgency_t | attr, | |
int(*)(void *data) | funcptr, | |||
void * | arg | |||
) |
Set up a steerable algorithm.
attr | a MobileC agency handle | |
funcptr | a function pointer to the algorithm | |
arg | an argument for the algorithm function |
#include <stdio.h> #include <libmc.h> #ifdef _WIN32 #include <windows.h> #endif int algorithm(void* boo); int main() { MCAgency_t agency; int local_port = 5050; agency = MC_Initialize(local_port, NULL); MC_Steer( agency, &algorithm, NULL ); MC_End(agency); return 0; } int algorithm(void* boo) { int i=0; MC_SteerCommand_t command; while(1) { #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif printf("%d \n", i); i++; command = MC_SteerControl(); if( command == MC_RESTART || command == MC_STOP ) { return 0; } } }
Definition at line 1399 of file libmc.c.
References agency_s::mc_platform, MC_RESTART, MC_RUN, mc_platform_s::MC_steer_command, mc_platform_s::MC_steer_lock, MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTMC enum MC_SteerCommand_e MC_SteerControl | ( | void | ) |
The MobileC user-algorithm steering function.
Definition at line 1418 of file libmc.c.
References COND_WAIT, mc_platform_s::MC_steer_command, mc_platform_s::MC_steer_cond, mc_platform_s::MC_steer_lock, MC_SUSPEND, MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTMC int MC_SyncDelete | ( | MCAgency_t | attr, | |
int | id | |||
) |
Deletes a previously initialized synchronization variable.
attr | a MobileC agency handle | |
id | the sync variable id to delete |
Definition at line 1434 of file libmc.c.
References syncList_s::giant_lock, syncListNode_s::lock, MC_ERR_NOT_FOUND, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, mc_platform_s::syncList, syncListFind(), syncListNodeDestroy(), and syncListRemove().
EXPORTCH int MC_SyncDelete_chdl | ( | void * | varg | ) |
EXPORTMC int MC_SyncInit | ( | MCAgency_t | attr, | |
int | id | |||
) |
Initializes a new MobileC synchronization variable.
attr | a MobileC agency handle | |
id | the requested sync variable id |
Definition at line 1464 of file libmc.c.
References syncList_s::giant_lock, syncListNode_s::id, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, node, mc_platform_s::syncList, syncListAddNode(), syncListFind(), and syncListNodeNew().
EXPORTCH int MC_SyncInit_chdl | ( | void * | varg | ) |
Halt a running agent.
Definition at line 1489 of file libmc.c.
References agent_s::agent_interp.
Referenced by MC_DeleteAgent().
EXPORTCH int MC_TerminateAgent_chdl | ( | void * | varg | ) |
EXPORTMC int MC_WaitAgent | ( | MCAgency_t | attr | ) |
Wait indefinitely.
This function blocks until an agent arrival signal is triggered, at which point in unblocks.
Definition at line 1516 of file libmc.c.
References mc_platform_s::agent_queue, COND_WAIT, mc_platform, agency_s::mc_platform, MUTEX_LOCK, MUTEX_UNLOCK, and size.
EXPORTMC MCAgent_t MC_WaitRetrieveAgent | ( | MCAgency_t | attr | ) |
Wait and retrieve an agent.
Definition at line 1536 of file libmc.c.
References mc_platform_s::agent_queue, ListSearch(), agency_s::mc_platform, MC_RECV_AGENT, MC_WaitSignal(), MUTEX_LOCK, and MUTEX_UNLOCK.
EXPORTMC int MC_WaitSignal | ( | MCAgency_t | attr, | |
int | signals | |||
) |
Wait for a MobileC signal.
attr | a MobileC agency handle | |
signals | a flag of signals to wait for, of type 'enum MC_Signal_e' |
#include <stdio.h> #include <libmc.h> int main(int argc, char *argv[]) { MCAgency_t agency; MCAgencyOptions_t options; MCAgent_t agent; int dim, *extent; double *data; int i, j, size; MC_InitializeAgencyOptions(&options); MC_SetThreadOff(&options, MC_THREAD_CP); agency = MC_Initialize(5050, &options); printf("MobileC Started\n"); /* Note: The third argument of the following function may also be a valid IP address in the form of a string. i.e. 192.168.0.1 */ MC_SendAgentMigrationMessageFile(agency, "test.xml", "localhost", 5051); MC_WaitSignal(agency, MC_RECV_RETURN); agent = MC_FindAgentByName(agency, "mobagent3"); if (agent == NULL) { fprintf(stderr, "Did not receive correct agent. \n"); exit(1); } printf("%d tasks.\n", MC_GetAgentNumTasks(agent) ); for (i = 0; i < MC_GetAgentNumTasks(agent); i++) { MC_GetAgentReturnData( agent, i, (void**)&data, &dim, &extent ); printf("Task: %d\n", i); size = 1; printf("dim is %d\n", dim); for (j = 0; j < dim; j++) { size *= extent[j]; } printf("Size: %d\n", size); printf("Data elements: "); for (j = 0; j < size; j++) { printf("%f ", data[j]); } printf("\n\n"); free(data); free(extent); } MC_ResetSignal(agency); MC_End(agency); return 0; }
Definition at line 1554 of file libmc.c.
References COND_WAIT, mc_platform_s::giant, mc_platform_s::giant_lock, agency_s::mc_platform, mc_platform_s::MC_signal, mc_platform_s::MC_signal_cond, mc_platform_s::MC_signal_lock, MUTEX_LOCK, and MUTEX_UNLOCK.
Referenced by MC_WaitRetrieveAgent().