Git Product home page Git Product logo

lecnet's Introduction

lecnet

lecnet C++ network library

Lines of code GitHub issues GitHub closed issues

Release Info

GitHub release (latest by date) GitHub Release Date

Commit Info

GitHub last commit GitHub commit activity

About the Library

The lecnet library is a networking library designed for the rapid development of modern, efficient and easy to maintain C++ networking applications. It is part of the liblec libraries (https://github.com/alecmus/liblec).

Documentation

The library uses embedded XML-style documentation. An HTML version of this documentation is available here.

Usage Examples

The library is used in the collab and StudentSync apps.

Prebuilt Binaries

Prebuild binaries of the library can be found under releases: https://github.com/alecmus/lecnet/releases.

Dependencies

OpenSSL

This library uses OpenSSL (https://www.openssl.org/) for various functions, e.g. SSL encryption and making digital certificates. The user is free to compile OpenSSL on their own, but for convenience, OpenSSL binaries that I have compiled can be obtained from https://github.com/alecmus/files/tree/master/openssl. Kindly note that I prefer compiling OpenSSL so that the 32 and 64 bit binaries have different names to avoid ambiguity and deployment mistakes and,a also for other advantages that I won't get into here.

By default, the lecnet project is configured to look for OpenSSL in C:\local\libs\openssl. Placing the OpenSSL files I compiled into this location will enable building without modifications; placing them (or differently named variants) elsewhere will require appropriate modification of the project properties and source files.

Building

Create a folder '\liblec' and clone the repository into it such that it resides in 'liblec\lecnet'. Open the Microsoft Visual Studio Solution file liblec\lecnet\lecnet.sln. Select Build -> Batch Build, then select the desired configurations of the given four:

  1. Debug x86
  2. Relese x86 (32 bit Release Build)
  3. Debug x64
  4. Release x64 (64 bit Release Build)

Build.

Three folders will be created in the \liblec directory, namely bin, lib and include. Below is a description of these subdirectories.

  1. bin - contains the binary files. The following files will be created:
File Description
lecnet32.dll 32 bit release build
lecnet64.dll 64 bit release build
lecnet32d.dll 32 bit debug build
lecnet64d.dll 64 bit debug build
  1. lib - contains the static library files that accompany the dlls. The files are names after the respective dlls.
  2. include - contains the include files

Linking to the Library

Microsoft Visual Studio

Open your project's properties and for All Configurations and All Platforms set the following:

  1. C/C++ -> General -> Additional Include Directories -> Edit -> New Line ... add \liblec\include
  2. Linker -> General -> Additional Library Directories -> Edit -> New Line ... add \liblec\lib
  3. Debugging -> Environment -> Edit ... add PATH=\liblec\bin;\openssl\bin;PATH%

Now you can use the required functions by calling #include <liblec/lecnet/...>

Build.

Using the Library

Usage guidelines are available in-code in the respective header files. Below are minimalistic example programs.

TCP/IP Server

Below is sample code for implementing a TCP/IP server (with default parameters):

#include <liblec/lecnet/tcp.h>
#include <thread>
#include <chrono>
#include <iostream>

class tcp_server : public liblec::lecnet::tcp::server_async {
public:
    void log(const std::string& time_stamp, const std::string& event) override {
        std::cout << time_stamp + ": " << event << std::endl;
    }

    std::string on_receive(const client_address& address,
        const std::string& data_received) override {
        return data_received;
    }
};

int main() {
    liblec::lecnet::tcp::server::server_params params;
    
    tcp_server server;
    if (server.start(params)) {
        while (server.starting())
            std::this_thread::sleep_for(std::chrono::milliseconds(1));

        while (server.running())
            std::this_thread::sleep_for(std::chrono::milliseconds(1));

        server.stop();
    }

    return 0;
}

The code above results in the following output:

TCP/IP Client

Below is sample code for implementing a TCP/IP client (with default parameters):

#include <liblec/lecnet/tcp.h>
#include <thread>
#include <chrono>
#include <iostream>

int main() {
    liblec::lecnet::tcp::client::client_params params;
    params.use_ssl = false;
    liblec::lecnet::tcp::client client;
    std::string error;
    if (client.connect(params, error)) {
        while (client.connecting())
            std::this_thread::sleep_for(std::chrono::milliseconds(1));

        if (client.connected(error)) {
            while (client.running()) {
                std::string received;
                if (client.send_data("Sample message", received, 10, nullptr, error))
                    std::cout << "Reply from server: " << received << std::endl;

                std::this_thread::sleep_for(std::chrono::milliseconds(1000));
            }
        }
        else
            std::cout << error << std::endl;
    }
    
    return 0;
}

The code above results in the following output:

Deploying your Application

If it's a 32 bit build you will need to deploy it with lecnet32.dll in the same folder, together with libeay32.dll (32bit build of OpenSSL). If it's a 64 bit build use the lecnet64.dll, together with libeay64.dll (64 bit build of OpenSSL).

lecnet's People

Contributors

alecmus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

lecnet's Issues

Detecting Disconnected Client

Server not detecting disconnected client if disconnection is through a disconnected LAN cable rather than a closed client app.

Timeout Loop

Client gets stuck in timeout loop when server takes too long to respond, and only breaks out when the server is restarted.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.