All Projects → Organic-Code → Breep

Organic-Code / Breep

Licence: EUPL-1.1 license
C++ peer to peer library, built on the top of boost

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to Breep

Otunnel
peer-to-peer tunnel tool
Stars: ✭ 224 (+101.8%)
Mutual labels:  peer-to-peer
haskell-ricochet
(WIP/Experimental) Ricochet implementation as Haskell Library.
Stars: ✭ 22 (-80.18%)
Mutual labels:  peer-to-peer
orbit-db-cli
CLI for orbit-db
Stars: ✭ 60 (-45.95%)
Mutual labels:  peer-to-peer
Cratetorrent
A BitTorrent V1 engine library for Rust (and currently Linux)
Stars: ✭ 233 (+109.91%)
Mutual labels:  peer-to-peer
gofast
High performance transport protocol for distributed applications.
Stars: ✭ 19 (-82.88%)
Mutual labels:  peer-to-peer
pinecone
Peer-to-peer overlay routing for the Matrix ecosystem
Stars: ✭ 361 (+225.23%)
Mutual labels:  peer-to-peer
Redwood
A highly-configurable, distributed, realtime database that manages a state tree shared among many peers.
Stars: ✭ 218 (+96.4%)
Mutual labels:  peer-to-peer
conceal-desktop
Conceal Desktop (GUI)
Stars: ✭ 65 (-41.44%)
Mutual labels:  peer-to-peer
trystero
🤝 Serverless WebRTC matchmaking for painless P2P — Make any site multiplayer in a few lines — Use BitTorrent, IPFS, or Firebase
Stars: ✭ 512 (+361.26%)
Mutual labels:  peer-to-peer
geesome-node
🦈 Your self-hosted decentralized Messenger, Social network, Media file storage on top of IPFS! Freely communicate in encrypted chat groups, share images, video, text or any data without a risk of censorship or blocking.
Stars: ✭ 90 (-18.92%)
Mutual labels:  peer-to-peer
Kinectron
Electron + Kinect + PeerJS = Kinect data broadcast to browsers
Stars: ✭ 249 (+124.32%)
Mutual labels:  peer-to-peer
sublime
Repository for the Tandem Sublime Plugin
Stars: ✭ 22 (-80.18%)
Mutual labels:  peer-to-peer
network
Monorepo containing all the main components of Streamr Network.
Stars: ✭ 522 (+370.27%)
Mutual labels:  peer-to-peer
Sentinel
Sentinel is an interoperable secure network layer offering the Sentinel Service Chain exclusively for distributed & decentralized native services like - dVPN, Sentrix (dChat and dVoIP) and more.
Stars: ✭ 228 (+105.41%)
Mutual labels:  peer-to-peer
dctk
Direct Connect client library (ADC and NMDC) for the Go programming language
Stars: ✭ 15 (-86.49%)
Mutual labels:  peer-to-peer
Zebus
A lightweight Peer to Peer Service Bus
Stars: ✭ 222 (+100%)
Mutual labels:  peer-to-peer
jiber
Open Source API for Realtime Web Apps
Stars: ✭ 53 (-52.25%)
Mutual labels:  peer-to-peer
exocore
A distributed private application framework
Stars: ✭ 50 (-54.95%)
Mutual labels:  peer-to-peer
p2p-project
A peer-to-peer networking framework to work across languages
Stars: ✭ 68 (-38.74%)
Mutual labels:  peer-to-peer
tool-db
A peer-to-peer decentralized database
Stars: ✭ 15 (-86.49%)
Mutual labels:  peer-to-peer

Breep

What is Breep?

Breep is a c++ bridged peer to peer library. What does that mean? It means that even though the network is constructed as a peer to peer one, there may be no direct connections between two dudes, say A and B, if these connections are impossible (due to poorly configured ports, for example). In that case, Breep will attempt to use another peer C as a bridge between A and B.
Breep is also a high-level library. You don't have to care on when peers connect, disconnect, send data, and on how to send your classes. You simply register listeners that get notified when peers come and go, when they send you stuff. You may even use serialization and send your own object directly through the network. Same goes for your listeners: you don't say 'I want to listen for piles of bytes', but instead you say 'I want to listen for fancy::MyClass'.

How do I use Breep::network ?

The best way to now it is to read the tutorials. Alternatively, you may read some examples and the online doc. But as a little preview, here is a 'Hello World!'-type example:

Here is how to create a network, start listening on port 1234, and send "Hello!" to any budy that connects:

BREEP_DECLARE_TYPE(std::string)

void co_listener(breep::tcp::network& network, const breep::tcp::peer& source) {
	network.send_object_to(source, std::string("Hello!"));
}

int main() {
	breep::tcp::network network(1234);
	network.add_connection_listener(&co_listener);
	network.sync_awake();
	return 0;
}

The BREEP_DECLARE_TYPE involved here is used to tell to breep::network that we will listen/send some std::strings. If you forget to do it, you will get a compile-time error.

There is how to do the opposite: the network starts listening on port 1233, tries to connect at localhost:1234, prints the first message it sees, then disconnect:

BREEP_DECLARE_TYPE(std::string)

void data_listener(breep::tcp::netdata_wrapper<std::string>& dw) {
    std::cout << dw.data << std::endl;
    dw.network.disconnect();
}

int main() {
    breep::tcp::network network(1233);
    network.add_data_listener<std::string>(&data_listener);
    if (!network.connect(boost::asio::ip::address_v4::loopback(), 1234)) {
        std::cout << "Failed to connect.\n";
        return 1;
    }
    network.join();
    return 0;
}

Please don't get confused: there is no UDP in this lib (yet).

Why should I use Breep::network ?

  • It's awesome!
  • It's high level: you can directly send and receive objects.
  • The overhead for this is low: if you set up well your serialization, you only have a fixed 64bits extra overhead (compared to sending raw bytes to the p2p network — in comparison, TCP has 320bits of overhead only for its header)
  • It's easy to get in: just read the examples, you'll see!

Why should I NOT use Breep::network ?

  • It has not been tested as much as it should have been.
  • It's probably broken for BigEndian architecture (I have no way to test this, sorry ; a warning should be displayed on such architectures.)
  • It's very, very slow to compile with.

Requirements

Resource Requirement
Compiler C++14 compliant or above
Boost Boost 1.55 or above

Road Map

Milestone Feature Status
0.1 Peer to peer network management complete
0.1 Instantiated objects delivery complete
1.0 Improved serialization complete
1.0 Multiple objects delivery in one go complete
x.x Client server network management on hold

The project is currently on testing stage before the release of Breep 1.0.0

License

This work is under the European Union Public License v1.1.

You may get a copy of this license in your language from the European Commission here.

Extract of article 13 :

All linguistic versions of this Licence, approved by the European Commission, have identical value.
Parties can take advantage of the linguistic version of their choice.

Author

Lucas Lazare, an IT student frustrated from not being able to properly use java's broken network library, and inspired by KryoNet

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].