mirror of https://gitlab.com/klmp200/LO41.git
10 changed files with 115 additions and 10 deletions
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
//
|
||||
// Created by Antoine Bartuccio on 22/06/2018.
|
||||
//
|
||||
|
||||
#include <unistd.h> |
||||
|
||||
#include "ElevatorBreaker.h" |
||||
#include "../SharedData/SharedData.h" |
||||
|
||||
SETTER(ElevatorBreaker, int, thread_number); |
||||
|
||||
void _free__ElevatorBreaker(THIS(ElevatorBreaker)){ |
||||
free(this); |
||||
} |
||||
|
||||
void * runnable_ElevatorBreaker(void * void_this){ |
||||
ElevatorBreaker *this = (ElevatorBreaker*) void_this; |
||||
Elevator *selected_elevator = NULL; |
||||
SharedData *data = GET_INSTANCE(SharedData); |
||||
|
||||
AGENT_OPTIONS |
||||
|
||||
while (data->is_active_passengers_left(data)){ |
||||
usleep(900000); |
||||
// One chance out of two to break something
|
||||
if ((rand() % 101) > 50) { |
||||
selected_elevator = data->get_main_building(data)->elevators[rand() % ELEVATOR_NB]; |
||||
selected_elevator->damage(selected_elevator); |
||||
printf("ALERTE : L'ascenseur %s est endommagé\n", selected_elevator->name); |
||||
} |
||||
} |
||||
|
||||
data->unregister_thread(data, this->thread_number); |
||||
return NULL; |
||||
} |
||||
|
||||
ElevatorBreaker *_init_ElevatorBreaker(){ |
||||
ElevatorBreaker *new_elevator_breaker = malloc_or_die(sizeof(ElevatorBreaker)); |
||||
new_elevator_breaker->thread_number = -1; |
||||
|
||||
LINK_ALL(ElevatorBreaker, new_elevator_breaker, |
||||
set_thread_number, |
||||
runnable |
||||
) |
||||
|
||||
return new_elevator_breaker; |
||||
} |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by Antoine Bartuccio on 22/06/2018.
|
||||
//
|
||||
|
||||
#ifndef LO41_ELEVATORBREAKER_H |
||||
#define LO41_ELEVATORBREAKER_H |
||||
|
||||
#include "../Objects.h" |
||||
|
||||
typedef struct o_ElevatorBreaker { |
||||
PRIVATE int thread_number; |
||||
|
||||
PUBLIC void * (*runnable)(void * void_this); |
||||
PUBLIC void (*set_thread_number)(_THIS(ElevatorBreaker), int data); |
||||
|
||||
DESTRUCTOR(ElevatorBreaker); |
||||
|
||||
} ElevatorBreaker; |
||||
|
||||
ElevatorBreaker *_init_ElevatorBreaker(); |
||||
|
||||
#endif //LO41_ELEVATORBREAKER_H
|
Loading…
Reference in new issue