AREG IoT SDK (or AREG SDK) is a real-time asynchronous communication framework written in C++ for embedded development that enables thin servers run on connected Things and provide device specific services at the edge of IoT network.

Overview

AREG IoT SDK to simplify multitasking programming

Bring your product to live service enabled

Introduction

AREG IoT SDK (or AREG SDK) is an Object Remote Procedure Call (ORPC) based, lightweight real-time asynchronous communication framework written in C++ that simplifies multitasking and service enabled applications development for embedded and high-end machines. AREG SDK enables mist computing at the edge of the network, where devices connect to IoT fog network not only as traditional clients, but as thin servers and provide device specific services.

More than embedded

When we were designing AREG SDK, the guiding principle was to create a framework to develop embedded applications that intelligently interact at the edge of the IoT network. To keep application design homogeneous, we defined Local services for inter-thread and the Public services for inter-process communications. As a base of IPC we used multicast routing (MCR) network communication model to have combined features of client-server and subscriber-provider (publisher-subscriber) models. In MCR network client-server nodes have logical connections and every node can be a mixture of logical servers and clients. This approach helps to create a fault tolerant, scalable and distributed system of meshed services running directly on connected Things.

Benefits

The major features of AREG SDK to benefit:

  • A combination of request-response and broadcast communication, and subscription service.
  • Transparency of service location, which also eases the creation of a simulation and a test automation.
  • Automated service discovery, automated messaging and dispatching, featured logging and code generator.

Challenges to solve

Traditionally, IoT devices are connected clients of cloud or fog servers to stream data from sensors for further processing. Since data is generated and collected at devices, it makes sense to provide network accessible (public) services directly on Things. Such a concept changes the role of connected devices and is a good foothold to provide robust solutions such as:

  • Increased data privacy, which is an important factor for sensitive data.
  • Decreased data streaming, which is a fundamental condition to optimize network communication.
  • Autonomous, intelligent and self-aware device development by providing network services directly in the environment of data origin.

Software build

AREG SDK provides Eclipse for C/C++ Developer project files for POSIX, and Visual Studio project files for Windows versions of the framework and examples. The default settings of provided project files are enough to compile all.

In case of Visual Studio, please select appropriate Solution Configuration in IDE toolbar to use the right PlatformToolset. For details on how to import projects, build and integrate framework, run examples, configure logging and multicast routing, please refer to HOWTO.md document.

Examples

The AREG SDK contains various examples to demonstrate features of the framework. The examples are listed in the examples/README.md document.

Licensing

AREG SDK is dual-licensed under commercial and free open source licenses. The commercial license gives the commercial support, full rights to create and distribute software without open source license obligations. For more details of licensing see LICENSE.txt file.

For license, support or additional information, please visit Aregtech web site or contact info[at]aregtec.com.

Issues
  • 20220205 issue18 cmake

    20220205 issue18 cmake

    Summery of changes:

    • Comments added to /conf/cmake/ configuration files.
    • Some improvements in and replacement in cmake configs.
    • New file - pre-project.cmake - added for some settings which must be added before project().

    In this phase, I must say some problems might be encountered during cross-compiling for specific scenarios, though I'm trying to solve them.

    Open to any modification or suggestion :)

    opened by Ali-Nasrolahi 16
  • Integrate CMake file

    Integrate CMake file

    Brief description on changes

    Root cmake created with initializing aliases.

    configuration files placed in conf/cmake. some of makefile features which represented in conf/make are not compatible with cmake sysntax, therefore need a little bit polishing. (for instance configuring the platform in user.cmake )

    Absolutely open to any changes or resolving any mistake :)

    enhancement cmake 
    opened by Ali-Nasrolahi 5
  • NESocket - Use std::string instead of String

    NESocket - Use std::string instead of String

    === NOT READY TO MERGE === Converting String to std::string in the areg base can be done incrementally like this. Still not compilable, but it is quite promising that we can move to std::string step by step.

    opened by biwiki 3
  • CMake integration

    CMake integration

    Good evening @aregtech and @biwiki.

    I'd like to present new progress on CMake integration to areg-sdk.

    Summery of new features and improvements:

    • Comments added to few instructions for clarification.

    • Some configuration settings have modified for better syntactical improvement.

    • Examples (01 to 09) is now compiled and linked by CMake.

      • examples 10_locsvc through 17_winchat (plus 00_helloservice) has different structure than others, therefore they need different method other than what had been implemented right now in examples/CMakeLists.txt.

        one of such difference is having multiple executables in a single example.

    Next PR will include rest of example support.

    To compile and test the output, I used following commands at root of areg-sdk :

    $ cmake CMakeLists.txt -Bbuild
    
    $ cd build
    $ make -j 4
    

    As our previous discussion, right now all examples output is still included in build directory along with mcrouter.out. Which after decision been made on output directory of executables, we could modify CMake configuration as needed easily.

    As always, open to any changes / modification. :)

    cmake 
    opened by Ali-Nasrolahi 2
  • Integrate CMake file #28

    Integrate CMake file #28

    Brief description on changes

    Root cmake created with initializing aliases.

    configuration files placed in conf/cmake. some of makefile features which represented in conf/make are not compatible with cmake sysntax, therefore need a little bit polishing. (for instance configuring the platform in user.cmake )

    Absolutely open to any changes or resolving any mistake :)

    opened by Ali-Nasrolahi 2
  • 20220205 issue18 cmake

    20220205 issue18 cmake

    Sources added.

    I compiled the code ,with no extra settings, successfully.

    This is the command that I've used for compiling in root cmake directory.

    cmake -Bbuild/
    

    which create a directory called build and puts Makefile for compiling the project.

    Please review the results and let me if any problem occurred during compiling or linking.

    If the executable output works as it should , after few tweaks and improvement in configuration, I believe this branch could even be merged into master.

    Let me know if any modifications are needed, open to any changes :)

    enhancement cmake script 
    opened by Ali-Nasrolahi 1
  • Qt creator / VSCode project

    Qt creator / VSCode project

    AREG SDK has project files to compile with MSVC and Eclipse. Create Qt Creators project files, setup VSCode workspace to compile projects with these IDE.

    enhancement help wanted good first issue script 
    opened by aregtech 0
  • Add a Gitter chat badge to README.md

    Add a Gitter chat badge to README.md

    aregtech/areg-sdk now has a Chat Room on Gitter

    @aregtech has just created a chat room. You can visit it here: https://gitter.im/areg-sdk/general.

    This pull-request adds this badge to your README.md:

    Gitter

    If my aim is a little off, please let me know.

    Happy chatting.

    PS: Click here if you would prefer not to receive automatic pull-requests from Gitter in future.

    opened by gitter-badger 0
  • Add a Gitter chat badge to README.md

    Add a Gitter chat badge to README.md

    aregtech/areg-sdk now has a Chat Room on Gitter

    @aregtech has just created a chat room. You can visit it here: https://gitter.im/areg-sdk/community.

    This pull-request adds this badge to your README.md:

    Gitter

    If my aim is a little off, please let me know.

    Happy chatting.

    PS: Click here if you would prefer not to receive automatic pull-requests from Gitter in future.

    opened by gitter-badger 0
  • Channel and serialization refactoring, prepare multiple protocol support

    Channel and serialization refactoring, prepare multiple protocol support

    In the current implementation of AREG SDK, the data is serialized in message buffer of the event. In order to support multiple protocol, the serialization should be channel dependent and it should be configurable in initialization file (mcrouter.init).

    • Change the name of communication configuration;
    • Beside connection description, define and bind communication channel.
    • The channel as well should have possibility to specify protocol so that AREG SDK can integrate various protocols and these protocols are serialized not in the event object, but in the Channel. Only the channel should know how to encode and decode data.
    enhancement help wanted 
    opened by aregtech 0
  • Implement multiple communication channel support

    Implement multiple communication channel support

    Currently AREG SDK supports only TCP/IP protocol and 1 communication channel.

    • Implement (split) Communication Manager
    • Implement possibility to register multiple Channels
    enhancement help wanted 
    opened by aregtech 0
  • Implement additional tests

    Implement additional tests

    Implement additional tests to demonstrate the features. For example:

    • dynamically unlocking the request and preparing response to send back to client
    • subscribing on response
    enhancement help wanted good first issue C++ test 
    opened by aregtech 0
Releases(v1.0.0)
  • v1.0.0(Nov 11, 2021)

    The official release v1.0.0 to create interface-centric multithreading and multiprocessing distributed services running on connected Things.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.2-beta(Oct 21, 2021)

  • v0.9.0-alpha(Oct 20, 2021)

    Date: 20 October 2021

    The first version of areg sdk -- asynchronous engine, which focus is to become the top mist-computing application development platform for embedded and high-end systems.

    Implemented features in version 0.9.0-alpha

    • Basic framework.
    • Service manager.
    • Timer service.
    • Request-response and publish-subscribe services.
    • Service provider and service user.
    • Logging / tracing.
    • TCP/IP communication manager.
    • Multiprocessing and multithreading automated messaging.
    • Multicast router (MCR);
    • Code-generator.
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0_alpha(Oct 3, 2021)

Owner
Enabling services on your device
We help to develop autonomous, intelligent and self-aware connected things at the edge of the network, by enabling public services on your devices.
Enabling services on your device
Provide translation, currency conversion, and voting services. First using telnet you create a connection to a TCP socket, then the server connects to 3 UDP sockets hosted on other servers to do tasks.

to run micro servers g++ translator.cpp -o translator ./translator <port 1> g++ voting.cpp -o voting ./voting <port 2> g++ currency_converter.cpp -o c

Jacob Artuso 1 Oct 29, 2021
A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols.

evpp Introduction 中文说明 evpp is a modern C++ network library for developing high performance network services using TCP/UDP/HTTP protocols. evpp provid

Qihoo 360 3k Jun 27, 2022
Espressif IoT Library. IoT Device Drivers, Documentations And Solutions.

Espressif IoT Library. IoT Device Drivers, Documentations And Solutions.

Espressif Systems 1.2k Jun 29, 2022
LAppS - Lua Application Server for micro-services with default communication over WebSockets. The fastest and most vertically scalable WebSockets server implementation ever. Low latency C++ <-> Lua stack roundtrip.

LAppS - Lua Application Server This is an attempt to provide very easy to use Lua Application Server working over WebSockets protocol (RFC 6455). LApp

null 47 Apr 25, 2022
BingBing 53 Jun 10, 2022
A C++ async HTTP client library to use in asynchronous applications while communicating with REST services.

libashttp An asynchronous HTTP library using Boost.ASIO as the backend. This project is licensed under: Usage Here is a example usage which is taken f

Tolga Hoşgör 51 Dec 19, 2021
This API uses both composition and inheritance to provide a generic way to set up a custom server with a custom communication protocol and custom middlewares

Ziapi Summary Introduction Installation Introduction This API uses both composition and inheritance to provide a generic way to set up a custom server

Aurélien Boch 8 Apr 22, 2022
StateAFL: A Greybox Fuzzer for Stateful Network Servers

StateAFL: A Coverage-Driven (Greybox) Fuzzer for Stateful Network Protocols StateAFL is a fuzzer designed for network servers. It extends the original

null 98 Jun 6, 2022
Encapsulates the two protocols of OpenVpn and Ikev2, you only need to enter the server IP and port number to realize the connection and status display, and the specific situation of the connection can be displayed at the same time。

NewVpnCore 封装了OpenVpn和Ikev2两种协议,只需要输入服务器IP和端口号即可实现连接和状态显示,同时可以显示连接的具体情况。 UniteVpn Core(第一版) 1. 模块说明 unitevpn:封装了vpn的操作和统一不同协议信息的模块 ikev2:IKEV2协议的源码 op

ZFashion 3 Jun 8, 2022
A cross-platform SDK enabling developers to integrate real-time chat technology into their projects

4Players ODIN SDK ODIN is a cross-platform software development kit (SDK) that enables developers to integrate real-time chat technology into multipla

4Players 4 Feb 20, 2022
Wangle is a framework providing a set of common client/server abstractions for building services in a consistent, modular, and composable way.

Wangle C++ networking library Wangle is a library that makes it easy to build protocols, application clients, and application servers. It's like Netty

Facebook 2.9k Jun 24, 2022
Run SSH on iOS 12 device.

Shelly12 Run SSH on iOS 12 device. Only worked on iPad Air 1, iOS 12.4 Working Get root Set tfp0 to hsp4 Escape Sandbox Restore/Remount RootFS Defeat

null 6 May 11, 2021
Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services.

Pushpin is a reverse proxy server written in C++ that makes it easy to implement WebSocket, HTTP streaming, and HTTP long-polling services. The project is unique among realtime push solutions in that it is designed to address the needs of API creators. Pushpin is transparent to clients and integrates easily into an API stack.

Fanout 3.1k Jun 22, 2022
Hyelicht is an IoT/embedded project for home decoration/automation.

Hyelicht is an IoT/embedded project for home decoration/automation. Its software allows you to do colorful painting and animations on a LED-b

Eike Hein 7 Jan 17, 2022
The program shows how bluetooth devices are connected, without using socket programming

The program shows how bluetooth devices are connected, without using socket programming, it shows how files are shared using principles of OOP

SAKSHI JAIN 1 Jan 22, 2022
Run statically-compiled WebAssembly apps on any embedded platform

embedded-wasm-apps Run native, statically-compiled AssemblyScript, Rust, C/C++, TinyGo, Zig, etc. apps on any platform How it works The approach is si

Volodymyr Shymanskyy 99 Jun 22, 2022
Mongoose Embedded Web Server Library - a multi-protocol embedded networking library with TCP/UDP, HTTP, WebSocket, MQTT built-in protocols, async DNS resolver, and non-blocking API.

Mongoose - Embedded Web Server / Embedded Networking Library Mongoose is a networking library for C/C++. It implements event-driven non-blocking APIs

Cesanta Software 8.5k Jun 29, 2022
Corvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications.

Restbed Restbed is a comprehensive and consistent programming model for building applications that require seamless and secure communication over HTTP

Corvusoft 1.7k Jun 21, 2022
An asynchronous web framework for C++ built on top of Qt

!!! I can no longer maintain this project. If you're interessed, please contact me and I can move the projetct to you !!! Tufão - an asynchronous web

Vinícius dos Santos Oliveira 542 Jun 14, 2022