Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <winsock.h>
- #include <cstdio>
- #include <string>
- #include <process.h>
- #include "pionek.hpp"
- #include "pole.hpp"
- #include "szachownica.hpp"
- using namespace std;
- SOCKET serverSocket;
- struct gracz{
- char kolor;
- SOCKET aktywny;
- SOCKET bialy;
- SOCKET czarny;
- };
- struct gracz ustawGracza(SOCKET bk, SOCKET ck){
- struct gracz gr;
- gr.kolor = 'B';
- gr.bialy = bk;
- gr.czarny = ck;
- gr.aktywny = bk;
- return gr;
- };
- void zmienGracza(struct gracz* gr){
- if((*gr).kolor == 'B'){
- (*gr).kolor = 'C';
- (*gr).aktywny = (*gr).czarny;
- }else{
- (*gr).kolor = 'B';
- (*gr).aktywny = (*gr).bialy;
- }
- }
- int analizuj(Szachownica* szach, char* tmp){
- if(strncmp(tmp,"RUC",3) == 0){
- //bez bicia
- if(tmp[12] == 13){
- char kolor = tmp[4];
- char tmpnr[2];tmpnr[0] = tmp[6];tmpnr[1] = tmp[7];
- int nr = atoi(tmpnr);
- int pio = static_cast<int>(tmp[9]);
- int poz = static_cast<int>(tmp[11]);
- if(kolor == 'B'){
- szach->biale[nr]->rusz(szach->pola[pio][poz]);
- if (poz == 7 && szach->biale[nr]->getDamka() == false)
- szach->biale[nr]->ustawDamke();
- }else{
- szach->czarne[nr]->rusz(szach->pola[pio][poz]);
- if (poz == 0 && szach->czarne[nr]->getDamka() == false)
- szach->czarne[nr]->ustawDamke();
- }
- return 1;
- }
- //z biciem
- else{
- char kolor = tmp[4];
- char tmpnr[2];tmpnr[0] = tmp[6];tmpnr[1] = tmp[7];
- int nr = atoi(tmpnr);
- int pio = static_cast<int>(tmp[9]);
- int poz = static_cast<int>(tmp[11]);
- tmpnr[0] = tmp[13];tmpnr[1] = tmp[14];
- int nrzb = atoi(tmpnr);
- if(kolor == 'B'){
- szach->biale[nr]->rusz(szach->pola[pio][poz]);
- szach->czarne[nrzb]->zostanZbity();
- szach->zbijCzarnego();
- if (poz == 7 && szach->biale[nr]->getDamka() == false)
- szach->biale[nr]->ustawDamke();
- }else{
- szach->czarne[nr]->rusz(szach->pola[pio][poz]);
- szach->biale[nrzb]->zostanZbity();
- szach->zbijBialego();
- if (poz == 0 && szach->czarne[nr]->getDamka() == false)
- szach->czarne[nr]->ustawDamke();
- }
- return 2;
- }
- }
- else if(strncmp(tmp,"ZMI",3) == 0){
- return 5;
- }
- else
- return 0xFF;
- }
- void __cdecl gra(void* arg){
- printf("WSZEDLEM DO WATKU!\n");
- char message[18];
- printf("%d\n",serverSocket);
- SOCKET bialySocket,czarnySocket;
- struct gracz gr = ustawGracza(bialySocket, czarnySocket);
- Szachownica* szachownica = new Szachownica();
- int err = 0;
- err = listen(serverSocket,20);
- if(err != 0){
- printf("Cos poszlo nie tak, nie polaczono z klientem 1\n");
- exit(err);
- }else{
- printf("Polaczono z klientem nr 1\n");
- }
- bialySocket = accept(serverSocket,NULL,0);
- err = listen(serverSocket,20);
- if(err != 0){
- printf("Cos poszlo nie tak, nie polaczono z klientem 2\n");
- exit(err);
- }else{
- printf("Polaczono z klientem nr 2\n");
- }
- czarnySocket = accept(serverSocket,NULL,0);
- send(bialySocket,"KOL B",5,0);
- send(czarnySocket,"KOL C",5,0);
- bool koniec = false;
- int wynik = 0;
- while (koniec == false) {
- bool zmien = false;
- while (zmien == false) {
- memset(message,0,sizeof(message));
- recv(gr.aktywny,message,sizeof(message),0);
- printf(("%s\n",message));
- int x = analizuj(szachownica,message);
- if (x == 1) {
- send(bialySocket,message,13,0);
- send(czarnySocket,message,13,0);
- }
- if (x == 2) {
- send(bialySocket,message,15,0);
- send(czarnySocket,message,15,0);
- }
- if (x == 5) {
- if(szachownica->ileBialych() == 0){
- wynik = 1;
- koniec = true;
- break;
- }
- if(szachownica->ileCzarnych() == 0){
- wynik = 2;
- koniec = true;
- break;
- }
- if(szachownica->sprawdzCzyGraczMaRuch('B') == false && szachownica->sprawdzCzyGraczMaRuch('C') == true){
- wynik = 1;
- koniec = true;
- break;
- }
- else if(szachownica->sprawdzCzyGraczMaRuch('B') == true && szachownica->sprawdzCzyGraczMaRuch('C') == false){
- wynik = 2;
- koniec = true;
- break;
- }
- else if(szachownica->sprawdzCzyGraczMaRuch('B') == false && szachownica->sprawdzCzyGraczMaRuch('C') == false){
- wynik = 3;
- koniec = true;
- break;
- }
- wynik = 0;
- zmienGracza(&gr);
- send(gr.aktywny,"AKT",3,0);
- zmien = true;
- }
- }
- }
- if(wynik == 1){
- send(bialySocket,"KON P",5,0);
- send(czarnySocket,"KON W",5,0);
- }
- if(wynik == 2){
- send(bialySocket,"KON W",5,0);
- send(czarnySocket,"KON P",5,0);
- }
- if(wynik == 3){
- send(bialySocket,"KON R",5,0);
- send(czarnySocket,"KON R",5,0);
- }
- closesocket(bialySocket);
- closesocket(czarnySocket);
- _endthread();
- }
- int main(){
- WSADATA winsock;
- struct in_addr addr;
- struct sockaddr_in sin;
- int port = 7734;
- char adr[20];
- int err;
- WSAStartup(MAKEWORD(2,2),&winsock);
- serverSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- cout << "Podaj adres IP\n";
- cin >> adr;
- addr.s_addr = inet_addr(adr);
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- sin.sin_addr = addr;
- err = bind(serverSocket,(struct sockaddr *) &sin,sizeof(sin));
- if(err != 0){
- printf("Cos poszlo nie tak\n");
- exit(err);
- }
- printf("%d\n",serverSocket);
- HANDLE watki[2];
- watki[0] =(HANDLE) _beginthread(gra,0,NULL);
- //watki[1] =(HANDLE) _beginthread(gra,0,NULL);
- WaitForSingleObject(watki[0],INFINITE);
- //WaitForMultipleObjects(2,&watki[0],TRUE,INFINITE);
- closesocket(serverSocket);
- WSACleanup();
- printf("Wszystko sie skonczylo\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment