2017-04-02 04:57:40 +00:00
# Hermes
2017-03-28 20:18:43 +00:00
### Statement
2017-04-02 04:50:49 +00:00
Hermes is a multi-client chat program akin to IRC written in Racket. Building
Hermes is interesting as it exposes us to various design problems namely networking,
synchronization, scheduling, and GUI design.
2017-03-28 20:18:43 +00:00
### Analysis
2017-04-02 22:38:48 +00:00
> Will you use data abstraction? How?
2017-04-02 22:44:01 +00:00
2017-04-02 22:38:48 +00:00
TCP communication will be abstracted away so will only deal with Hermes
definition of a message.
We will try to encrypt the messages passed around. The encryption will be
abstracted away so we only have to think about it once during implementation
> Will you use recursion? How?
2017-04-02 22:44:01 +00:00
2017-04-02 22:38:48 +00:00
The server will continually loop waiting for connections from clients.
The Gui will continually loop to handle input with the user, and to and fro
Hermes.
2017-04-02 22:44:01 +00:00
> Will you use map/filter/reduce? How?
2017-04-02 22:38:48 +00:00
Map will be used for dealing editor area of clients.
> Will you use object-orientation? How?
2017-04-02 22:44:01 +00:00
2017-04-02 22:38:48 +00:00
Keeping account of the number of clients will require an object of some sort.
With procedures to increment and decrement the number of users
> Will you use functional approaches to processing your data? How?
2017-04-02 22:44:01 +00:00
2017-04-02 22:38:48 +00:00
The communication part of Hermes is over tcp which uses a lot of functional
approaches e.g. you start a listener which you can then pass to tcp accept.
The result of tcp accept are two pairs of ports which we can then bind to some
variables.
> Will you use state-modification approaches? How? (If so, this should be encapsulated within objects. `set!` pretty much should only exist inside an object.)
2017-04-02 22:44:01 +00:00
2017-04-02 22:38:48 +00:00
State-modification will be used e.g. keeping count of logged in users requires
state modification via set! to maintain the true user account
> Will you build an expression evaluator, like we did in the symbolic differentatior and the metacircular evaluator?
2017-04-02 22:44:01 +00:00
2017-04-02 22:38:48 +00:00
Users will type their input into a text field from the GUI. We will retrieve
the command and evaluate it to see if its a message, or a command to change
GUI state. We will do something that resembles the metacircular evaluator.
2017-03-28 20:18:43 +00:00
### Deliverable and Demonstration
2017-04-02 04:50:49 +00:00
There are two big deliverables for this project. Code for the server(Hermes,
get it?), and the clients which not only has code for interacting with Hermes,
but also a GUI for interactivity with a user like myself.
We plan to demonstrate Hermes by running the server code on a remote machine.
We will connect to the server via our PCs running client code. We will ssh into
the remote machine to see the server running. Since Hermes is a multichat anyone
can join in the demonstration by connecting their computers to the remote
machine!
2017-03-28 20:18:43 +00:00
2017-04-02 04:50:49 +00:00
2017-03-28 20:18:43 +00:00
### Evaluation of Results
2017-04-02 04:50:49 +00:00
Evaluating Hermes is very simple. Can at least two clients hold a meaningful
2017-04-02 14:58:55 +00:00
conversation remotely? If Client A speaks at 11:01 am, and client B does so at
11:01 plus a few seconds, Hermes has to convey this state correctly.
2017-04-02 04:50:49 +00:00
2017-03-28 20:18:43 +00:00
## Architecture Diagram
2017-04-02 15:18:02 +00:00
![Diagram ](https://github.com/oplS17projects/Hermes/blob/master/architecture_diagram.png )
2017-04-02 15:16:29 +00:00
2017-03-28 20:18:43 +00:00
## Schedule
2017-04-02 15:40:19 +00:00
The first step in out project will be to setup a system to get data from one machine to another. What data exactly isn't directly important and the other machine doesn't really need to display it in a pretty manner, it just needs to relay that it has recieved the correct information.
2017-03-28 20:18:43 +00:00
2017-04-02 15:40:19 +00:00
Next we need to create a user interface that looks nice. Some way to control the connection and display information in a convient and readable format.
2017-03-28 20:18:43 +00:00
2017-04-02 15:40:19 +00:00
After we have finished the user interface and connecting the machines, we will need to merge them together and begin expanding the utility if time permits.
2017-03-28 20:18:43 +00:00
### First Milestone (Sun Apr 9)
2017-04-02 15:40:19 +00:00
Get two different machines to relay information.
2017-03-28 20:18:43 +00:00
### Second Milestone (Sun Apr 16)
2017-04-02 15:40:19 +00:00
Get a GUI that looks professional and uses the correct format
2017-03-28 20:18:43 +00:00
### Public Presentation (Mon Apr 24, Wed Apr 26, or Fri Apr 28 [your date to be determined later])
2017-04-02 15:40:19 +00:00
Merging the GUI and information relay together into one program. If time permits we also plan on adding additional features.
2017-03-28 20:18:43 +00:00
## Group Responsibilities
2017-04-02 04:57:40 +00:00
### Douglas Richardson @Doug-Richardson
2017-04-02 15:40:19 +00:00
Will write the GUI
2017-03-28 20:18:43 +00:00
2017-04-02 04:57:40 +00:00
### Ibrahim Mkusa @iskm
2017-04-02 15:40:19 +00:00
Will write the code