Breep is a c++ bridged peer to peer library. What does that mean? It means that even thoughthe network is constructed as a peer to peer one, there may be no direct connections betweentwo 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 whenpeers come and go, when they send you stuff. You may even use serialization and send your own objectdirectly through the network. Same goes for your listeners: you don't say 'I want to listen forpiles of bytes', but instead you say 'I want to listen for fancy::MyClass'.
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).
Resource | Requirement |
---|---|
Compiler | C++14 compliant or above |
Boost | Boost 1.55 or above |
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
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.
Lucas Lazare, an IT student frustrated from not being able to properly use java's broken network library, and inspired by KryoNet