mirror of
https://gitlab.com/klmp200/LO41.git
synced 2025-07-12 04:39:23 +00:00
Le réparateur, j'ai pas testé lol
This commit is contained in:
47
ElevatorBreaker/ElevatorBreaker.c
Normal file
47
ElevatorBreaker/ElevatorBreaker.c
Normal file
@ -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;
|
||||
}
|
22
ElevatorBreaker/ElevatorBreaker.h
Normal file
22
ElevatorBreaker/ElevatorBreaker.h
Normal file
@ -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
|
Reference in New Issue
Block a user