Coder Social home page Coder Social logo

raccoonwsclient's Introduction

RaccoonWSClient

RaccoonWSClient is a lightweight implementation of libwebsockets in C++

this project has only one dependency https://libwebsockets.org/

if you want to use https://conan.io/ the conanfile.txt is avaiable

SSL is enabled by default but you can change this to 0 and it will disable SSL

example to build with CLION + Conan

conan install . -s build_type=Debug --install-folder=cmake-build-debug --build missing
cmake .
make

export SSL_CERT_FILE="~/ca-cert.pem"

or you can add

ctxInfo.ssl_ca_filepath = "/home/cacert.pem";

You can set different parameters as you need, a full list of parameters can be found here https://libwebsockets.org/lws-api-doc-master/html/structlws__context__creation__info.html

    creation_info.port                     = CONTEXT_PORT_NO_LISTEN;
    creation_info.iface                    = NULL;
    creation_info.protocols                = protocols;
    creation_info.ssl_cert_filepath        = NULL;
    creation_info.ssl_private_key_filepath = NULL;
    creation_info.extensions               = NULL;
    creation_info.gid                      = -1;
    creation_info.uid                      = -1;
    creation_info.options                 |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
    creation_info.fd_limit_per_thread      = 1024;
    creation_info.max_http_header_pool     = 1024;
    creation_info.ws_ping_pong_interval    = 10;
    creation_info.ka_time                  = 10;
    creation_info.ka_probes                = 10;
    creation_info.ka_interval              = 10;

Example of implemention to subscribe bitstamp https://www.bitstamp.net/websocket/v2/

#include "WsRaccoonClient.h"
#include "string"
#include "iostream"

using namespace std;

class App : public WsClientCallback {

private:
    WsRaccoonClient *wsClient;

public:
    void onConnSuccess(std::string *sessionId) override {
        cout << "connection succeeded" << endl;
        std::string ban = "{ \"event\": \"bts:subscribe\", \"data\": { \"channel\": \"diff_order_book_btcusd\" } }";
        wsClient->sendMessage(&ban);
    }

    void onConnClosed() override {
        cout << "Connection closed" << endl;
    }

    void onConnError() override {
        cout << "Connection error" << endl;

    }

    void onReceiveMessage(std::string *message) override {
        cout << message->c_str() << endl;
    };

    App() {
        wsClient = nullptr;
    }

    void start() {
        std::string *address = new std::string("ws.bitstamp.net");
        std::string *path = new std::string("/");
        wsClient = new WsRaccoonClient(address, 443, path, this);
        delete address;
        delete path;

        wsClient->start();

        sleep(10);

        wsClient->stop();
        delete wsClient;
        wsClient = nullptr;
    }
};

int main(int args, char **argv) {
    (new App())->start();
    return 0;
}

raccoonwsclient's People

Contributors

maurodelazeri avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

raccoonwsclient's Issues

Can not connect huobi.com

I would like to connect wss://www.hbdm.com/ws (doc: https://huobiapi.github.io/docs/dm/v1/en/#huobi-dm-websocket-subscription-address) with libwebsockets, it fail.
Then I found your project, I doing nothing but change adress and path, it fail too.

void start() {
        std::string *address = new std::string("www.hbdm.com");
        std::string *path = new std::string("/ws");
        wsClient = new WsRaccoonClient(address, 443, path, this);
        delete address;
        delete path;

        wsClient->start();

        sleep(10);

        wsClient->stop();
        delete wsClient;
        wsClient = nullptr;
    }

It always tell Connect failed errno=101.
I don't know what't wrong though I try my best.

It is so easy with python

import websockets

websockets.connect("wss://www.hbdm.com") 

and so is java, new a WebSocketClient object and implement the abstract method, the url is all params it need.

import org.java_websocket.client.WebSocketClient;


WebSocketClient webSocketClient = new WebSocketClient(new URI(this.pushUrl)) {
            public void onOpen(ServerHandshake serverHandshake) {
                //....
            }

            public void onMessage(String s) {
                //....
            }

            public void onMessage(ByteBuffer bytes) {
                //....
            }

            public void onClose(int i, String s, boolean b) {
                //....
            }

            public void onError(Exception e) {
                //....
            }
        };

        webSocketClient.connect();

It telling me the server is OK, what's wrong with libwebsockets, I have no idea.

Counld You please help? Thank you very much!

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.