LO41/Visitor/Visitor.c

72 lines
2.1 KiB
C
Raw Permalink Normal View History

//
// Created by Antoine Bartuccio on 06/06/2018.
//
#include "Visitor.h"
2018-06-11 08:52:58 +00:00
#include "../SharedData/SharedData.h"
#include <string.h>
GETTER(Visitor, char*, name);
2018-06-20 20:06:45 +00:00
GETTER(Visitor, int, destination);
GETTER(Visitor, int, id);
SETTER(Visitor, int, thread_number);
2018-06-10 23:58:52 +00:00
void * runnable_Visitor(void * void_this){
Visitor *this = (Visitor*) void_this;
2018-06-11 08:52:58 +00:00
SharedData * data = GET_INSTANCE(SharedData);
2018-06-20 17:36:00 +00:00
Passenger * passenger = NEW(Passenger, (void*) this, VISITOR);
2018-06-15 17:14:30 +00:00
2018-06-20 16:05:37 +00:00
AGENT_OPTIONS;
2018-06-21 14:15:33 +00:00
this->passenger = (void*) passenger;
2018-06-15 17:14:30 +00:00
2018-06-20 17:36:00 +00:00
passenger->visitor = this;
2018-06-15 09:50:38 +00:00
2018-06-21 23:50:27 +00:00
printf("Visiteur %s : Je souhaite rendre visite a %s\n", this->name, this->contact_name);
printf("Visiteur %s : J'apelle à l'interphone\nVisiteur %s : J'apprends que %s habite à l'étage %d\n", this->name, this->name, this->contact_name, (this->destination = data->use_call_box(data, this->contact_name)));
2018-06-22 05:13:13 +00:00
if (this->destination == this->position)
printf("Visiteur %s : pas besoin de prendre l'ascenseur pour cet étage, je vais y aller à pied\n", this->name);
2018-06-22 05:46:29 +00:00
else if (this->destination == -1)
printf("Visiteur %s : Je me suis trompé de bâtiment, %s n'habite pas ici.\n", this->name, this->contact_name);
2018-06-22 05:13:13 +00:00
else
data->main_building->go_to_floor(data->main_building, this->position, this->destination, passenger);
2018-06-21 23:58:11 +00:00
data->decrement_active_passengers(data);
data->unregister_thread(data, this->thread_number);
2018-06-10 23:58:52 +00:00
return NULL;
}
void _free__Visitor(THIS(Visitor)){
if (this->name != NULL)
free(this->name);
2018-06-10 15:57:39 +00:00
if (this->contact_name != NULL)
free(this->contact_name);
2018-06-21 14:15:33 +00:00
if (this->passenger != NULL)
free(this->passenger);
free(this);
}
2018-06-10 15:57:39 +00:00
Visitor *_init_Visitor(int id, char* name, char * contact_name){
Visitor * new_visitor = malloc_or_die(sizeof(Visitor));
2018-06-06 18:33:34 +00:00
new_visitor->name = strdup(name);
new_visitor->id = id;
new_visitor->position = 0;
new_visitor->destination = -1;
2018-06-21 14:15:33 +00:00
new_visitor->passenger = NULL;
new_visitor->thread_number = -1;
2018-06-10 15:57:39 +00:00
if (contact_name != NULL)
new_visitor->contact_name = strdup(contact_name);
else
new_visitor->contact_name = NULL;
LINK_ALL(Visitor, new_visitor,
get_name,
get_destination,
get_id,
runnable,
set_thread_number
);
return new_visitor;
}