aj3423

Untitled

Jan 21st, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 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_flush;
  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.     while(enet_host_service(server, &event, 5000) >= 0) {
  35.         if(event.type == ENET_EVENT_TYPE_CONNECT) { // client connected
  36.             ENetAddress remote = event.peer->address; // peer address
  37.         } else if(event.type == ENET_EVENT_TYPE_RECEIVE) {    // recv data
  38.             enet_packet_destroy(event.packet); // free
  39.             // ----------- send ------------
  40.             thread t(std::bind([&] (ENetHost* server, ENetPeer* peer)
  41.             {
  42.                 cout << "now reply" << endl;
  43.                 string data(2 * 1024, 'b'); // not ok
  44.                 ENetPacket* packet1 = enet_packet_create(data.c_str(), data.length(), ENET_PACKET_FLAG_RELIABLE);
  45.                 if(!packet1) {
  46.                     cout << "create packet fail" << endl;
  47.                     return;
  48.                 }
  49.  
  50.                 if(enet_peer_send(peer, 0, packet1) < 0) {
  51.                     cout << "send fail" << endl;
  52.                     return;
  53.                 }
  54.  
  55.                 {
  56.  
  57.                     std::lock_guard<std::mutex> guard(mtx_flush);
  58.                     enet_host_flush (server);
  59.                 }
  60.             }, server, event.peer));
  61.             t.detach();
  62.         } else if(event.type == ENET_EVENT_TYPE_DISCONNECT) {     // disconnect
  63.             // cout << "peer disconnected" << endl;
  64.         }
  65.     }
  66.  
  67.     enet_deinitialize();
  68. }
Advertisement
Add Comment
Please, Sign In to add comment