123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- /* Copyright (C) 2016 Max Riechelmann <max.riechelmann@student.kit.edu>
- (Karlsruhe Institute of Technology)
- This library is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by the
- Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version.
- This library is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
- details.
- You should have received a copy of the GNU Lesser General Public License along
- with this library; if not, write to the Free Software Foundation, Inc., 51
- Franklin St, Fifth Floor, Boston, MA 02110, USA
- */
- #include "myco-agent.h"
- #define DEBUG 1
- int myco_agent_register(const char *agent_name) {
- int agent_message_queue_id;
- int global_message_queue_id;
- message msg;
- sprintf(msg.agent_name, "%s", agent_name);
- agent_message_queue_id = myco_create_private_message_queue();
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.message, "REGISTER AGENT\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- if (DEBUG) {
- printf("%s", msg.message);
- }
- return agent_message_queue_id;
- }
- int myco_agent_unregister (const char *agent_name, int agent_message_queue_id) {
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.agent_name, "%s", agent_name);
- sprintf(msg.message, "UNREGISTER AGENT\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- if (DEBUG) {
- printf("%s\n", msg.message);
- }
- myco_remove_message_queue(agent_message_queue_id);
- return 0;
- }
- int myco_agent_register_resource (int agent_message_queue_id, const char *agent_name, const char *resource_name, int resource_transactional) {
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.agent_name, "%s", agent_name);
- sprintf(msg.resource_name, "%s", resource_name);
- msg.resource_transactional = resource_transactional;
- sprintf(msg.message, "REGISTER RESOURCE\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- if(DEBUG) {
- printf("%s", msg.message);
- }
- return 0;
- }
- int myco_agent_unregister_resource (int agent_message_queue_id, const char *resource_name) {
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.resource_name, "%s", resource_name);
- sprintf(msg.message, "UNREGISTER RESOURCE\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- if(DEBUG) {
- printf("%s", msg.message);
- }
- return 0;
- }
- int myco_agent_request_resource(int agent_message_queue_id, char *resource_name) {
- char *resource_pointer;
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.resource_name, "%s", resource_name);
- sprintf(msg.message, "REQUEST RESOURCE\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- if(DEBUG) {
- printf("%s", msg.message);
- }
- resource_pointer = malloc(msg.resource_size);
- if (myco_read_transactional(msg.sender_pid, msg.resource_pointer, msg.resource_size, (void *)resource_pointer, msg.resource_size) == -1) {
- fprintf(stderr, "%s\n", strerror(errno));
- return -1;
- }
- return 0;
- }
- int myco_agent_request_resource_list(int agent_message_queue_id) {
- char *resource_pointer;
- char *split;
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.message, "REQUEST LIST\n");
- msg.resource_size = 0;
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- if(DEBUG) {
- printf("%s", msg.message);
- }
- resource_pointer = malloc(msg.resource_size);
- if (myco_read_transactional(msg.sender_pid, msg.resource_pointer, msg.resource_size, (void *)resource_pointer, msg.resource_size) == -1) {
- printf("ERROR: %s\n", strerror(errno));
- return -1;
- }
- sprintf(msg.message, "RESOURCE GRANTED\n");
- myco_send(agent_message_queue_id, msg);
- printf("%s\n", resource_pointer);
- /*
- split = strtok(resource_pointer, ";");
- while (split != NULL) {
- printf("%s\n", split);
- split = strtok(NULL, ";");
- }
- */
- free(resource_pointer);
- return 0;
- }
- int myco_agent_request_remote_resource(int agent_message_queue_id, char *resource_name) {
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.resource_name, "%s", resource_name);
- sprintf(msg.message, "REQUEST REMOTE RESOURCE\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- return 0;
- }
- int myco_agent_write_remote_resource(int agent_message_queue_id, char *resource_name) {
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.resource_name, "%s", resource_name);
- sprintf(msg.message, "WRITE REMOTE RESOURCE\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- return 0;
- }
- int myco_agent_read_remote_resource(int agent_message_queue_id, char *resource_name) {
- message msg;
- msg.agent_message_queue_id = agent_message_queue_id;
- sprintf(msg.resource_name, "%s", resource_name);
- sprintf(msg.message, "READ REMOTE RESOURCE\n");
- msg = myco_send_and_receive(msg, myco_get_global_message_queue(), agent_message_queue_id);
- return 0;
- }
|