mycoagent2.c 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * mycoagent.c
  3. *
  4. * This is an example agent that showcases the use of mycorrhiza.
  5. */
  6. #include "../src/myco-agent.c"
  7. // MYCO fetch: Requests a remote, transactional resource. Blocks until
  8. // the resource has been granted.
  9. // MYCO create: Creates a new resource and registers it with the agent.
  10. // MYCO release: Releases a resource. It can now be taken by other agents via fetch.
  11. // MYCO free: Destroys a resource for the entire system. Only works if the calling agent has ownership (fetch/create) of the resource.
  12. // MYCO read: Creates a local copy of a remote resource.
  13. // MYCO push: Updates the remote resource with the local copy obtained from read.
  14. // MYCO lock: Protects a resource from read access.
  15. // MYCO unlock: Allows read access again.
  16. int main() {
  17. /*
  18. // At the beginning every agent needs to register itself with the agent server.
  19. char *agent_name = "MYAGENT2";
  20. int agent_message_queue_id;
  21. agent_message_queue_id = myco_agent_register(agent_name);
  22. // MYCO create
  23. // #MYCO create("RESOURCE_2", 1024, transactional)
  24. int resource_size_2 = 1024;
  25. int *resource_pointer_2;
  26. resource_pointer_2 = myco_malloc(resource_size_2);
  27. myco_agent_register_resource(agent_message_queue_id, agent_name, "RESOURCE_2", RESOURCE_TRANSACTIONAL, getpid(), resource_size_2, resource_pointer_2);
  28. // Put some random numbers into RESOURCE_2
  29. int i;
  30. srand(time(NULL));
  31. for (i=0; i < resource_size_2/sizeof(int); i++) {
  32. resource_pointer_2[i] = rand();
  33. }
  34. printf("The first integer of RESOURCE_2 is: %d\n", resource_pointer_2[0]);
  35. // MYCO release
  36. myco_agent_release_resource(agent_message_queue_id, "RESOURCE_2");
  37. // MYCO create
  38. // #MYCO create("RESOURCE_2", 1024, nottransactional)
  39. int resource_size_3 = 1024;
  40. int *resource_pointer_3;
  41. resource_pointer_3 = myco_malloc(resource_size_3);
  42. myco_agent_register_resource(agent_message_queue_id, agent_name, "RESOURCE_3", RESOURCE_NOT_TRANSACTIONAL, getpid(), resource_size_3, resource_pointer_3);
  43. // Put some random numbers into RESOURCE_3
  44. for (i=0; i < resource_size_3/sizeof(int); i++) {
  45. resource_pointer_3[i] = rand();
  46. }
  47. printf("The first integer of RESOURCE_3 is: %d\n", resource_pointer_3[0]);
  48. // Sleep, so the showcase program can request RESOURCE_2 and read/push RESOURCE_3
  49. sleep(30);
  50. // MYCO free
  51. // #MYCO free("RESOURCE_2")
  52. myco_agent_unregister_resource(agent_message_queue_id, "RESOURCE_2");
  53. myco_free(resource_pointer_2);
  54. // MYCO free
  55. // #MYCO free("RESOURCE_3")
  56. myco_agent_unregister_resource(agent_message_queue_id, "RESOURCE_3");
  57. myco_free(resource_pointer_3);
  58. // At the end of its runtime the agent unregisters with the agent.
  59. myco_agent_unregister(agent_name, agent_message_queue_id);
  60. */
  61. return EXIT_SUCCESS;
  62. }