mirror of
https://github.com/autistic-symposium/web3-starter-py.git
synced 2025-05-19 23:20:32 -04:00
62 lines
2.9 KiB
Markdown
62 lines
2.9 KiB
Markdown
# Follower Maze Code Challenge Instructions
|
|
|
|
Follower-Maze is a **client-server application** built for social networking.
|
|
Users follow other users, post messages, send private messages, unfollow users, and so on.
|
|
* Each of these actions is an _event_, created by an _event-source_ and sent to the _server_.
|
|
* Each event is processed by the _server_.
|
|
* The processing of the event may have follow-on effects on other _user-clients_.
|
|
|
|
The **server** listens for two kinds of **clients**:
|
|
* **1 event source**, which emits events.
|
|
* **N user-clients** that connect to the server.
|
|
|
|
|
|
#### Client/Server Protocol
|
|
|
|
* The protocol is line-based i.e. a LF control character terminates each message.
|
|
All strings are encoded in UTF-8.
|
|
* Data is transmitted over TCP sockets.
|
|
* The _event source_ connects on port 9090 and will start sending events as soon as the connection is accepted.
|
|
* The _user clients_ connect on port 9099 and identify themselves with their user ID.
|
|
For example, once connected a _user client_ may send down `2932\r\n`,
|
|
indicating that it is representing user 2932.
|
|
* After the identification is sent,
|
|
the user client starts waiting for events to be sent to them by the server.
|
|
|
|
#### Events
|
|
|
|
There are five possible events.
|
|
The table below describes payloads sent by the event source and what each represents:
|
|
|
|
```
|
|
| Payload | Sequence # | Type | From User Id | To User Id |
|
|
|---------------|------------|---------------|--------------|------------|
|
|
| 666|F|60|50 | 666 | Follow | 60 | 50 |
|
|
| 1|U|12|9 | 1 | Unfollow | 12 | 9 |
|
|
| 542532|B | 542532 | Broadcast | - | - |
|
|
| 43|P|32|56 | 43 | Private Msg | 32 | 56 |
|
|
| 634|S|32 | 634 | Status Update | 32 | - |
|
|
```
|
|
|
|
#### Event Rules
|
|
|
|
* Each message begins with a sequence number.
|
|
* However, the event source _does not send events in any given order_.
|
|
In particular, sequence number has no effect on the order in which events are sent.
|
|
* Events _may_ generate notifications for _user clients_.
|
|
If there is a respective target _user client_ connected,
|
|
the notification is routed according to the following rules:
|
|
* Follow: Only the `To User Id` is notified
|
|
* A follow event from user A to user B means that user A now follows user B.
|
|
* Unfollow: No clients are notified
|
|
* An unfollow event from user A to user B means that user A stopped following user B.
|
|
* Broadcast: All connected _user clients_ are notified
|
|
* Private Message: Only the `To User Id` is notified
|
|
* Status Update: All current followers of the `From User ID` are notified
|
|
* If there are no _user clients_ connected for a user,
|
|
any notifications for them are currently ignored.
|
|
_User clients_ are notified of events _in the correct sequence-number order_,
|
|
regardless of the order in which the _event source_ sent them.
|
|
|
|
|
|
|