Advertisement
aj3423

Untitled

Jan 22nd, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <string>
  2. #include <thread>
  3. #include <iostream>
  4. #include <mutex>
  5. #include <enet/enet.h>
  6. using namespace std;
  7.  
  8. std::mutex mtx;
  9. void main()
  10. {
  11.     // initialize
  12.     if(enet_initialize()) {
  13.         cout << "fail init" << endl;
  14.         return;
  15.     }
  16.  
  17.     ENetAddress address;
  18.     address.host = ENET_HOST_ANY;
  19.     address.port = 9000;
  20.  
  21.     ENetHost* server;
  22.     server = enet_host_create(&address,
  23.                   32,
  24.                   2,
  25.                   0,
  26.                   0);
  27.     if(server == NULL) {
  28.         cout << "fail create host" << endl;
  29.         enet_deinitialize();
  30.         return;
  31.     }
  32.  
  33.     ENetEvent event;
  34.     int event_status;
  35.  
  36.     while(1) {
  37.         {
  38.             // lock_guard<std::mutex> lock(mtx);
  39.             event_status = enet_host_service(server, &event, 5000);
  40.         }
  41.         if(event_status >= 0) {
  42.             if(event.type == ENET_EVENT_TYPE_CONNECT) { // client connected
  43.                 // ENetAddress remote = event.peer->address; // peer address
  44.             } else if(event.type == ENET_EVENT_TYPE_RECEIVE) {    // recv data
  45.                 enet_packet_destroy(event.packet); // free
  46.  
  47.                 // ----------- send ------------
  48.                 thread t(std::bind([&] (ENetHost* server, ENetPeer* peer)
  49.                 {
  50.                     string data(2 * 1024, 'b'); // not ok
  51.                     ENetPacket* packet1 = enet_packet_create(data.c_str(), data.length(), ENET_PACKET_FLAG_RELIABLE);
  52.                     if(!packet1) {
  53.                         cout << "create packet fail" << endl;
  54.                         return;
  55.                     }
  56.                     {
  57.                         lock_guard<std::mutex> lock(mtx);
  58.  
  59.                         if(enet_peer_send(peer, 0, packet1) < 0) {
  60.                             cout << "send fail" << endl;
  61.                             return;
  62.                         }
  63.                         enet_host_flush (server);
  64.                     }
  65.                 }, server, event.peer));
  66.                 t.detach();
  67.  
  68.             } else if(event.type == ENET_EVENT_TYPE_DISCONNECT) {     // disconnect
  69.                 // cout << "peer disconnected" << endl;
  70.             }
  71.         }
  72.     }
  73.  
  74.     enet_deinitialize();
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement