This is my implementation of a Vaccine Monitor app created for the System Programming K24 course at the University of Athens.
This project is based of the concept of one client (travelMonitorClient) and multiple servers (monitorServers).
The parent process (travelMonitorCliend) receives requests from citizens, who want to travel to other countries. The app then checks if the citizen has received the appropriate vaccination needed to enter the country and if the answer is yes, then it proceeds to accept the citizen's request.
This project is implemented using UNIX sockets for the communication between the parent process with the child processes.
Also, it uses POSIX threads to read the data files from the input directory.
This bash script creates a test input file, located in the "info" directory, called "inputFile.txt".
The input file will contain a number of citizen vaccination records about different viruses, in the following order:
citizenId firstName lastName country age virusName isVaccinated dateVaccinated
For example,
125 Jason Dupont USA 76 H1N1 YES 30-10-2020
889 John Papadopoulos Greece 52 Η1Ν1 ΝΟ
This "inputFile.txt" will be used later as an input to the second bash script, called "create_infiles.sh".
bash ./script_1/testFile.sh info/virusesFile.txt info/countriesFile.txt numLines duplicatesOn
Where numLines equals with the number of lines (records) that will be in the "inputFile.txt" and duplicatesOn = 1 if duplicate citizenIDs are allowed, or 0 if citizenIDs are unique.
The virusesFile.txt, located in the info directory, contains a list of 20 different viruses that can be modified as you wish. Same way with the countriesFile.txt.
This bash script reads the inputFile.txt and creates a directory that contains subdirectories, one for each country name that exists in the inputFile. In each subdirectory, there are numFilesPerDirectory files with names country-n.txt, where n is a positive integer.
bash ./script_2/create_infiles.sh info/inputFile.txt input_dir numFilesPerDirectory
make
make clean
./travelMonitorClient –m numMonitors -b socketBufferSize -c cyclicBufferSize -s sizeOfBloom -i input_dir -t numThreads
numMonitors | The number of monitorServer processes that will be created |
socketBufferSize | The size of the buffer (in bytes), used to read from the sockets |
cyclicBufferSize | The size of monitorServer's cyclic buffer (in entries) |
sizeOfBloom | The size of the bloom filters (in bytes) |
input_dir | The directory created from the create_infiles.sh bash script |
numThreads | The number of threads in each monitorServer |