This repository has been archived on 2025-12-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2024-09-20 14:17:13 +03:00

90 lines
5.3 KiB
HTML

<!doctype html>
<html>
<head>
<title>Description Assignment 3 (DL 10.04)</title>
<meta charset="utf-8">
</head>
<body>
<p>The assignment has 2 parts:</p><ol><li><strong>Design exercise</strong>: The goal of this
part is to design the system that you will be developing. For this purpose, you can choose any suitable diagramming method (e.g. UML diagram) to describe the overall architecture of the system. It should also represent possible interactions between various components in the architecture. Do consider the properties of distributed systems in the design exercise.<br></li><li><strong>Development</strong>: The goal here is to code your design into a workable system. <br></li></ol><div>For systems' specifications, please see the assignment statement below. <br></div><div><br></div><p><strong>Assignment Statement</strong><br></p><p>You have been hired as a software engineer by ABXYZ who wants you to develop a multi-user chat system using socket technology (TCP or UDP, Web Sockets are not accepted). The system should consist of a server and
several (&gt;1) clients. Following are some of the requirements for clients and server</p><p><strong>Client Requirments</strong> <br></p><p>The client should be able to:
</p><ul type="disc">
<ul type="circle">
<ul type="square">
<li>set
nickname</li>
<li>connect to
the&nbsp;server by IP address</li>
<li>send text
messages to other connected clients</li>
<li>Chat should
support several channels</li>
<li>Chat should
support private messages</li>
<li>Client
should show messages from other clients</li>
<li>Client
should be able to disconnect from the server</li>
</ul>
</ul>
</ul>
<p><strong>Server</strong><strong> Requirments</strong><br></p><p>The server should be able to:</p>
<ul type="disc">
<ul type="circle">
<ul type="square">
<li>Handle
several clients connections</li>
<li>Transmit
messages between clients</li></ul></ul></ul><div><br></div><div><strong>Submission Instructions <br></strong></div><div>The deadline for submission of this assignment is until <strong>10th April 2023 (latest by 23:59)</strong>.<br></div><div><br></div><div>The submission package should contain the following:</div><div><ol><li>Source code.</li><li>A video (at maximum 10 minutes) in which you explain how the code works, show the desired output, and explain how did you do that in the code.</li><li>A freely worded report (doc, pdf), which presents the system's architecture along with necessary explanations/assumptions considered during the design/development.<br></li></ol><div>The grading will be based on the following:</div><div><ol><li>Timely completion of the task <strong>(1)</strong><br></li><li>Executable source code <strong>(1)</strong><br></li><li>Description and explanation in the video about how the system works <strong>(2.5)</strong><br></li><li><div>Explanation of how transparency, scalability, and&nbsp; failure handling have been catered in the solution (you may comment on that in the video) <strong>(3)</strong></div></li><li><div>Quality and completeness of the report (design exercise) <strong>(2.5)</strong><br></div><br></li></ol><div><div><div><strong>Assistance and help </strong><br></div><div>The TA can assist you the best when working with JavaScript or Python. TCP/UDP connections and multiprocessing are a part of virtually all programming languages, such as Java, C#, C, C++, but they may be easier to implement on some tools than on others. This task involves two core concepts: Multiprocessing and Network connections.</div><div><br></div><div><div>
<div>
<div> </div>
<div>
<div>With Python, you should start by taking a look at the built-in threading and socket libraries.</div>
<div>
<div> </div>
<div>
<div><br></div><div><a href="https://docs.python.org/3.9/library/socket.html">https://docs.python.org/3.9/library/socket.html</a><br>
<a href="https://docs.python.org/3.9/library/threading.html">https://docs.python.org/3.9/library/threading.html</a></div>
<div>
<div> </div>
<div>
<div><br>
With JavaScript, client-server architectures are typically handled with Node.js. Node.js handles threading differently than typical servers, so be prepared to explain on video how the node achieves this. <br></div><div><br></div><div>More info: <a href="https://nodejs.dev/learn/javascript-asynchronous-programming-and-callbacks">https://nodejs.dev/learn/javascript-asynchronous-programming-and-callbacks</a></div>
<div>
<div> </div>
<div>
<div>TCP can be done with <a href="https://nodejs.org/api/net.html">https://nodejs.org/api/net.html</a><br>
And UDP with <a href="https://nodejs.org/api/dgram.html">https://nodejs.org/api/dgram.html</a></div>
<div>
<div> </div>
<div>
<div><br>
Other programming languages, frameworks, and toolkits are also allowed. You must however explain on the video how the server manages multiple clients - via threads or otherwise - and how the connection is maintained. The video should also explain why the connection is TCP or UDP.</div>
<div>
<div> </div>
<div>
<div><br>
Best of luck! Ask the course teacher, the course TA, or your friends &amp; the Internet for advice should you need anything!</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><p></p>
</body>
</html>