Integrity
This is an individual assignment. You should feel free to discuss aspects of C programming and the assignment specification with fellow students. You should not actively help (or seek help from) other students with the actual coding of your assignment solution. It is cheating to look at another student’s code and it is cheating to allow your code to be seen or shared in printed or electronic form. You should note that all submitted code may be subject to automated checks for plagiarism and collusion. If we detect plagiarism or collusion, formal misconduct proceedings will be initiated against you. A likely penalty for a first offense would be a mark of 0 for the assignment. Don’t risk it! If you’re having trouble, seek help from a member of the teaching staff. Don’t be tempted to copy another student’s code.
Do not commit any code to your repository unless it is your own work or it was given to you by teaching staff. If you have questions about this, please ask.
While you are permitted to use sample code supplied by teaching staff this year in this course. Code supplied for other courses or other offerings of this course is off-limits — it may be deemed to be without academic merit and removed from your program before testing.
Purpose
In this assignment, you will implement a simple networked simulation of plane flights. A complete assignment will consist of three C99 programs:
roc2310: Simulates an aircraft
control2310: Simulates an airport
mapper2310: Maps airport names to ports
Multiple instances of these programs will be executed to carry out the simulation.
You will use threads and communicate via IPv4 TCP networking. Your implementation must use blocking communications. You are not permitted to use pipes or any alternative means of interprocess commmunication. To complete all of the features of this assignment you will need to use pthreads, you are not to call fork() nor attempt to use any form of nonblocking I/O or I/O multiplexing.
Your assignment submission must comply with the C style guide
(version 2.0.4) available on the course blackboard area. It must also not use banned functions or commands listed in the same place.
Programs
These programs make use of IDs and other text (info). No text or IDs are allowed to contain any of the following characters:
4387028-29492-3486259
'n' • 'r' • ':'
Note, they may contain spaces.
All outputs from programs should be newline terminated.
mapper2310
This program takes no command line parameters. When it starts up, it will 1. listen on an ephemeral port,
print that port to stdout.
act on any commands it receives via connection to the port (the other end of the connection will close it when it has no more commands).
Some marks are available for handling connections one at a time. To get all marks related to the mapper, it will need to be able to process requests in parallel.
Command |
Purpose |
?ID |
Send the port number for the
airport called ID |
!ID:PORT |
Add airport called ID with PORT as the port number |
@ |
Send back all names and their corresponding ports |
All output as a result of commands will be sent back via the connection that the command came from. • ?ID
– If there is an entry corresponding to that ID, send back
the port followed by a newline. – If there is no mapping, send back a semi-colon followed by a newline.
Mappings should be printed in lexicographic order (of ID) with newline at the end of each entry. ID and PORT should be separated by a colon.
If any invalid commands are received, silently discard that line and keep reading. If ! is used for an ID which already has an entry, ignore that command.
Note: the mapper will run until killed.
Sample session
To mapper |
From mapper |
?To |
; |
!Tom:55451 |
|
!Albert:13021 |
|
@ |
Albert:13021 Tom:55451 |
?Albert |
13021 |
!To:4444 |
|
@ |
Albert:13021 To:4444 Tom:55451 |
4387028-29492-34862592
This program takes the following parameters:
AirportID
Airport info
mapper port (This is optional). When the program starts up, it will:
Listen on an ephemeral
Print that port to stdout.
If a mapper port is given, connect to the mapper and register the ID and port of this airport. It should then disconnect from the mapper.
In parallel — wait for connections by planes and act on
When a connection is made to the control’s port, one of two things should happen:
If the text sent by the connecting party is “log”, then send back a newline seprated list of all the rocs which have visited them (in lexicographic order). Following this, it should send a full-stop followed by a newline and then close the
For any other text, the control should consider the text as the plane’s ID and send back the control’s info (newline terminated).
Note: Under normal circumstances control2310 will run until killed. Exit conditions for control2310
Condition |
Status |
Message |
Incorrect number of args |
1 |
Usage: control2310 id info [mapper] |
Invalid characters in ID or info |
2 |
Invalid char in parameter |
Port specified but not a strictly positive number < 65535 |
3 |
Invalid port |
Could not connect to mapper |
4 |
Can not connect to map |
roc2310
This program takes the following commandline parameters:
planeID
mapper port (This is either a port number or a dash (‘-’)).
zero or more destinations (controls) to connect to in These can either be port numbers or control IDs.
If all destinations are port numbers (> 0 and < 65536), the mapper is not required. If any of the destinations are not port numbers, the mapper should be contacted to find the ports for those destinations. Once the roc knows the all the port numbers for its destinations, it should connect to each destination in turn, get the info for that destination and add it (newline separated) to its log. If it is unable to connect to a destination (or the destination did not send back valid information), the roc should just move on to the next destination.
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of