C Websocket Server
A websocket server written in C for a course followed at InHolland University of Applied Science.
- Introduction
- Libraries
- Data Structure
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.
- Clone the repo using git (
git clone https://github.com/Wessel/c-websocket-server
) - Install dependencies using desired package manager (
yay -S libmysqlclient json-c
) - Build and run the project (
make clean run
)
Or using Docker:
- Build the container (
docker build -t c-websocket-server .
) - Start the container (
docker run -dp 127.0.0.1:8080:8080 c-websocket-server
argp is used for simplification of command line argument parsing.
libtap is used for unit testing, all tests can be found inside the /tests directory.
wsServer is used as socket server, writing a custom socket library was abundant for the course followed.
json-c is used to cast incoming JSON objects into data envelopes.
libmysqlclient is used for a connection to the SQL database.
A request from the client would look as follows:
{
"auth": <authentication:str>
"payload": {
"sensorId": <sensor.id:str>
"sensorData": <sensor.data:str>
}
}
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:
enum RESPONSE_CODES {
SUCCESS,
MISSING_JSON,
MISSING_PAYLOAD,
MISSING_AUTH
};
[ { "sensorId": <sensor.id:str>, "state": <sensor.state:str> }, ... ]