> C Websocket Server
[](/LICENSE)
## Table of Contents
* Introduction
* Libraries
* Data Structure
## Introduction
This websocket server parses JSON data sent by the client
in order to control the state of GPIO pins by writing them to a SQL database.
## Installation
1. Clone the repo using git (`git clone https://github.com/Wessel/c-websocket-server`)
2. Install dependencies using desired package manager (`yay -S libmysqlclient json-c`)
3. Build and run the project (`make clean run`)
Or using Docker:
1. Build the container (`docker build -t c-websocket-server .`)
2. Start the container (`docker run -dp 127.0.0.1:8080:8080 c-websocket-server`
## Libraries
[argp](https://www.gnu.org/software/libc/manual/html_node/Argp.html) is used
for simplification of command line argument parsing.
[libtap](https://github.com/zorgnax/libtap) is used for unit testing, all tests
can be found inside the [/tests](/tests) directory.
[wsServer](https://github.com/Theldus/wsServer) is used as socket server, writing
a custom socket library was abundant for the course followed.
[json-c](https://github.com/json-c/json-c) is used to cast incoming JSON objects
into data envelopes.
[libmysqlclient](https://dev.mysql.com/downloads/c-api/) is used for a connection
to the SQL database.
## Data Structure
A request from the client would look as follows:
```json
{
"auth":
"payload": {
"sensorId":
"sensorData":
}
}
```
After the request has been parsed, it will be processed by a handler which will
in turn give a status code / data struct. This can be one of:
```c
enum RESPONSE_CODES {
SUCCESS,
MISSING_JSON,
MISSING_PAYLOAD,
MISSING_AUTH
};
[ { "sensorId": , "state": }, ... ]
```