Advertisement
loakar

Untitled

Nov 26th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. //struktura do przechowywania pakietow oczekujacych na obsluzenie
  2. struct WaitingPacket {
  3.     sockaddr_in client; //adres klienta ktory przyslal pakiet
  4.     unsigned char packet[12]; //pakiet ktory prztyslal klient
  5. };
  6.  
  7. class Connection {
  8.     //...
  9.     std::queue<WaitingPacket>packetBuffor; //bufor pakietow przyslanych do serwera
  10.     //...
  11.     }
  12.  
  13.     //odbior danych
  14.     void reciveData() {
  15.         int addr_len = sizeof(struct sockaddr);
  16.         WaitingPacket toQueue;
  17.  
  18.         while (true) {
  19.             //zapisanie pakietu do zmiennej tymczasowej
  20.             bytesRecv = recvfrom(mainSocket, (char*)toQueue.packet, sizeof(toQueue.packet), 0,
  21.                 (struct sockaddr *) &toQueue.client, &addr_len);
  22.  
  23.             packetBuffor.push(toQueue); //dodanie pakietu do bufora
  24.         }
  25.     }
  26.  
  27.     //przeslanie danych
  28.     void sendData() {
  29.         WaitingPacket fromBuffor;
  30.  
  31.         while (true) {
  32.             //gdy jest jakis pakiet w buforze
  33.             if (packetBuffor.size() > 0) {
  34.                
  35.                 //pobranie danych z bufora
  36.                 fromBuffor = packetBuffor.front();
  37.                 packetBuffor.pop();
  38.                
  39.                 //pobranie danych z pakietu
  40.                 packet.decodePacket(fromBuffor.packet);
  41.                 int status = packet.getStatus();
  42.  
  43.                 //sprawdzenie poprawnosci id
  44.                 if (!checkId(packet.getId()) && status!=0) {
  45.                 status = 7; //blad id
  46.                 }
  47.  
  48.                 std::cout << "Uzytkownik [" << packet.getId() << "] : ";
  49.  
  50.                 //obsluga pakietu
  51.                 switch (status) {
  52.                 //obsluga pakietu
  53.                 }
  54.  
  55.                 //jezeli nie czeka na kolejne liczby lub klient sie nie rozlaczyl, przeslij pakiet
  56.                 if (packet.getStatus() != 4 && packet.getStatus() != 9) {
  57.                     packet.getPacket(packetSent);
  58.  
  59.                     bytesSent = sendto(mainSocket, (char*)packetSent, sizeof(packetSent), 0,
  60.                         (struct sockaddr *) & fromBuffor.client, sizeof(struct sockaddr));
  61.                 }
  62.             }
  63.         }
  64.     }
  65.     //tworzenie watku odbierania pakietow
  66.     std::thread reciveThread() {
  67.         return std::thread([this] { reciveData(); });
  68.     }
  69.     //tworzenie watku obslugi i wysylania pakietow
  70.     std::thread sendThread() {
  71.         return std::thread([this] { sendData(); });
  72.     }
  73.  
  74. };
  75.  
  76. int main(int argc, char * argv[])
  77. {
  78.     //utworz polaczenie
  79.     Connection connection;
  80.     connection.connect();
  81.  
  82.     //wlacz obsluge otrzymywania i wysylania pakietow
  83.     std::thread t1 = connection.reciveThread();
  84.     std::thread t2 = connection.sendThread();
  85.     t1.join();
  86.     t2.join();
  87.  
  88.     system("PAUSE");
  89.  
  90.     return 0;
  91.  
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement