Skip to content
This repository was archived by the owner on Mar 6, 2025. It is now read-only.
/ c-websocket-server Public archive

🔌 A simple websocket server written in C for InHolland.

License

Notifications You must be signed in to change notification settings

Wessel/c-websocket-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C Websocket Server

MIT License

A websocket server written in C for a course followed at InHolland University of Applied Science.




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 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.

Data Structure

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> }, ... ]

About

🔌 A simple websocket server written in C for InHolland.

Resources

License

Code of conduct

Stars

Watchers

Forks