some documentation

This commit is contained in:
Ferdinand Schober
2023-01-03 22:44:31 +01:00
parent 034f498726
commit 5c60e2eb58

53
DOC.md Normal file
View File

@@ -0,0 +1,53 @@
# General Software Architecture
## Events
Each instance of lan-mouse can emit and receive events, where
an event is either a mouse or keyboard event for now.
The general Architecture is shown in the following flow chart:
```mermaid
graph TD
A[Wayland Backend] -->|WaylandEvent| D{Input}
B[X11 Backend] -->|X11Event| D{Input}
C[Windows Backend] -->|WindowsEvent| D{Input}
D -->|Abstract Event| E[Emitter]
E -->|Udp Event| F[Receiver]
F -->|Abstract Event| G{Dispatcher}
G -->|Wayland Event| H[Wayland Backend]
G -->|X11 Event| I[X11 Backend]
G -->|Windows Event| J[Windows Backend]
```
### Input
The input component is responsible for translating inputs from a given backend
to a standardized format and passing them to the event emitter.
### Emitter
The event emitter serializes events and sends them over the network
to the correct client.
### Receiver
The receiver receives events over the network and deserializes them into
the standardized event format.
### Dispatcher
The dispatcher component takes events from the event receiver and passes them
to the correct backend corresponding to the type of client.
## Requests
// TODO this currently works differently
Aside from events, requests can be sent via a simple protocol.
For this, a simple tcp server is listening on the same port as the udp
event receiver and accepts requests for connecting to a device or to
request the keymap of a device.
```mermaid
sequenceDiagram
Alice->>+Bob: Request Connection (secret)
Bob-->>-Alice: Ack (Keyboard Layout)
```