Skip to content

eerimoq/async

Folders and files

NameName
Last commit message
Last commit date
Apr 29, 2021
Nov 7, 2022
May 24, 2020
Sep 18, 2020
Sep 18, 2020
Sep 18, 2020
Sep 18, 2020
Feb 11, 2020
Dec 26, 2019
Sep 18, 2020
Nov 24, 2019
Sep 18, 2020
May 24, 2020
Dec 30, 2019
Nov 19, 2019

Repository files navigation

buildstatus codecov nala

πŸ”€ Async

Asynchronous framework in C for systems where low memory usage is important.

Features

  • Delayed (asynchronous) function calls.
  • Timers.
  • An MQTT client (only QoS 0 is supported).
  • A simple shell.
  • TCP client and server.
  • Secure communication with SSL/TLS.

Project homepage: https://github.com/eerimoq/async

Releases: https://github.com/eerimoq/async/releases

Examples

The hello world example, printing 'Hello world!' periodically.

#include <stdio.h>
#include "async.h"

static void on_timeout()
{
    printf("Hello world!\n");
}

int main()
{
    struct async_t async;
    struct async_timer_t timer;

    async_init(&async);
    async_set_runtime(&async, async_runtime_create());
    async_timer_init(&timer, on_timeout, NULL, 0, 1000, &async);
    async_timer_start(&timer);
    async_run_forever(&async);

    return (0);
}

There are more examples in the examples folder.

Runtimes

A runtime implements zero or more of the following features:

  • Timer handling.
  • Networking (TCP).
  • Call functions in the worker pool.
  • Call functions from any thread.

Default

The default runtime does not implement any runtime features. It's designed for minimal dependencies and easy integration in any application.

Typical usage:

async_init(&async);
...
while (true) {
    epoll_wait(...);
    ...
    if (timeout) {
        async_tick(&async);
    }
    async_process(&async);
}

Native

The native runtime implements all runtime features.

Typical usage:

async_init(&async);
async_set_runtime(&async, async_runtime_create());
...
async_run_forever(&async);

Design

Input

First *_input(self_p) is called to signal that data is available. Then read data with *_read(self_p, buf_p, size).

Output

Write data with *_write(self_p, buf_p, size).

Unit testing

Source the development environment setup script.

$ source setup.sh

Execute all unit tests.

$ make -s -j4 test
...

Execute tests matching given pattern.

$ make -s -j4 ARGS=core_timer test
...