Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <thread>
- #include <iostream>
- #include <mutex>
- #include <enet/enet.h>
- using namespace std;
- std::mutex mtx;
- void main()
- {
- // initialize
- if(enet_initialize()) {
- cout << "fail init" << endl;
- return;
- }
- ENetAddress address;
- address.host = ENET_HOST_ANY;
- address.port = 9000;
- ENetHost* server;
- server = enet_host_create(&address,
- 32,
- 2,
- 0,
- 0);
- if(server == NULL) {
- cout << "fail create host" << endl;
- enet_deinitialize();
- return;
- }
- ENetEvent event;
- int event_status;
- while(1) {
- {
- // lock_guard<std::mutex> lock(mtx);
- event_status = enet_host_service(server, &event, 5000);
- }
- if(event_status >= 0) {
- if(event.type == ENET_EVENT_TYPE_CONNECT) { // client connected
- // ENetAddress remote = event.peer->address; // peer address
- } else if(event.type == ENET_EVENT_TYPE_RECEIVE) { // recv data
- enet_packet_destroy(event.packet); // free
- // ----------- send ------------
- thread t(std::bind([&] (ENetHost* server, ENetPeer* peer)
- {
- string data(2 * 1024, 'b'); // not ok
- ENetPacket* packet1 = enet_packet_create(data.c_str(), data.length(), ENET_PACKET_FLAG_RELIABLE);
- if(!packet1) {
- cout << "create packet fail" << endl;
- return;
- }
- {
- lock_guard<std::mutex> lock(mtx);
- if(enet_peer_send(peer, 0, packet1) < 0) {
- cout << "send fail" << endl;
- return;
- }
- enet_host_flush (server);
- }
- }, server, event.peer));
- t.detach();
- } else if(event.type == ENET_EVENT_TYPE_DISCONNECT) { // disconnect
- // cout << "peer disconnected" << endl;
- }
- }
- }
- enet_deinitialize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement