updated README.md

This commit is contained in:
Ibrahim Mkusa 2017-05-01 00:17:55 -04:00
parent a252bf5b3e
commit 9dfff4db45

View File

@ -13,8 +13,6 @@ The goal in building Hermes was to expose myself to several concepts integral to
systems like networking, synchronization, and multitasking. systems like networking, synchronization, and multitasking.
**Authorship note:** All of the code described here was written by myself.
# Libraries Used # Libraries Used
Most libraries and utilities used are part of base Drracket installation and Most libraries and utilities used are part of base Drracket installation and
therefore do not need to be imported. therefore do not need to be imported.
@ -77,6 +75,7 @@ to ```make-connections``` object.
(define connections-s (make-semaphore 1)) ;; control access to connections (define connections-s (make-semaphore 1)) ;; control access to connections
``` ```
When the tcp-listener accepts a connection from a client, the associated input When the tcp-listener accepts a connection from a client, the associated input
output ports along with username are added as an entry in ```make-connections``` via ```add``` function. output ports along with username are added as an entry in ```make-connections``` via ```add``` function.
External functions can operate on the connections by securing the semaphore, External functions can operate on the connections by securing the semaphore,
@ -151,7 +150,7 @@ After the message is send, the message is removed from the "queue" via the
The code snippet below creates a thread that iteratively calls ```broadcast``` The code snippet below creates a thread that iteratively calls ```broadcast```
every interval, where interval(in secs) is defined by ```sleep-t```. every interval, where interval(in secs) is defined by ```sleep-t```.
** note ** : ```sleep``` is very important for making Hermes behave gracefully ```sleep``` is very important for making Hermes behave gracefully
in a system. Without it, it would be called at the rate derived from cpu clock in a system. Without it, it would be called at the rate derived from cpu clock
rate. This raises cpu temperatures substantially, and make cause a pre-mature rate. This raises cpu temperatures substantially, and make cause a pre-mature
system shutdown. system shutdown.
@ -172,7 +171,7 @@ the chat room. The whisper message is only sent to specified user. To implement
this i used ```filter``` over the connections, where the predicate tested whether the this i used ```filter``` over the connections, where the predicate tested whether the
current list item matched that of a specific user. current list item matched that of a specific user.
''' ```
(define whisper (regexp-match #px"(.*)/whisper\\s+(\\w+)\\s+(.*)" evt-t0)) (define whisper (regexp-match #px"(.*)/whisper\\s+(\\w+)\\s+(.*)" evt-t0))
[whisper [whisper
@ -198,7 +197,7 @@ current list item matched that of a specific user.
(get-output-port (car that-user-ports))) (get-output-port (car that-user-ports)))
(flush-output (get-output-port (car that-user-ports))))) (flush-output (get-output-port (car that-user-ports)))))
(semaphore-post connections-s)] (semaphore-post connections-s)]
''' ```
The snippet above is part of cond statement that tests contents of input from The snippet above is part of cond statement that tests contents of input from
clients to determine what the client is trying wants/trying to do. The top-line clients to determine what the client is trying wants/trying to do. The top-line
@ -211,10 +210,7 @@ is using regexes to determine whether the received message is a whisper or not.
Below are are three selectors that help abstract the contents of a whisper Below are are three selectors that help abstract the contents of a whisper
message. message.
``` ```
; whisper selector for the username and message
(define (whisper-info exp) (define (whisper-info exp)
(cadr exp)) (cadr exp))
@ -223,12 +219,6 @@ message.
(define (whisper-message exp) (define (whisper-message exp)
(cadddr exp)) (cadddr exp))
(define (list-all-folders folder-id)
(let ((this-level (list-folders folder-id)))
(begin
(display (length this-level)) (display "... ")
(append this-level
(flatten (map list-all-folders (map get-id this-level)))))))
``` ```
```whisper-info``` retrieves the date-time and username info. ```whisper-info``` retrieves the date-time and username info.