Skip to content
/ kuma Public
forked from Jamol/kuma

A network library implemented in C++11, supports TCP/UDP/HTTP/HTTP2/WebSocket/SSL on platform Linux/Windows/OSX/iOS/Android.

License

Notifications You must be signed in to change notification settings

andyhu-hz/kuma

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kuma

kuma is a multi-platform support network library developed in C++11. It implements interfaces for TCP/UDP/Multicast/HTTP/HTTP2/WebSocket/timer that drove by event loop. kuma supports epoll/poll/WSAPoll/kqueue/select on platform Linux/Windows/OSX/iOS/Android.

Build

define macro KUMA_HAS_OPENSSL to enable openssl

iOS

open project bld/ios/kuma with xcode and build it

OSX

open project bld/osx/kuma with xcode and build it

Windows

open bld/msvc/kuma.sln with VS2015 and build it

Linux

$ cd src
$ make

Android

$ cd src/jni
$ ndk-build

OpenSSL

certificates location is same as your binary folder by default.

copy all CA certificates used to ca.cer
copy your server certificate to server.cer
copy your server private key to server.key

Simple example

Please refer to test/client and test/server for more examples

client

#include "kmapi.h"

using namespace kuma;

int main(int argc, char *argv[])
{
    kuma::init();
    
    EventLoop main_loop(PollType::NONE);
    if (!main_loop.init()) {
        printf("failed to init EventLoop\n");
        kuma::fini();
        return -1;
    }
    
    WebSocket ws(&main_loop);
    ws.setDataCallback([] (void* data, size_t len) {
        printf("ws.onData, len=%lu\n", len);
    });
    ws.setWriteCallback([] (KMError err) {
        printf("ws.onWrite, write available\n");
    });
    ws.setErrorCallback([] (KMError err) {
        printf("ws.onError, err=%d\n", err);
    });
    ws.setProtocol("jws");
    ws.setOrigin("www.jamol.cn");
    ws.connect("wss://127.0.0.1:8443", [] (KMError err) {
        printf("ws.onConnect, err=%d\n", err);
    });
    
    Timer timer(&main_loop);
    timer.schedule(1000, [] {
        printf("onTimer\n");
    }, TimerMode::ONE_SHOT);
    
    main_loop.loop();
    kuma::fini();
    return 0;
}

server

#include "kmapi.h"

using namespace kuma;

int main(int argc, char *argv[])
{
    kuma::init();
    
    EventLoop main_loop(PollType::NONE);
    if (!main_loop.init()) {
        printf("failed to init EventLoop\n");
        kuma::fini();
        return -1;
    }
    
    WebSocket ws(&main_loop);
    ws.setDataCallback([] (void* data, size_t len) {
        printf("ws.onData, len=%lu\n", len);
    });
    ws.setWriteCallback([] (KMError err) {
        printf("ws.onWrite, write available\n");
    });
    ws.setErrorCallback([] (KMError err) {
        printf("ws.onError, err=%d\n", err);
    });
    
    TcpListener server(&main_loop);
    server.setAcceptCallback([&ws] (SOCKET_FD fd, const char* ip, uint16_t port) -> bool {
        printf("server.onAccept, ip=%s\n", ip);
        ws.setSslFlags(SSL_ENABLE);
        ws.attachFd(fd, nullptr, 0);
        return true;
    });
    server.setErrorCallback([] (KMError err) {
        printf("server.onError, err=%d\n", err);
    });
    auto ret = server.startListen("0.0.0.0", 8443);
    if (ret != KMError::NOERR) {
        printf("failed to listen on 8443\n");
    }
    
    main_loop.loop();
    kuma::fini();
    return 0;
}

About

A network library implemented in C++11, supports TCP/UDP/HTTP/HTTP2/WebSocket/SSL on platform Linux/Windows/OSX/iOS/Android.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 96.8%
  • Other 3.2%