Haifisch7734

serwer

Jun 10th, 2014
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <winsock.h>
  3. #include <cstdio>
  4. #include <string>
  5. #include <process.h>
  6. #include "pionek.hpp"
  7. #include "pole.hpp"
  8. #include "szachownica.hpp"
  9.  
  10. using namespace std;
  11. SOCKET serverSocket;
  12.  
  13. struct gracz{
  14.     char kolor;
  15.     SOCKET aktywny;
  16.     SOCKET bialy;
  17.     SOCKET czarny;
  18. };
  19.  
  20. struct gracz ustawGracza(SOCKET bk, SOCKET ck){
  21. struct gracz gr;
  22. gr.kolor = 'B';
  23. gr.bialy = bk;
  24. gr.czarny = ck;
  25. gr.aktywny = bk;
  26. return gr;
  27. };
  28.  
  29. void zmienGracza(struct gracz* gr){
  30. if((*gr).kolor == 'B'){
  31.     (*gr).kolor = 'C';
  32.     (*gr).aktywny = (*gr).czarny;
  33. }else{
  34.     (*gr).kolor = 'B';
  35.     (*gr).aktywny = (*gr).bialy;
  36. }
  37. }
  38.  
  39. int analizuj(Szachownica* szach, char* tmp){
  40. if(strncmp(tmp,"RUC",3) == 0){
  41.     //bez bicia
  42.     if(tmp[12] == 13){
  43.         char kolor = tmp[4];
  44.         char tmpnr[2];tmpnr[0] = tmp[6];tmpnr[1] = tmp[7];
  45.         int nr = atoi(tmpnr);
  46.         int pio = static_cast<int>(tmp[9]);
  47.         int poz = static_cast<int>(tmp[11]);
  48.         if(kolor == 'B'){
  49.             szach->biale[nr]->rusz(szach->pola[pio][poz]);
  50.             if (poz == 7 && szach->biale[nr]->getDamka() == false)
  51.                     szach->biale[nr]->ustawDamke();
  52.         }else{
  53.             szach->czarne[nr]->rusz(szach->pola[pio][poz]);
  54.             if (poz == 0 && szach->czarne[nr]->getDamka() == false)
  55.                     szach->czarne[nr]->ustawDamke();
  56.         }
  57.     return 1;
  58.     }
  59.     //z biciem
  60.     else{
  61.         char kolor = tmp[4];
  62.         char tmpnr[2];tmpnr[0] = tmp[6];tmpnr[1] = tmp[7];
  63.         int nr = atoi(tmpnr);
  64.         int pio = static_cast<int>(tmp[9]);
  65.         int poz = static_cast<int>(tmp[11]);
  66.         tmpnr[0] = tmp[13];tmpnr[1] = tmp[14];
  67.         int nrzb = atoi(tmpnr);
  68.         if(kolor == 'B'){
  69.             szach->biale[nr]->rusz(szach->pola[pio][poz]);
  70.             szach->czarne[nrzb]->zostanZbity();
  71.             szach->zbijCzarnego();
  72.             if (poz == 7 && szach->biale[nr]->getDamka() == false)
  73.                     szach->biale[nr]->ustawDamke();
  74.         }else{
  75.             szach->czarne[nr]->rusz(szach->pola[pio][poz]);
  76.             szach->biale[nrzb]->zostanZbity();
  77.             szach->zbijBialego();
  78.             if (poz == 0 && szach->czarne[nr]->getDamka() == false)
  79.                     szach->czarne[nr]->ustawDamke();
  80.         }
  81.         return 2;
  82.     }
  83.     }
  84. else if(strncmp(tmp,"ZMI",3) == 0){
  85.     return 5;
  86.     }
  87. else
  88.     return 0xFF;
  89. }
  90.  
  91.  
  92. void __cdecl gra(void* arg){
  93.     printf("WSZEDLEM DO WATKU!\n");
  94.     char message[18];
  95.     printf("%d\n",serverSocket);
  96.     SOCKET bialySocket,czarnySocket;
  97.     struct gracz gr = ustawGracza(bialySocket, czarnySocket);
  98.     Szachownica* szachownica = new Szachownica();
  99.     int err = 0;
  100.     err = listen(serverSocket,20);
  101.     if(err != 0){
  102.         printf("Cos poszlo nie tak, nie polaczono z klientem 1\n");
  103.         exit(err);
  104.         }else{
  105.         printf("Polaczono z klientem nr 1\n");
  106.         }
  107.     bialySocket = accept(serverSocket,NULL,0);
  108.     err = listen(serverSocket,20);
  109.     if(err != 0){
  110.         printf("Cos poszlo nie tak, nie polaczono z klientem 2\n");
  111.         exit(err);
  112.         }else{
  113.         printf("Polaczono z klientem nr 2\n");
  114.         }
  115.     czarnySocket = accept(serverSocket,NULL,0);
  116.     send(bialySocket,"KOL B",5,0);
  117.     send(czarnySocket,"KOL C",5,0);
  118.  
  119.     bool koniec = false;
  120.         int wynik = 0;
  121.         while (koniec == false) {
  122.             bool zmien = false;
  123.             while (zmien == false) {
  124.                 memset(message,0,sizeof(message));
  125.                 recv(gr.aktywny,message,sizeof(message),0);
  126.                 printf(("%s\n",message));
  127.                 int x = analizuj(szachownica,message);
  128.                 if (x == 1) {
  129.                     send(bialySocket,message,13,0);
  130.                     send(czarnySocket,message,13,0);
  131.                 }
  132.                 if (x == 2) {
  133.                     send(bialySocket,message,15,0);
  134.                     send(czarnySocket,message,15,0);
  135.                 }
  136.                 if (x == 5) {
  137.                     if(szachownica->ileBialych() == 0){
  138.                         wynik = 1;
  139.                         koniec = true;
  140.                         break;
  141.                     }
  142.                     if(szachownica->ileCzarnych() == 0){
  143.                         wynik = 2;
  144.                         koniec = true;
  145.                         break;
  146.                     }
  147.                     if(szachownica->sprawdzCzyGraczMaRuch('B') == false && szachownica->sprawdzCzyGraczMaRuch('C') == true){
  148.                         wynik = 1;
  149.                         koniec = true;
  150.                         break;
  151.                     }
  152.                     else if(szachownica->sprawdzCzyGraczMaRuch('B') == true && szachownica->sprawdzCzyGraczMaRuch('C') == false){
  153.                         wynik = 2;
  154.                         koniec = true;
  155.                         break;
  156.                     }
  157.                     else if(szachownica->sprawdzCzyGraczMaRuch('B') == false && szachownica->sprawdzCzyGraczMaRuch('C') == false){
  158.                         wynik = 3;
  159.                         koniec = true;
  160.                         break;
  161.                     }
  162.                     wynik = 0;
  163.                     zmienGracza(&gr);
  164.                     send(gr.aktywny,"AKT",3,0);
  165.                     zmien = true;
  166.                 }
  167.             }
  168.         }
  169.         if(wynik == 1){
  170.             send(bialySocket,"KON P",5,0);
  171.             send(czarnySocket,"KON W",5,0);
  172.         }
  173.         if(wynik == 2){
  174.             send(bialySocket,"KON W",5,0);
  175.             send(czarnySocket,"KON P",5,0);
  176.         }
  177.         if(wynik == 3){
  178.             send(bialySocket,"KON R",5,0);
  179.             send(czarnySocket,"KON R",5,0);
  180.         }
  181.     closesocket(bialySocket);
  182.     closesocket(czarnySocket);
  183.     _endthread();
  184. }
  185.  
  186. int main(){
  187. WSADATA winsock;
  188. struct in_addr addr;
  189. struct sockaddr_in sin;
  190. int port = 7734;
  191. char adr[20];
  192. int err;
  193.  
  194. WSAStartup(MAKEWORD(2,2),&winsock);
  195. serverSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  196. cout << "Podaj adres IP\n";
  197. cin >> adr;
  198.  
  199.  
  200. addr.s_addr = inet_addr(adr);
  201. sin.sin_family = AF_INET;
  202. sin.sin_port = htons(port);
  203. sin.sin_addr = addr;
  204. err = bind(serverSocket,(struct sockaddr *) &sin,sizeof(sin));
  205. if(err != 0){
  206.     printf("Cos poszlo nie tak\n");
  207.     exit(err);
  208. }
  209. printf("%d\n",serverSocket);
  210. HANDLE watki[2];
  211. watki[0] =(HANDLE) _beginthread(gra,0,NULL);
  212. //watki[1] =(HANDLE) _beginthread(gra,0,NULL);
  213. WaitForSingleObject(watki[0],INFINITE);
  214. //WaitForMultipleObjects(2,&watki[0],TRUE,INFINITE);
  215.  
  216. closesocket(serverSocket);
  217. WSACleanup();
  218. printf("Wszystko sie skonczylo\n");
  219. return 0;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment