OLD IMPLEMENTATION.
The new one is in Zig and fucking ROCKS: https://git.baguette.netlib.re/Baguette/libipc
Inter-Process Communication library based on unix sockets.
core | ||
drop | ||
misc | ||
pingpong | ||
pubsub | ||
tcp | ||
.gitignore | ||
Makefile | ||
project.zsh | ||
README.markdown |
connection init (draft)
how things happen
* Service: daemon providing a feature (windowing, audio, pubsub, …)
* Application: specific application (browser, instant messaging, …)
* service: service name
* index: process index (to launch a service several times)
* version: service version
1. Service creates a unix socket /tmp/service-index-version.sock
2. Application connects to /tmp/service-index-version.sock
pure "networking" view (what should go in the sockets)
- Application connects to /tmp/service-index-version.sock
- Service acknowledges (empty message)
messages format
In order to communicate between the application and the service, we use the Type-Length-Value format. This will be used with some conventions.
programming, debug
overview
The format will be "type : value".
The type will be a simple byte :
* <0 - 15> : control, meta data
* <16 - 127> : later use
* <128 - 255> : application specific (windowing system, audio system, …)
index | abbreviation | semantic
0 | close | to close the communication between the application and the service
1 | message | to send data
2 | error | to send an error message
3 | ack | to send an acknowledgment