cruce-commit Mailing List for Cruce (Page 6)
Status: Beta
Brought to you by:
caiusb
You can subscribe to this list here.
| 2010 |
Jan
|
Feb
|
Mar
(68) |
Apr
(51) |
May
(31) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|---|
|
From: <ca...@us...> - 2010-03-17 08:40:00
|
Revision: 41
http://cruce.svn.sourceforge.net/cruce/?rev=41&view=rev
Author: caiusb
Date: 2010-03-17 08:39:54 +0000 (Wed, 17 Mar 2010)
Log Message:
-----------
Modified BuildAll to create the Object folders.
Modified Paths:
--------------
C/trunk/BuildAll.sh
Removed Paths:
-------------
C/trunk/protocol/Object/
Modified: C/trunk/BuildAll.sh
===================================================================
--- C/trunk/BuildAll.sh 2010-03-17 08:35:18 UTC (rev 40)
+++ C/trunk/BuildAll.sh 2010-03-17 08:39:54 UTC (rev 41)
@@ -2,6 +2,10 @@
#First cleanup
./CleanAll.sh
+#Cream folderele Object
+mkdir ./protocol/Object
+mkdir ./server/Object
+mkdir ./client/Object
#Creeam protocol
protocolFolder=./protocol/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ca...@us...> - 2010-03-17 08:35:25
|
Revision: 40
http://cruce.svn.sourceforge.net/cruce/?rev=40&view=rev
Author: caiusb
Date: 2010-03-17 08:35:18 +0000 (Wed, 17 Mar 2010)
Log Message:
-----------
Modified the CleanAll script so that it removes the Object folder.
Removed Object folder from version control
Modified Paths:
--------------
C/trunk/CleanAll.sh
Removed Paths:
-------------
C/trunk/client/Object/
C/trunk/server/Object/
Modified: C/trunk/CleanAll.sh
===================================================================
--- C/trunk/CleanAll.sh 2010-03-16 19:49:41 UTC (rev 39)
+++ C/trunk/CleanAll.sh 2010-03-17 08:35:18 UTC (rev 40)
@@ -15,3 +15,8 @@
serverObjectFolder=./server/Object
echo "Stergem fisierele din folder $serverObjectFolder"
rm -f $serverObjectFolder/*
+
+echo "Stergem pe Object"
+rmdir $clientObjectFolder
+rmdir $serverObjectFolder
+rmdir $protocolObjectFolder
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-16 19:49:49
|
Revision: 39
http://cruce.svn.sourceforge.net/cruce/?rev=39&view=rev
Author: alinposho
Date: 2010-03-16 19:49:41 +0000 (Tue, 16 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/server/server.c
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-16 12:47:56 UTC (rev 38)
+++ C/trunk/server/server.c 2010-03-16 19:49:41 UTC (rev 39)
@@ -9,6 +9,8 @@
#include "../protocol/protocol.h"
#define NUMAR_ECHIPE 2
+#define true 1
+#define false 0
struct echipa echipe[NUMAR_ECHIPE];
@@ -104,12 +106,33 @@
/** Returneaza true daca toti jucatorii au dat join game **/
int joinGame()
{
+ int i;
+ int j;
+ for(i = 0; i < NUMAR_ECHIPE; i++)
+ for(j = 0; j < MAX_JUCATORI; j++)
+ if(false == echipe[i].jucatori[j].joined)
+ {
+ return false;
+ }
+
+ return true;
}
/* TODO */
/** Returneaza true daca toti jucatorii au dat start game **/
int startGame()
{
+
+ int i;
+ int j;
+ for(i = 0; i < NUMAR_ECHIPE; i++)
+ for(j = 0; j < MAX_JUCATORI; j++)
+ if(false == echipe[i].jucatori[j].active)
+ {
+ return false;
+ }
+
+ return true;
}
/** deal with case when a player leaves **/
@@ -119,13 +142,73 @@
exit(EXIT_SUCCESS);
}
+void sendAckMessage(int receiver_sfd, char message[])
+{
+ //adaugam header
+ char buffer[MSG_SIZE];
+ sprintf(buffer, "%d %s", ACK, message);
+ pad(buffer);
+
+ //trimitem mesajul pe socket
+ write(receiver_sfd, &message, MSG_SIZE);
+}
+
+void sendNACKMessage(int receiver_sfd, char message[])
+{
+ //adaugam header
+ char buffer[MSG_SIZE];
+ sprintf(buffer, "%d %s", NACK, message);
+ pad(buffer);
+
+ //trimitem mesajul pe socket
+ write(receiver_sfd, &message, MSG_SIZE);
+}
+
+void sendInfoMessage(int receiver_sfd, char message[])
+{
+ //adaugam header
+ char buffer[MSG_SIZE];
+ sprintf(buffer, "%d %s", INFO_MSG, message);
+ pad(buffer);
+
+ //trimitem mesajul pe socket
+ write(receiver_sfd, &message, MSG_SIZE);
+}
+
+/**
+ * Functia asta returneaza primul file descriptor dintre jucatorii care
+ * mai sunt conectati la server
+ * in cazul in care nu gaseste nicun file descriptor returneaza -1
+ */
+int getFirst_fd_set(fd_set set)
+{
+ int i;
+ int j;
+ for(i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ for(j = 0; j < MAX_JUCATORI; j++)
+ {
+ if (true == echipe[i].jucatori[j].joined
+ && FD_ISSET(echipe[i].jucatori[j].sfd, &set))
+ {
+ return echipe[i].jucatori[j].sfd;
+ }
+ }
+ }
+ //Nu au fost trimise mesaje
+ return -1;
+
+}
+
/* TODO */
/** Ia un mesaj din retea si vede ce e cu el **/
/* expected reprezinta un vector de int care specifica ce mesaje se
* se asteapta sa vina. Este terminat cu un 0. Daca nu vine un mesaj
- * "expected" atunci el este ignorat (sau poate altceva)
+ * "expected" atunci se returneaza 0.
+ * In cazul in care nu se receptioneaza niciun mesaj se returneaza -1
+ * Daca vine un mesaj expected se returneaza 1
* Daca expected este NULL atunci se iau in considerare toate mesajele */
-void getMSG(struct jucator *jucator, int *expected)
+int getMSG(struct jucator *jucator, int *expected)
{
fd_set set;
int i, j, max = 0;
@@ -142,16 +225,22 @@
for (i=0; i<NUMAR_ECHIPE; i++)
for (j=0; j<JUCATORI_PER_ECHIPA; j++)
{
- FD_SET(echipe[i].jucatori[j].sfd,&set);
- if (max < echipe[i].jucatori[j].sfd)
- max = echipe[i].jucatori[j].sfd;
+ //adaugam doar jucatorii care s-au conectat la server
+ if(1 == echipe[i].jucatori[j].joined)
+ {
+ FD_SET(echipe[i].jucatori[j].sfd,&set);
+ if (max < echipe[i].jucatori[j].sfd)
+ max = echipe[i].jucatori[j].sfd;
+ }
}
select(max+1,&set,NULL,NULL,&t);
if (jucator != NULL)
if (!FD_ISSET(jucator->sfd,&set))
{
- // send NACK
+ //trimitem NACK pentru mesajul ilegal
+ int fileDescriptor = getFirst_fd_set(set);
+ sendNACKMessage(fileDescriptor, "Ai trimis un mesaj ilegal!\n");
}
else
{
@@ -164,7 +253,8 @@
/* TODO multiple messages received */
for (i=0; i<NUMAR_ECHIPE; i++)
for (j=0; j<JUCATORI_PER_ECHIPA; j++)
- if (FD_ISSET(echipe[i].jucatori[j].sfd,&set))
+ if ((1 == echipe[i].jucatori[j].joined) && (
+ FD_ISSET(echipe[i].jucatori[j].sfd,&set)))
{
fd = echipe[i].jucatori[j].sfd;
bla = 1;
@@ -187,7 +277,9 @@
leave_game();
}
if (read_rt != MSG_SIZE);
- printf("Warning: too few bytes read\n");
+ {
+ displayInfoMessage(stdout, "Warning: too few bytes read\n");
+ }
printf("%s\n",msg);
//scanf("%*c");
@@ -202,15 +294,42 @@
switch(code)
{
case JOIN_GAME:
- printf("%s joined the game\n",msg);
- write(fd,resp,MSG_SIZE);
+ {
+ char buffer[200];
+ sprintf(buffer,"%s joined the game\n",msg);
+ displayInfoMessage(stdout, buffer);
+
+ sendAckMessage(fd, "You are welcome to connect to server");
+ //informam restul jucatorilor
+ for(i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ for(j = 0; j < MAX_JUCATORI;j++)
+ {
+ if(echipe[i].jucatori[j].sfd != fd)
+ {
+ char message[100];
+ //sprintf(message, "%s s-a alaturat joucului!\n", jucator.nume);
+ sendInfoMessage(echipe[i].jucatori[i].sfd, message);
+ }
+ }
+ }
break;
+ }
case START_GAME:
- printf("%s started the game\n",msg);
+ {
+ char buffer[200];
+ sprintf(buffer, "%s started the game\n", msg);
+ displayInfoMessage(stdout, buffer);
+
write(fd,resp,MSG_SIZE);
break;
+ }
default:
- printf("Wrong message!\n");
+ {
+ char buffer[200];
+ sprintf(buffer, "Wrong message\n");
+ displayInfoMessage(stdout, buffer);
+ }
}
}
@@ -228,9 +347,7 @@
int noPlayers = 0;
init();
-
-
readConfig();
sfd = makeSocket();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hor...@us...> - 2010-03-16 12:48:03
|
Revision: 38
http://cruce.svn.sourceforge.net/cruce/?rev=38&view=rev
Author: horiaradu
Date: 2010-03-16 12:47:56 +0000 (Tue, 16 Mar 2010)
Log Message:
-----------
Am bagat ultimele modificari facute de Lavinia, si mesajul START_ROUND care sa se trimita la inceputul unei runde.
Modified Paths:
--------------
C/trunk/client/client.c
C/trunk/protocol/protocol.h
Modified: C/trunk/client/client.c
===================================================================
--- C/trunk/client/client.c 2010-03-13 16:49:02 UTC (rev 37)
+++ C/trunk/client/client.c 2010-03-16 12:47:56 UTC (rev 38)
@@ -204,7 +204,7 @@
return 1;
}
-int hand() {
+int hands() {
char message[MSG_SIZE];
int endHand = 0;
@@ -273,7 +273,7 @@
printf("Ceva nu e bine, mai da o data!");
}
}
- else if (code == END_HAND) {
+ else if (code == END_ROUND) {
printf("%s\n", message);
endHand = 1;
}
@@ -281,6 +281,65 @@
return 1;
}
+void round() {
+ char opt = ' ', ok = 0;
+
+ while (!ok) {
+ if (!receiveCards()) {
+ printf("couldn't receive cards\n");
+ exit(1);
+ }
+
+ do {
+ showCards();
+ printf("Do you like your cards? y|n");
+ scanf("%c", opt);
+ if (opt == 'y')
+ ok = accept_cards();
+ else if (opt == 'n')
+ ok = reject_cards();
+ } while(opt != 'y' && opt != 'n');
+ }
+
+ bidding();
+
+ hands();
+}
+
+void score() {
+
+ char message[MSG_SIZE];
+
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, message, MSG_SIZE);
+ unpad(message);
+ int code = decode_message(message);
+
+ if (code == INFO_MSG)
+ printf("%s\n", message);
+}
+
+void game() {
+ char message[MSG_SIZE];
+ int code;
+
+ do {
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, message, MSG_SIZE);
+ unpad(message);
+ code = decode_message(message);
+
+ if (code == START_ROUND) {
+ round();
+ score(); // the score for the 2 teams
+ }
+ } while (code == START_ROUND);
+
+ printf("The game ended!");
+ printf("%s\n", message); // the score for the 2 teams
+}
+
+
/** adresa, port, nume **/
int main(int argc, char *argv[]) {
if (argc != 4) {
@@ -329,26 +388,7 @@
exit(1);
}
- char opt = ' ', ok = 0;
- while (!ok) {
- if (!receiveCards()) {
- printf("couldn't receive cards\n");
- exit(1);
- }
-
- do {
- showCards();
- printf("Do you like your cards? y|n");
- scanf("%c", opt);
- if (opt == 'y')
- ok = accept_cards();
- else if (opt == 'n')
- ok = reject_cards();
- } while(opt != 'y' && opt != 'n');
- }
-
- bidding();
- hand();
+ game();
//shutdown(player.sfd, SHUT_RDWR);
close(player.sfd);
Modified: C/trunk/protocol/protocol.h
===================================================================
--- C/trunk/protocol/protocol.h 2010-03-13 16:49:02 UTC (rev 37)
+++ C/trunk/protocol/protocol.h 2010-03-16 12:47:56 UTC (rev 38)
@@ -17,9 +17,10 @@
#define CARD_ANUNT 11
//propunere de extindere a protocolului:
-#define END_HAND 12
+#define END_ROUND 12
#define END_BID 13
#define CARD 14
+#define START_ROUND 15
#define DELIMITER " "
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hor...@us...> - 2010-03-13 16:49:08
|
Revision: 37
http://cruce.svn.sourceforge.net/cruce/?rev=37&view=rev
Author: horiaradu
Date: 2010-03-13 16:49:02 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
definirea structurilor de date pentru client
Added Paths:
-----------
C/trunk/client/client.h
Added: C/trunk/client/client.h
===================================================================
--- C/trunk/client/client.h (rev 0)
+++ C/trunk/client/client.h 2010-03-13 16:49:02 UTC (rev 37)
@@ -0,0 +1,30 @@
+#ifndef __CLIENT_H__
+#define __CLIENT_H__
+
+#define MAX_JUCATORI 4
+#define MAX_CARTI 24
+#define CARTI_MANA 6
+#define JUCATORI_PER_ECHIPA 2
+
+/**
+Structura pentru o carte
+valoare - valoare cartii (0,2,3,4,10,11)
+culoare - culoarea (D,V,M,R - Duba, Verde, Mac si Rosu).
+**/
+struct carte {
+ int valoare;
+ char culoare;
+ char simbol[4];
+};
+
+/**
+Structura pentru un jucator
+**/
+struct jucator {
+ struct carte carti[CARTI_MANA];
+ int carti_ramase;
+ char nume[20];
+ int sfd; /* socket file descriptor */
+};
+
+#endif /* __CLIENT_H__ */
Property changes on: C/trunk/client/client.h
___________________________________________________________________
Added: svn:mime-type
+ text/plain
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hor...@us...> - 2010-03-13 16:45:33
|
Revision: 36
http://cruce.svn.sourceforge.net/cruce/?rev=36&view=rev
Author: horiaradu
Date: 2010-03-13 16:45:25 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Am adus clientul pana la pasul 5 inclusiv; am integrat modificarile facute de mine si de Lavinia.
Am facut modificarile propuse la protocol, introducand cele 3 noi coduri.
Clientul nu este inca functional, asamblarea sa efectiva urmand sa o facem mai tarziu.
Modified Paths:
--------------
C/trunk/client/client.c
C/trunk/protocol/protocol.c
C/trunk/protocol/protocol.h
Modified: C/trunk/client/client.c
===================================================================
--- C/trunk/client/client.c 2010-03-13 11:17:25 UTC (rev 35)
+++ C/trunk/client/client.c 2010-03-13 16:45:25 UTC (rev 36)
@@ -10,26 +10,41 @@
* NOT OK! Clientul si serverul depind numai de protocol
* si nu intre ele
*/
-#include "../server/server.h"
+#include "client.h"
#include "../protocol/protocol.h"
struct jucator player;
+void showCards() {
+ int i;
+ printf("Carti: ");
+ for (i = 0; i < player.carti_ramase; i++)
+ printf("%s ", player.carti[i].simbol);
+ printf("\n");
+}
+
+void deleteCard(int card) {
+ int i;
+ for (i = card; i < player.carti_ramase - 1; i++)
+ player.carti[i] = player.carti[i+1];
+ player.carti_ramase--;
+}
+
int join_game() {
- char message[1024];
+ char message[MSG_SIZE];
char answer = 'n';
while (answer != 'y') {
printf("Join game? [y|n]");
scanf("%c%*c", &answer);
}
- memset(message, 0, 1024);
+ memset(message, 0, MSG_SIZE);
sprintf(message, "%d %s", JOIN_GAME, player.nume);
pad(message);
- printf("%s\n",message);
write(player.sfd, &message, MSG_SIZE);
- memset(message, 0, 1024);
- read(player.sfd, &message, 1024);
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
int code = decode_message(message);
printf("Received %s from server\n", message);
if (code == NACK)
@@ -38,21 +53,36 @@
return 1;
}
+int waitAllPlayers() {
+ char message[MSG_SIZE];
+ int i;
+ for (i = 3; i > 0; i--) {
+ printf("%d more players to join the game...\n", i);
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ int code = decode_message(message);
+ if (code == INFO_MSG)
+ printf("%s\n",message);
+ }
+ return 1;
+}
+
int start_game() {
- char message[1024];
+ char message[MSG_SIZE];
char answer = 'n';
while (answer != 'y') {
printf("Start game? [y|n]");
scanf("%c%*c", &answer);
}
- memset(message, 0, 1024);
+ memset(message, 0, MSG_SIZE);
sprintf(message, "%d", START_GAME);
pad(message);
write(player.sfd, &message, MSG_SIZE);
- memset(message, 0, 1024);
- read(player.sfd, &message, 1024);
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
int code = decode_message(message);
printf("Received %s from server\n", message);
if (code == NACK)
@@ -61,6 +91,196 @@
return 1;
}
+struct carte decodeCard(char *value, char *color) {
+ struct carte result;
+ result.culoare = color[0];
+ result.valoare = atoi(value);
+ if (result.valoare == 11)
+ strcpy(result.simbol, "A");
+ else if (result.valoare == 0)
+ strcpy(result.simbol, "9");
+ else
+ strcpy(result.simbol, value);
+ sprintf(result.simbol, "%s %c", result.simbol, color[0]);
+ return result;
+}
+
+int receiveCards() {
+ char message[MSG_SIZE];
+
+ player.carti_ramase = 0;
+
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
+
+ char cardString[MSG_SIZE];
+ strcpy(cardString, message);
+
+ int code = decode_message(message);
+ if (code != SEND_CARDS)
+ return 1;
+
+ int i;
+ strtok(cardString, " ");
+ for (i = 0; i < 6; i++) {
+ char *value = strtok(NULL, " ");
+ char *color = strtok(NULL, " ");
+ if (value != NULL && color != NULL)
+ player.carti[player.carti_ramase++] = decodeCard(value, color);
+ else
+ return 1;
+ }
+ return 0;
+}
+
+int accept_cards() {
+ char message[MSG_SIZE];
+
+ memset(message, 0, MSG_SIZE);
+ sprintf(message,"%d ", ACK);
+ pad(message);
+ write(player.sfd, &message, MSG_SIZE);
+
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+
+ int code = decode_message(message);
+ if (code == BEGIN_BID)
+ return 1;
+ return 0;
+}
+
+int reject_cards() {
+ char message[MSG_SIZE];
+
+ memset(message, 0, MSG_SIZE);
+ sprintf(message,"%d ", NACK);
+ pad(message);
+ write(player.sfd, &message, MSG_SIZE);
+
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+
+ int code = decode_message(message);
+ if (code == ACK) // odata cu trimiterea ACK-ului serverul trimite si cartile => send_cards()
+ return 0; // trebuie apelat receive_cards pentru a le primi
+ else if (code == NACK) // odata cu neacceptarea refuzului jucatorului de a primi cartile, acesta este indreptat spre bid
+ return 1;
+}
+
+int bidding() {
+ char message[MSG_SIZE];
+
+ int ok = 0;
+ while (!ok) {
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
+ int code = decode_message(message);
+
+ if (code == INFO_MSG)
+ printf("%s\n", message);
+
+ else if (code == BID) {
+ int bid = 0;
+ do {
+ printf("Cate faci? [0, 1, 2, 3, 4, 5, 6]\n");
+ scanf("%d%*c", &bid);
+ } while (bid < 0 || bid > 6);
+
+ memset(message, 0, MSG_SIZE);
+ sprintf(message, "%d %d", BID_RESP, bid);
+ pad(message);
+ write(player.sfd, &message, MSG_SIZE);
+ }
+ else if (code == END_BID) {
+ printf("castigator: %s", message);
+ ok = 1;
+ }
+
+ }
+
+ return 1;
+}
+
+int hand() {
+ char message[MSG_SIZE];
+
+ int endHand = 0;
+ int canAnnounce = 1;
+ while (!endHand) {
+ memset(message, 0, MSG_SIZE);
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
+
+ int code = decode_message(message);
+ if (code == INFO_MSG) {
+ printf("%s\n", message);
+ canAnnounce = 0;
+ }
+ else if (code == HIT && canAnnounce == 0) {
+ int ok = 0;
+ while (!ok) {
+ int card = 0;
+
+ showCards();
+
+ do {
+ printf("Da carte! (index-ul cartii 0->5)\n");
+ scanf("%d%*c", &card);
+ } while (card < 0 || card >= player.carti_ramase);
+
+ memset(message, 0, MSG_SIZE);
+ sprintf(message, "%d %d %c", CARD, player.carti[card].valoare, player.carti[card].culoare);
+ pad(message);
+ write(player.sfd, &message, MSG_SIZE);
+
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
+ int code2 = decode_message(message);
+ if (code2 == ACK) {
+ ok = 1;
+ deleteCard(card);
+ } else if (code2 == NACK)
+ printf("Ceva nu e bine, mai da o data!");
+ }
+ }
+ else if (code == HIT && canAnnounce == 1) {
+ int ok = 0;
+ while (!ok) {
+ int card = 0, anunt = 0;
+
+ showCards();
+
+ do {
+ printf("Da carte + anunt daca ai! (index-ul cartii 0->5)\n");
+ scanf("%d %d%*c", &card, &anunt);
+ } while (card < 0 || card >= player.carti_ramase);
+
+ memset(message, 0, MSG_SIZE);
+ sprintf(message, "%d %d %c %d", CARD_ANUNT, player.carti[card].valoare, player.carti[card].culoare, anunt);
+ pad(message);
+ write(player.sfd, &message, MSG_SIZE);
+
+ read(player.sfd, &message, MSG_SIZE);
+ unpad(message);
+ int code2 = decode_message(message);
+ if (code2 == ACK) {
+ ok = 1;
+ deleteCard(card);
+ } else if (code2 == NACK)
+ printf("Ceva nu e bine, mai da o data!");
+ }
+ }
+ else if (code == END_HAND) {
+ printf("%s\n", message);
+ endHand = 1;
+ }
+ }
+ return 1;
+}
+
/** adresa, port, nume **/
int main(int argc, char *argv[]) {
if (argc != 4) {
@@ -101,11 +321,34 @@
exit(1);
}
//wait for 4 messages about players
+ waitAllPlayers();
+
+
if(!start_game()) {
printf("couldn't start the game\n");
exit(1);
}
- printf("Now we play. Next time.\n");
+
+ char opt = ' ', ok = 0;
+ while (!ok) {
+ if (!receiveCards()) {
+ printf("couldn't receive cards\n");
+ exit(1);
+ }
+
+ do {
+ showCards();
+ printf("Do you like your cards? y|n");
+ scanf("%c", opt);
+ if (opt == 'y')
+ ok = accept_cards();
+ else if (opt == 'n')
+ ok = reject_cards();
+ } while(opt != 'y' && opt != 'n');
+ }
+
+ bidding();
+ hand();
//shutdown(player.sfd, SHUT_RDWR);
close(player.sfd);
Modified: C/trunk/protocol/protocol.c
===================================================================
--- C/trunk/protocol/protocol.c 2010-03-13 11:17:25 UTC (rev 35)
+++ C/trunk/protocol/protocol.c 2010-03-13 16:45:25 UTC (rev 36)
@@ -15,19 +15,17 @@
code = atoi(message);
strcpy(message, message + 2);
}
- /*
printf("Decoded this message:\n");
printf("code: %d\n", code);
printf("message: %s\n", message);
printf("---end---\n");
- */
return code;
}
void pad(char *msg) {
int size = strlen(msg);
int i;
- for (i=size;i<MSG_SIZE;i++)
+ for (i = size; i < MSG_SIZE; i++)
msg[i] = PAD_CHAR;
msg[MSG_SIZE-1] = '\0';
}
@@ -35,7 +33,7 @@
void unpad(char *msg)
{
int i = strlen(msg) - 1;
- for (;i>=0;i--)
+ for (; i >= 0; i--)
if (msg[i] != ' ')
break;
Modified: C/trunk/protocol/protocol.h
===================================================================
--- C/trunk/protocol/protocol.h 2010-03-13 11:17:25 UTC (rev 35)
+++ C/trunk/protocol/protocol.h 2010-03-13 16:45:25 UTC (rev 36)
@@ -11,8 +11,8 @@
#define START_GAME 5
#define SEND_CARDS 6
#define BEGIN_BID 7
-#define BID_? 8
-#define BID 9
+#define BID 8
+#define BID_RESP 9
#define HIT 10
#define CARD_ANUNT 11
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 11:17:31
|
Revision: 35
http://cruce.svn.sourceforge.net/cruce/?rev=35&view=rev
Author: alinposho
Date: 2010-03-13 11:17:25 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Property Changed:
----------------
C/trunk/server/
Property changes on: C/trunk/server
___________________________________________________________________
Added: svn:ignore
+ server
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 11:13:19
|
Revision: 34
http://cruce.svn.sourceforge.net/cruce/?rev=34&view=rev
Author: alinposho
Date: 2010-03-13 11:13:13 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Added Paths:
-----------
C/trunk/RunAll.sh
Added: C/trunk/RunAll.sh
===================================================================
--- C/trunk/RunAll.sh (rev 0)
+++ C/trunk/RunAll.sh 2010-03-13 11:13:13 UTC (rev 34)
@@ -0,0 +1,44 @@
+
+#Recompilam totul
+./BuildAll.sh
+echo
+echo
+
+workingDirectory=cmd pwd
+
+#Rulam serverul server
+
+serverFolder="$workingDirectory./server/Object"
+serverExe=server
+
+echo "Running server"
+gnome-terminal -x $serverFolder/$serverExe
+
+
+#Rulam serverul 4 clienti
+
+clientFolder="$workingDirectory./client/Object"
+clientExe=client
+i=1
+
+ip="127.0.0.1"
+port="1100"
+
+#Client 1
+echo "Running cliect $i"
+gnome-terminal -x $clientFolder/$clientExe $ip $port Alin
+
+#Client 2
+i=`expr $i + 1`
+echo "Running cliect $i"
+gnome-terminal -x $clientFolder/$clientExe $ip $port Caius
+
+#Client 3
+i=`expr $i + 1`
+echo "Running cliect $i"
+gnome-terminal -x $clientFolder/$clientExe $ip $port Lavinia
+
+#Client 4
+i=`expr $i + 1`
+echo "Running cliect $i"
+gnome-terminal -x $clientFolder/$clientExe $ip $port Horia
Property changes on: C/trunk/RunAll.sh
___________________________________________________________________
Added: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 10:31:29
|
Revision: 33
http://cruce.svn.sourceforge.net/cruce/?rev=33&view=rev
Author: alinposho
Date: 2010-03-13 10:31:23 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Added Paths:
-----------
C/trunk/protocol/Makefile
Added: C/trunk/protocol/Makefile
===================================================================
--- C/trunk/protocol/Makefile (rev 0)
+++ C/trunk/protocol/Makefile 2010-03-13 10:31:23 UTC (rev 33)
@@ -0,0 +1,13 @@
+protocolObjFolder = ./Object/
+
+protocolObj = protocol.o
+
+protocolSource = protocol.c
+
+protocolHeader = protocol.h
+
+$(protocolObjFolder)$(protocolObj) : $(protocolSources) $(protocolHeader)
+ cc -c $(protocolSource) -o $(protocolObjFolder)$(protocolObj)
+
+clean :
+ rm -f $(protocolObjFolder)*
\ No newline at end of file
Property changes on: C/trunk/protocol/Makefile
___________________________________________________________________
Added: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 10:26:11
|
Revision: 32
http://cruce.svn.sourceforge.net/cruce/?rev=32&view=rev
Author: alinposho
Date: 2010-03-13 10:26:05 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Added Paths:
-----------
C/trunk/client/Object/
C/trunk/protocol/Object/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 10:23:12
|
Revision: 31
http://cruce.svn.sourceforge.net/cruce/?rev=31&view=rev
Author: alinposho
Date: 2010-03-13 10:23:06 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Removed Paths:
-------------
C/trunk/server/Object/server
C/trunk/server/makefile
Deleted: C/trunk/server/Object/server
===================================================================
(Binary files differ)
Deleted: C/trunk/server/makefile
===================================================================
--- C/trunk/server/makefile 2010-03-13 10:22:29 UTC (rev 30)
+++ C/trunk/server/makefile 2010-03-13 10:23:06 UTC (rev 31)
@@ -1,32 +0,0 @@
-target = server
-
-#Defining the protocol folder path
-protocolFolder = ../protocol/
-
-#Defining Server objects folder
-serverObjectFolder = ./Object/
-
-#Sources to be compiled
-serverSource = server.c
-
-execName = server
-
-serverObj = $(serverObjectFolder)server.o
-
-protocolObj = $(protocolFolder)Object/protocol.o
-
-$(serverObjectFolder)$(execName) : $(protocolObj) $(serverObj)
- cc -o $(serverObjectFolder)$(execName) $(protocolObj) $(serverObj)
-
-#Creating the server object file
-$(serverObj): $(serverSource) $(protocolFolder)protocol.h
- gcc -c $(serverSource) -o $(serverObj)
-
-
-clean:
- rm -f $(serverObj)
- rm -f $(serverObjectFolder)server
- rm -f $(protocolObj)
-
-
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 10:22:35
|
Revision: 30
http://cruce.svn.sourceforge.net/cruce/?rev=30&view=rev
Author: alinposho
Date: 2010-03-13 10:22:29 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Added Paths:
-----------
C/trunk/BuildAll.sh
C/trunk/CleanAll.sh
Added: C/trunk/BuildAll.sh
===================================================================
--- C/trunk/BuildAll.sh (rev 0)
+++ C/trunk/BuildAll.sh 2010-03-13 10:22:29 UTC (rev 30)
@@ -0,0 +1,40 @@
+
+#First cleanup
+./CleanAll.sh
+
+
+#Creeam protocol
+protocolFolder=./protocol/
+protocolMakefile=Makefile
+
+echo "Building protocol"
+cd $protocolFolder
+make -f $protocolMakefile
+cd ..
+
+
+
+#Creeam server
+serverFolder=./server/
+serverMakefile=Makefile
+
+echo "Building server"
+
+cd $serverFolder
+make -f $serverMakefile
+cd ..
+
+
+
+#Creeam client
+clientFolder=./client/
+clientMakefile=Makefile
+
+echo "Building client"
+
+cd $clientFolder
+make -f $clientMakefile
+cd ..
+
+
+
Property changes on: C/trunk/BuildAll.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: C/trunk/CleanAll.sh
===================================================================
--- C/trunk/CleanAll.sh (rev 0)
+++ C/trunk/CleanAll.sh 2010-03-13 10:22:29 UTC (rev 30)
@@ -0,0 +1,17 @@
+
+#Stergem fisierele executabile si obiect
+
+#ale clientului
+clientObjectFolder=./client/Object
+echo "Stergem fisierele din folder $clientObjectFolder"
+rm -f $clientObjectFolder/*
+
+#din protocol
+protocolObjectFolder=./protocol/Object
+echo "Stergem fisierele din folder $protocolObjectFolder"
+rm -f $protocolObjectFolder/*
+
+#din protocol
+serverObjectFolder=./server/Object
+echo "Stergem fisierele din folder $serverObjectFolder"
+rm -f $serverObjectFolder/*
Property changes on: C/trunk/CleanAll.sh
___________________________________________________________________
Added: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 10:15:00
|
Revision: 29
http://cruce.svn.sourceforge.net/cruce/?rev=29&view=rev
Author: alinposho
Date: 2010-03-13 10:14:54 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/client/Makefile
Modified: C/trunk/client/Makefile
===================================================================
--- C/trunk/client/Makefile 2010-03-13 10:10:38 UTC (rev 28)
+++ C/trunk/client/Makefile 2010-03-13 10:14:54 UTC (rev 29)
@@ -1,14 +1,18 @@
-objects = client.o protocol.o
+protocolObj = ../protocol/Object/protocol.o
-client: $(objects)
- cc -o client $(objects)
+clientObjFolder = ./Object/
+
+cliectObj = client.o
+
+clientSource = client.c
+
+$(clientObjFolder)client: $(clientObjFolder)$(cliectObj) $(protocolObj)
+ cc -o $(clientObjFolder)client $(clientObjFolder)$(cliectObj) $(protocolObj)
-client.o: client.c ../protocol/protocol.h
- cc -c client.c
-protocol.o: ../protocol/protocol.h ../protocol/protocol.c
- cc -c ../protocol/protocol.c
+
+$(clientObjFolder)$(cliectObj): $(clientSource) $(protocolObj)
+ cc -c $(clientSource) -o $(clientObjFolder)$(cliectObj)
clean:
- rm -f $(objects)
- rm -f client
+ rm -f $(clientObjFolder)*
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 10:10:45
|
Revision: 28
http://cruce.svn.sourceforge.net/cruce/?rev=28&view=rev
Author: alinposho
Date: 2010-03-13 10:10:38 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Added Paths:
-----------
C/trunk/server/Makefile
Copied: C/trunk/server/Makefile (from rev 27, C/trunk/server/makefile)
===================================================================
--- C/trunk/server/Makefile (rev 0)
+++ C/trunk/server/Makefile 2010-03-13 10:10:38 UTC (rev 28)
@@ -0,0 +1,32 @@
+target = server
+
+#Defining the protocol folder path
+protocolFolder = ../protocol/
+
+#Defining Server objects folder
+serverObjectFolder = ./Object/
+
+#Sources to be compiled
+serverSource = server.c
+
+execName = server
+
+serverObj = $(serverObjectFolder)server.o
+
+protocolObj = $(protocolFolder)Object/protocol.o
+
+$(serverObjectFolder)$(execName) : $(protocolObj) $(serverObj)
+ cc -o $(serverObjectFolder)$(execName) $(protocolObj) $(serverObj)
+
+#Creating the server object file
+$(serverObj): $(serverSource) $(protocolFolder)protocol.h
+ gcc -c $(serverSource) -o $(serverObj)
+
+
+clean:
+ rm -f $(serverObj)
+ rm -f $(serverObjectFolder)server
+ rm -f $(protocolObj)
+
+
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 09:46:19
|
Revision: 27
http://cruce.svn.sourceforge.net/cruce/?rev=27&view=rev
Author: alinposho
Date: 2010-03-13 09:46:12 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/server/makefile
Modified: C/trunk/server/makefile
===================================================================
--- C/trunk/server/makefile 2010-03-13 09:18:45 UTC (rev 26)
+++ C/trunk/server/makefile 2010-03-13 09:46:12 UTC (rev 27)
@@ -13,7 +13,7 @@
serverObj = $(serverObjectFolder)server.o
-protocolObj = $(protocolFolder)protocol.o
+protocolObj = $(protocolFolder)Object/protocol.o
$(serverObjectFolder)$(execName) : $(protocolObj) $(serverObj)
cc -o $(serverObjectFolder)$(execName) $(protocolObj) $(serverObj)
@@ -22,11 +22,7 @@
$(serverObj): $(serverSource) $(protocolFolder)protocol.h
gcc -c $(serverSource) -o $(serverObj)
-#making sure the protocol is compiled
-$(protocolObj): $(protocolFolder)/protocol.h $(protocolFolder)/protocol.c
- cc -c $(protocolFolder)/protocol.c
-
clean:
rm -f $(serverObj)
rm -f $(serverObjectFolder)server
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <hor...@us...> - 2010-03-13 09:18:54
|
Revision: 26
http://cruce.svn.sourceforge.net/cruce/?rev=26&view=rev
Author: horiaradu
Date: 2010-03-13 09:18:45 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Propun modificarile astea la coduri:
END_HAND 12
END_BID 13
astea sa se transmita de server la mesajele (end bid si respectiv winner of hand
In plus, o diferentiere intre mesajele trimise de client catre server, doar pentru a usura munca serverului. Astfel sa fie mesajul CARD_ANUNT cand am si anunt si mesajul CARD atunci cand dau doar carte.
CARD 14
O alta idee ar fi ca atunci cand nu am anunt sa pun 0. Care o preferati?
Modified Paths:
--------------
C/trunk/protocol/protocol.h
Modified: C/trunk/protocol/protocol.h
===================================================================
--- C/trunk/protocol/protocol.h 2010-03-13 09:16:45 UTC (rev 25)
+++ C/trunk/protocol/protocol.h 2010-03-13 09:18:45 UTC (rev 26)
@@ -11,11 +11,16 @@
#define START_GAME 5
#define SEND_CARDS 6
#define BEGIN_BID 7
-#define BID_? 8
+#define BID_? 8
#define BID 9
#define HIT 10
#define CARD_ANUNT 11
+//propunere de extindere a protocolului:
+#define END_HAND 12
+#define END_BID 13
+#define CARD 14
+
#define DELIMITER " "
int decode_message(char *message);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 09:16:51
|
Revision: 25
http://cruce.svn.sourceforge.net/cruce/?rev=25&view=rev
Author: alinposho
Date: 2010-03-13 09:16:45 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/server/Object/server
Property Changed:
----------------
C/trunk/
C/trunk/client/
Property changes on: C/trunk
___________________________________________________________________
Modified: svn:ignore
- Debug
.cproject
+ Debug
.cproject
.project
Property changes on: C/trunk/client
___________________________________________________________________
Added: svn:ignore
+ client
Modified: C/trunk/server/Object/server
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-13 09:11:11
|
Revision: 24
http://cruce.svn.sourceforge.net/cruce/?rev=24&view=rev
Author: alinposho
Date: 2010-03-13 09:11:05 +0000 (Sat, 13 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/server/server.c
Removed Paths:
-------------
C/trunk/server/Makefile
Deleted: C/trunk/server/Makefile
===================================================================
--- C/trunk/server/Makefile 2010-03-12 22:23:37 UTC (rev 23)
+++ C/trunk/server/Makefile 2010-03-13 09:11:05 UTC (rev 24)
@@ -1,24 +0,0 @@
-objects = server.o protocol.o
-
-server: $(objects)
- cc -o server $(objects)
-
-client.o: server.c ../protocol/protocol.h
- cc -c server.c
-
-protocol.o: ../protocol/protocol.h ../protocol/protocol.c
- cc -c ../protocol/protocol.c
-
-#dummy server
-dummy: dummy.o
- cc -o dummy server_dummy.o protocol.o
-
-
-dummy.o: server_dummy.c ../protocol/protocol.h
- cc -c server_dummy.c
-
-clean:
- rm -f $(objects)
- rm -f server
- rm -f server_dummy.o
- rm -f dummy
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-12 22:23:37 UTC (rev 23)
+++ C/trunk/server/server.c 2010-03-13 09:11:05 UTC (rev 24)
@@ -214,11 +214,17 @@
}
}
+void displayInfoMessage(FILE* infoMessageOutput, char message[])
+{
+ fprintf(infoMessageOutput, "%s", message);
+ fflush(infoMessageOutput);
+}
+
int main(int argc, char *argv[])
{
- fflush(stdout);
- printf("Server started!");
+ displayInfoMessage(stdout, "Server started!\n");
+
int noPlayers = 0;
init();
@@ -230,7 +236,8 @@
sfd = makeSocket();
bindAndListen();
- printf("\nServer up and running");
+ char infoMessage[] = {"\nServer up and running!\n"};
+ displayInfoMessage(stdout, infoMessage);
while (noPlayers != MAX_JUCATORI)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-12 22:23:51
|
Revision: 23
http://cruce.svn.sourceforge.net/cruce/?rev=23&view=rev
Author: alinposho
Date: 2010-03-12 22:23:37 +0000 (Fri, 12 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/server/server.c
Added Paths:
-----------
C/trunk/server/CaiusMakefile
C/trunk/server/Object/
C/trunk/server/Object/server
C/trunk/server/makefile
Copied: C/trunk/server/CaiusMakefile (from rev 21, C/trunk/server/Makefile)
===================================================================
--- C/trunk/server/CaiusMakefile (rev 0)
+++ C/trunk/server/CaiusMakefile 2010-03-12 22:23:37 UTC (rev 23)
@@ -0,0 +1,24 @@
+objects = server.o protocol.o
+
+server: $(objects)
+ cc -o server $(objects)
+
+client.o: server.c ../protocol/protocol.h
+ cc -c server.c
+
+protocol.o: ../protocol/protocol.h ../protocol/protocol.c
+ cc -c ../protocol/protocol.c
+
+#dummy server
+dummy: dummy.o
+ cc -o dummy server_dummy.o protocol.o
+
+
+dummy.o: server_dummy.c ../protocol/protocol.h
+ cc -c server_dummy.c
+
+clean:
+ rm -f $(objects)
+ rm -f server
+ rm -f server_dummy.o
+ rm -f dummy
Added: C/trunk/server/Object/server
===================================================================
(Binary files differ)
Property changes on: C/trunk/server/Object/server
___________________________________________________________________
Added: svn:executable
+ *
Added: svn:mime-type
+ application/octet-stream
Added: C/trunk/server/makefile
===================================================================
--- C/trunk/server/makefile (rev 0)
+++ C/trunk/server/makefile 2010-03-12 22:23:37 UTC (rev 23)
@@ -0,0 +1,36 @@
+target = server
+
+#Defining the protocol folder path
+protocolFolder = ../protocol/
+
+#Defining Server objects folder
+serverObjectFolder = ./Object/
+
+#Sources to be compiled
+serverSource = server.c
+
+execName = server
+
+serverObj = $(serverObjectFolder)server.o
+
+protocolObj = $(protocolFolder)protocol.o
+
+$(serverObjectFolder)$(execName) : $(protocolObj) $(serverObj)
+ cc -o $(serverObjectFolder)$(execName) $(protocolObj) $(serverObj)
+
+#Creating the server object file
+$(serverObj): $(serverSource) $(protocolFolder)protocol.h
+ gcc -c $(serverSource) -o $(serverObj)
+
+#making sure the protocol is compiled
+$(protocolObj): $(protocolFolder)/protocol.h $(protocolFolder)/protocol.c
+ cc -c $(protocolFolder)/protocol.c
+
+
+clean:
+ rm -f $(serverObj)
+ rm -f $(serverObjectFolder)server
+ rm -f $(protocolObj)
+
+
+
Property changes on: C/trunk/server/makefile
___________________________________________________________________
Added: svn:executable
+ *
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-12 20:20:35 UTC (rev 22)
+++ C/trunk/server/server.c 2010-03-12 22:23:37 UTC (rev 23)
@@ -73,7 +73,6 @@
/* TODO aici se poate face ca sa nu se blocheze la accept, folosind select */
int acceptConn(int sfd)
{
- printf("\n\nServer started!\n\n");
struct sockaddr_in in_conn;
socklen_t socksize = sizeof(struct sockaddr_in);
int fd = 0;
@@ -217,15 +216,22 @@
int main(int argc, char *argv[])
{
+ fflush(stdout);
+ printf("Server started!");
+
int noPlayers = 0;
init();
+
+
readConfig();
sfd = makeSocket();
bindAndListen();
+ printf("\nServer up and running");
+
while (noPlayers != MAX_JUCATORI)
{
int fd = acceptConn(sfd);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ali...@us...> - 2010-03-12 20:20:41
|
Revision: 22
http://cruce.svn.sourceforge.net/cruce/?rev=22&view=rev
Author: alinposho
Date: 2010-03-12 20:20:35 +0000 (Fri, 12 Mar 2010)
Log Message:
-----------
Modified Paths:
--------------
C/trunk/server/server.c
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-12 15:18:46 UTC (rev 21)
+++ C/trunk/server/server.c 2010-03-12 20:20:35 UTC (rev 22)
@@ -73,6 +73,7 @@
/* TODO aici se poate face ca sa nu se blocheze la accept, folosind select */
int acceptConn(int sfd)
{
+ printf("\n\nServer started!\n\n");
struct sockaddr_in in_conn;
socklen_t socksize = sizeof(struct sockaddr_in);
int fd = 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ca...@us...> - 2010-03-12 15:18:59
|
Revision: 21
http://cruce.svn.sourceforge.net/cruce/?rev=21&view=rev
Author: caiusb
Date: 2010-03-12 15:18:46 +0000 (Fri, 12 Mar 2010)
Log Message:
-----------
Serverul merge pentru JOIN_GAME si START_GAME. Am adaugat o functie de unpad()
la protocol, dar nu merge inca. Se ocupa Alin de ea. Am modificat un pic
clientul sa trimita mesaje de 1024 de bytes, nu strlen(msg). Asta doar ca
sa mearga la rulare, so you just override the changes.
Modified Paths:
--------------
C/trunk/client/client.c
C/trunk/protocol/protocol.c
C/trunk/protocol/protocol.h
C/trunk/server/server.c
C/trunk/server/server.h
Modified: C/trunk/client/client.c
===================================================================
--- C/trunk/client/client.c 2010-03-11 20:02:46 UTC (rev 20)
+++ C/trunk/client/client.c 2010-03-12 15:18:46 UTC (rev 21)
@@ -24,7 +24,9 @@
}
memset(message, 0, 1024);
sprintf(message, "%d %s", JOIN_GAME, player.nume);
- write(player.sfd, &message, strlen(message));
+ pad(message);
+ printf("%s\n",message);
+ write(player.sfd, &message, MSG_SIZE);
memset(message, 0, 1024);
read(player.sfd, &message, 1024);
@@ -46,7 +48,8 @@
memset(message, 0, 1024);
sprintf(message, "%d", START_GAME);
- write(player.sfd, &message, strlen(message));
+ pad(message);
+ write(player.sfd, &message, MSG_SIZE);
memset(message, 0, 1024);
read(player.sfd, &message, 1024);
@@ -103,8 +106,8 @@
exit(1);
}
printf("Now we play. Next time.\n");
-
- shutdown(player.sfd, SHUT_RDWR);
+
+ //shutdown(player.sfd, SHUT_RDWR);
close(player.sfd);
return 0;
}
Modified: C/trunk/protocol/protocol.c
===================================================================
--- C/trunk/protocol/protocol.c 2010-03-11 20:02:46 UTC (rev 20)
+++ C/trunk/protocol/protocol.c 2010-03-12 15:18:46 UTC (rev 21)
@@ -6,6 +6,8 @@
int decode_message(char *message) {
int code;
+ unpad(message);
+
if (message[1] <= '9' && message[1] >= '0') {
code = atoi(message);
strcpy(message, message + 3);
@@ -29,3 +31,13 @@
msg[i] = PAD_CHAR;
msg[MSG_SIZE-1] = '\0';
}
+
+void unpad(char *msg)
+{
+ int i = strlen(msg) - 1;
+ for (;i>=0;i--)
+ if (msg[i] != ' ')
+ break;
+
+ msg[i+1] = '\0';
+}
Modified: C/trunk/protocol/protocol.h
===================================================================
--- C/trunk/protocol/protocol.h 2010-03-11 20:02:46 UTC (rev 20)
+++ C/trunk/protocol/protocol.h 2010-03-12 15:18:46 UTC (rev 21)
@@ -20,6 +20,7 @@
int decode_message(char *message);
void pad(char *msg);
+void unpad(char *msg);
#endif /* __PROTOCOL_H__ */
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-11 20:02:46 UTC (rev 20)
+++ C/trunk/server/server.c 2010-03-12 15:18:46 UTC (rev 21)
@@ -6,6 +6,7 @@
#include <netinet/in.h>
#include "server.h"
+#include "../protocol/protocol.h"
#define NUMAR_ECHIPE 2
@@ -74,16 +75,26 @@
{
struct sockaddr_in in_conn;
socklen_t socksize = sizeof(struct sockaddr_in);
+ int fd = 0;
+ fd_set set;
+ struct timeval t;
memset(&in_conn, 0, sizeof(struct sockaddr_in));
- /* TODO print info message */
-
- int fd = accept(sfd, (struct sockaddr *) &in_conn, &socksize);
- if (fd == -1)
+ FD_ZERO(&set);
+ FD_SET(sfd, &set);
+ t.tv_sec = 0;
+ t.tv_usec = 0;
+
+ select(sfd+1,&set,NULL,NULL,&t);
+ if (FD_ISSET(sfd,&set))
{
- perror("Error accepting connection");
- exit(EXIT_FAILURE);
+ fd = accept(sfd, (struct sockaddr *) &in_conn, &socksize);
+ if (fd == -1)
+ {
+ perror("Error accepting connection");
+ exit(EXIT_FAILURE);
+ }
}
return fd;
@@ -101,14 +112,106 @@
{
}
+/** deal with case when a player leaves **/
+void leave_game()
+{
+ printf("Player left\n");
+ exit(EXIT_SUCCESS);
+}
+
/* TODO */
/** Ia un mesaj din retea si vede ce e cu el **/
/* expected reprezinta un vector de int care specifica ce mesaje se
* se asteapta sa vina. Este terminat cu un 0. Daca nu vine un mesaj
* "expected" atunci el este ignorat (sau poate altceva)
* Daca expected este NULL atunci se iau in considerare toate mesajele */
-void getMSG(int *expected)
+void getMSG(struct jucator *jucator, int *expected)
{
+ fd_set set;
+ int i, j, max = 0;
+ struct timeval t;
+ int fd;
+ char msg[MSG_SIZE];
+
+ t.tv_sec = 0;
+ t.tv_usec = 0;
+
+ do
+ {
+ FD_ZERO(&set);
+ for (i=0; i<NUMAR_ECHIPE; i++)
+ for (j=0; j<JUCATORI_PER_ECHIPA; j++)
+ {
+ FD_SET(echipe[i].jucatori[j].sfd,&set);
+ if (max < echipe[i].jucatori[j].sfd)
+ max = echipe[i].jucatori[j].sfd;
+ }
+
+ select(max+1,&set,NULL,NULL,&t);
+ if (jucator != NULL)
+ if (!FD_ISSET(jucator->sfd,&set))
+ {
+ // send NACK
+ }
+ else
+ {
+ fd = jucator->sfd;
+ break;
+ }
+ else
+ {
+ int bla = 0;
+ /* TODO multiple messages received */
+ for (i=0; i<NUMAR_ECHIPE; i++)
+ for (j=0; j<JUCATORI_PER_ECHIPA; j++)
+ if (FD_ISSET(echipe[i].jucatori[j].sfd,&set))
+ {
+ fd = echipe[i].jucatori[j].sfd;
+ bla = 1;
+ }
+ if (!bla)
+ return; /* daca nu a venit mesaj ies din functie */
+ else
+ break; /* daca a venit il tratez */
+ }
+ }
+ while(1);
+
+ /* a venit mesajul de la cine trebe */
+ int read_rt;
+
+ read_rt = read(fd,&msg,MSG_SIZE);
+ if (read_rt == 0)
+ {
+ printf("Connection closed\n");
+ leave_game();
+ }
+ if (read_rt != MSG_SIZE);
+ printf("Warning: too few bytes read\n");
+
+ printf("%s\n",msg);
+ //scanf("%*c");
+
+ int code = decode_message(msg);
+ char resp[MSG_SIZE];
+
+ /* TODO remove! */
+ sprintf(resp,"%d",ACK);
+ pad(resp);
+
+ switch(code)
+ {
+ case JOIN_GAME:
+ printf("%s joined the game\n",msg);
+ write(fd,resp,MSG_SIZE);
+ break;
+ case START_GAME:
+ printf("%s started the game\n",msg);
+ write(fd,resp,MSG_SIZE);
+ break;
+ default:
+ printf("Wrong message!\n");
+ }
}
int main(int argc, char *argv[])
@@ -125,15 +228,19 @@
while (noPlayers != MAX_JUCATORI)
{
int fd = acceptConn(sfd);
- echipe[noPlayers / NUMAR_ECHIPE].jucatori[noPlayers % JUCATORI_PER_ECHIPA].sfd = fd;
- noPlayers ++;
- /* TODO daca nu se blocheaza accept s-ar putea pune si aici un getMSG(...) ca se proceseze eventualele
- * mesaje care au aparul (gen join game) */
+ int ex_msg[] = {JOIN_GAME,START_GAME,0};
+ if (fd != 0)
+ {
+ printf("Accepted player\n");
+ echipe[noPlayers / NUMAR_ECHIPE].jucatori[noPlayers % JUCATORI_PER_ECHIPA].sfd = fd;
+ noPlayers ++;
+ }
+ getMSG(NULL,ex_msg);
}
while(!joinGame())
- getMSG(NULL);
+ getMSG(NULL,NULL);
while(!startGame())
- getMSG(NULL);
+ getMSG(NULL,NULL);
}
Modified: C/trunk/server/server.h
===================================================================
--- C/trunk/server/server.h 2010-03-11 20:02:46 UTC (rev 20)
+++ C/trunk/server/server.h 2010-03-12 15:18:46 UTC (rev 21)
@@ -33,7 +33,6 @@
**/
struct echipa {
struct jucator jucatori[JUCATORI_PER_ECHIPA];
- int jucatori_activi;
int anunturi;
int scor;
struct carte carti_luate[MAX_CARTI];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ca...@us...> - 2010-03-11 20:02:52
|
Revision: 20
http://cruce.svn.sourceforge.net/cruce/?rev=20&view=rev
Author: caiusb
Date: 2010-03-11 20:02:46 +0000 (Thu, 11 Mar 2010)
Log Message:
-----------
Added a basic "wire frame" implementation of the server. It will be
implemented in detail later.
Modified Paths:
--------------
C/trunk/protocol/protocol.h
C/trunk/server/server.c
C/trunk/server/server.h
Added Paths:
-----------
C/trunk/server/server_alin.c
Modified: C/trunk/protocol/protocol.h
===================================================================
--- C/trunk/protocol/protocol.h 2010-03-10 12:07:15 UTC (rev 19)
+++ C/trunk/protocol/protocol.h 2010-03-11 20:02:46 UTC (rev 20)
@@ -22,3 +22,4 @@
void pad(char *msg);
#endif /* __PROTOCOL_H__ */
+
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-10 12:07:15 UTC (rev 19)
+++ C/trunk/server/server.c 2010-03-11 20:02:46 UTC (rev 20)
@@ -1,217 +1,139 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
-//Our libraries
#include "server.h"
-#include "../protocol/protocol.h"
-#define NUMAR_ECHIPE 2
+#define NUMAR_ECHIPE 2
- //Server related fields
-struct echipa echipe[NUMAR_ECHIPE];
-struct sockaddr_in serverSocketAddress;
-char serverIP[16];
-int serverPort;
-int server_sfd;
-char messageDelimiter[] = " ";
-FILE *outputInfo;// = stdout;
-FILE *outputError;// = stdout;
+struct echipa echipe[NUMAR_ECHIPE];
-void decodeMessage(char message[], struct jucator sender)
-{
+struct sockaddr_in addr;
+char ip[16];
+int port;
+int sfd;
- if(message == NULL)
- {
- informationMessage(outputError, "The message is NULL!");
- exit(1);
- }
-
- informationMessage(outputInfo, "Starting message decoding");
-
- //Starting to decode the message
- char *header = strtok(message, messageDelimiter);
-
- informationMessage(outputInfo, "header = %s" , header);
-
- if(header == NULL)
- {
- informationMessage(outputError,"Error at separating the message header!\n");
- exit(0);
- }
-
- char *rest = strtok(NULL, messageDelimiter);
-
- int messageType = atoi(header);
-
- if(messageType == 0)
- {
- informationMessage(outputError, "Error decoding the message header!\n");
- exit(0);
- }
- informationMessage(outputInfo, "Successful message header separation.\n");
-
- switch(messageType)
- {
- case JOIN_GAME:
+void init()
+{
+ int i, j;
+
+ for (i=0;i<NUMAR_ECHIPE;i++)
+ for (j=0;j<JUCATORI_PER_ECHIPA;j++)
{
- int i;
- int j;
- for (i = 0; i < NUMAR_ECHIPE; i++)
- {
- if(echipe[i].jucatori_activi < JUCATORI_PER_ECHIPA)
- {
- echipe[i].jucatori[echipe[i].jucatori_activi++] = sender;
- }
- }
-
- if(i == NUMAR_ECHIPE)
- {
- sendNACKMessage(sender, "Nu mai sunt locuri!\n");
- }
-
- //sending an acknowledge message
- sendAckMessage(sender, "Cerere acceptata.\n");
-
-
- for (i = 0; i < NUMAR_ECHIPE; i++)
- {
- for (j = 0; j < echipe[i].jucatori_activi; j++)
- {
- //To sent information message to the rest of players
- }
- }
- break;
+ echipe[i].jucatori[j].joined = 0;
+ echipe[i].jucatori[j].active = 0;
+ strcpy(echipe[i].jucatori[j].nume,"");
}
- }
-
}
-void sendAckMessage(struct jucator receiver, char message[])
+/** reads the config file and sets ip and port **/
+void readConfig()
{
- //adding the header
- char buffer[100];
- sprintf(buffer, "%d %s", ACK, message);
-
- write(receiver.sfd, &message, strlen(message) * sizeof(char));
+ strcpy(ip,"127.0.0.1");
+ port = 1100;
}
-void sendNACKMessage(struct jucator receiver, char message[])
+int makeSocket()
{
- //adding header
- //adding the header
- char buffer[100];
- sprintf(buffer, "%d %s", NACK, message);
-
- write(receiver.sfd, &message, strlen(message) * sizeof(char));
+ int s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1)
+ {
+ perror("Eroare creare socket");
+ exit(EXIT_FAILURE);
+ }
}
-void informationMessage(FILE *output, char message[])
+void bindAndListen()
{
- fprintf(output, "%s", message);
-}
-
-
-void setUpServer(char ip[], int port)
-{
- printf("Starting to set up the server.\n");
- strcpy(serverIP, ip);
- serverPort = port;
-
- //Setting up the sever socket
- server_sfd = socket(PF_INET, SOCK_STREAM, 0);
- if (server_sfd == -1)
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(port);
+ if (inet_aton(ip, &addr.sin_addr) == -1)
{
- perror("Error creating Server socket!\n");
- exit(1);
+ perror("Invalid ip address");
+ exit(EXIT_FAILURE);
}
- memset(&serverSocketAddress, 0, sizeof(struct sockaddr_in));
- serverSocketAddress.sin_family = AF_INET;
- if (inet_aton(serverIP, &serverSocketAddress.sin_addr) == 0)
+
+ if (bind(sfd, &addr, sizeof(struct sockaddr_in)) == -1)
{
- perror("Address not valid!\n");
- exit(1);
+ perror("Error binding to address");
+ exit(EXIT_FAILURE);
}
- serverSocketAddress.sin_port = htons(serverPort);
-
- if (bind(server_sfd, (struct server *) &serverSocketAddress, sizeof(struct sockaddr_in)) == -1)
+
+ if (listen(sfd, 100) == -1)
{
- perror("Error binding to address");
- exit(1);
+ perror("Error listening to port");
+ exit(EXIT_FAILURE);
}
-
- printf("Server set up to IP address: %s and binded to port %d.\n", serverIP, serverPort);
}
-void startListening(int server_sfd)
+/* TODO aici se poate face ca sa nu se blocheze la accept, folosind select */
+int acceptConn(int sfd)
{
- if (listen(server_sfd, 100) == -1)
- {
- perror("Error listening to socket");
- exit(1);
- }
- else
- {
- printf("Server starting to listen.\n");
- }
-}
-
-int acceptConnection(int socketFileDescriptor)
-{
- informationMessage(outputInfo, "Accepting a connection request");
struct sockaddr_in in_conn;
socklen_t socksize = sizeof(struct sockaddr_in);
memset(&in_conn, 0, sizeof(struct sockaddr_in));
+
+ /* TODO print info message */
- int connFileDescriptor = accept(socketFileDescriptor, (struct sockaddr *) &in_conn, &socksize);
-
- if (connFileDescriptor == -1)
+ int fd = accept(sfd, (struct sockaddr *) &in_conn, &socksize);
+ if (fd == -1)
{
- informationMessage(outputError, "Error accepting connection");
- exit(1);
+ perror("Error accepting connection");
+ exit(EXIT_FAILURE);
}
- /*
- char *c = sprintf("Received connection from: %s\n", inet_ntoa(in_conn.sin_addr.s_addr));
- informationMessage(outputInfo, c);*/
+ return fd;
+}
- return connFileDescriptor;
+/* TODO */
+/** Returneaza true daca toti jucatorii au dat join game **/
+int joinGame()
+{
}
-void cleanUp()
+/* TODO */
+/** Returneaza true daca toti jucatorii au dat start game **/
+int startGame()
{
- close(server_sfd);
}
-int main()
+/* TODO */
+/** Ia un mesaj din retea si vede ce e cu el **/
+/* expected reprezinta un vector de int care specifica ce mesaje se
+ * se asteapta sa vina. Este terminat cu un 0. Daca nu vine un mesaj
+ * "expected" atunci el este ignorat (sau poate altceva)
+ * Daca expected este NULL atunci se iau in considerare toate mesajele */
+void getMSG(int *expected)
{
- outputInfo = stdout;
- outputError = stdout;
+}
-
- setUpServer("127.0.0.1", 1100);
-
- startListening(server_sfd);
-
- int playersConnected = 0;
- while(playersConnected < MAX_JUCATORI)
+int main(int argc, char *argv[])
+{
+ int noPlayers = 0;
+
+ init();
+
+ readConfig();
+
+ sfd = makeSocket();
+ bindAndListen();
+
+ while (noPlayers != MAX_JUCATORI)
{
- //Accepting connections from players
- int playerFileDescriptor = acceptConnection(server_sfd);
-
- echipe[playersConnected / NUMAR_ECHIPE].jucatori[playersConnected % JUCATORI_PER_ECHIPA].sfd = playerFileDescriptor;
- char c[100];
- sprintf(c, "%d players connected.\n", playersConnected);
- informationMessage(outputInfo, c);
- playersConnected++;
+ int fd = acceptConn(sfd);
+ echipe[noPlayers / NUMAR_ECHIPE].jucatori[noPlayers % JUCATORI_PER_ECHIPA].sfd = fd;
+ noPlayers ++;
+ /* TODO daca nu se blocheaza accept s-ar putea pune si aici un getMSG(...) ca se proceseze eventualele
+ * mesaje care au aparul (gen join game) */
}
-
- informationMessage(outputInfo, "All players connected to the server.\n");
-
- close(server_sfd);
-
- return 0;
+
+ while(!joinGame())
+ getMSG(NULL);
+
+ while(!startGame())
+ getMSG(NULL);
}
Modified: C/trunk/server/server.h
===================================================================
--- C/trunk/server/server.h 2010-03-10 12:07:15 UTC (rev 19)
+++ C/trunk/server/server.h 2010-03-11 20:02:46 UTC (rev 20)
@@ -23,7 +23,9 @@
struct carte carti[CARTI_MANA];
int carti_ramase;
char nume[20];
- int sfd; /* socket file descriptor */
+ int sfd; /* socket file descriptor */
+ int joined; /* daca jucatorul s-a alaturat jocului */
+ int active; /* daca jucatorul a inceput jocul */
};
/**
Added: C/trunk/server/server_alin.c
===================================================================
--- C/trunk/server/server_alin.c (rev 0)
+++ C/trunk/server/server_alin.c 2010-03-11 20:02:46 UTC (rev 20)
@@ -0,0 +1,217 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+//Our libraries
+#include "server.h"
+#include "../protocol/protocol.h"
+
+#define NUMAR_ECHIPE 2
+
+ //Server related fields
+struct echipa echipe[NUMAR_ECHIPE];
+struct sockaddr_in serverSocketAddress;
+char serverIP[16];
+int serverPort;
+int server_sfd;
+char messageDelimiter[] = " ";
+FILE *outputInfo;// = stdout;
+FILE *outputError;// = stdout;
+
+void decodeMessage(char message[], struct jucator sender)
+{
+
+ if(message == NULL)
+ {
+ informationMessage(outputError, "The message is NULL!");
+ exit(1);
+ }
+
+ informationMessage(outputInfo, "Starting message decoding");
+
+ //Starting to decode the message
+ char *header = strtok(message, messageDelimiter);
+
+ informationMessage(outputInfo, "header = %s" , header);
+
+ if(header == NULL)
+ {
+ informationMessage(outputError,"Error at separating the message header!\n");
+ exit(0);
+ }
+
+ char *rest = strtok(NULL, messageDelimiter);
+
+ int messageType = atoi(header);
+
+ if(messageType == 0)
+ {
+ informationMessage(outputError, "Error decoding the message header!\n");
+ exit(0);
+ }
+ informationMessage(outputInfo, "Successful message header separation.\n");
+
+ switch(messageType)
+ {
+ case JOIN_GAME:
+ {
+ int i;
+ int j;
+ for (i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ if(echipe[i].jucatori_activi < JUCATORI_PER_ECHIPA)
+ {
+ echipe[i].jucatori[echipe[i].jucatori_activi++] = sender;
+ }
+ }
+
+ if(i == NUMAR_ECHIPE)
+ {
+ sendNACKMessage(sender, "Nu mai sunt locuri!\n");
+ }
+
+ //sending an acknowledge message
+ sendAckMessage(sender, "Cerere acceptata.\n");
+
+
+ for (i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ for (j = 0; j < echipe[i].jucatori_activi; j++)
+ {
+ //To sent information message to the rest of players
+ }
+ }
+ break;
+ }
+ }
+
+}
+
+void sendAckMessage(struct jucator receiver, char message[])
+{
+ //adding the header
+ char buffer[100];
+ sprintf(buffer, "%d %s", ACK, message);
+
+ write(receiver.sfd, &message, strlen(message) * sizeof(char));
+}
+
+void sendNACKMessage(struct jucator receiver, char message[])
+{
+ //adding header
+ //adding the header
+ char buffer[100];
+ sprintf(buffer, "%d %s", NACK, message);
+
+ write(receiver.sfd, &message, strlen(message) * sizeof(char));
+}
+
+void informationMessage(FILE *output, char message[])
+{
+ fprintf(output, "%s", message);
+}
+
+
+void setUpServer(char ip[], int port)
+{
+ printf("Starting to set up the server.\n");
+ strcpy(serverIP, ip);
+ serverPort = port;
+
+ //Setting up the sever socket
+ server_sfd = socket(PF_INET, SOCK_STREAM, 0);
+ if (server_sfd == -1)
+ {
+ perror("Error creating Server socket!\n");
+ exit(1);
+ }
+ memset(&serverSocketAddress, 0, sizeof(struct sockaddr_in));
+ serverSocketAddress.sin_family = AF_INET;
+ if (inet_aton(serverIP, &serverSocketAddress.sin_addr) == 0)
+ {
+ perror("Address not valid!\n");
+ exit(1);
+ }
+ serverSocketAddress.sin_port = htons(serverPort);
+
+ if (bind(server_sfd, (struct server *) &serverSocketAddress, sizeof(struct sockaddr_in)) == -1)
+ {
+ perror("Error binding to address");
+ exit(1);
+ }
+
+ printf("Server set up to IP address: %s and binded to port %d.\n", serverIP, serverPort);
+}
+
+void startListening(int server_sfd)
+{
+ if (listen(server_sfd, 100) == -1)
+ {
+ perror("Error listening to socket");
+ exit(1);
+ }
+ else
+ {
+ printf("Server starting to listen.\n");
+ }
+}
+
+int acceptConnection(int socketFileDescriptor)
+{
+ informationMessage(outputInfo, "Accepting a connection request");
+ struct sockaddr_in in_conn;
+ socklen_t socksize = sizeof(struct sockaddr_in);
+
+ memset(&in_conn, 0, sizeof(struct sockaddr_in));
+
+ int connFileDescriptor = accept(socketFileDescriptor, (struct sockaddr *) &in_conn, &socksize);
+
+ if (connFileDescriptor == -1)
+ {
+ informationMessage(outputError, "Error accepting connection");
+ exit(1);
+ }
+
+ /*
+ char *c = sprintf("Received connection from: %s\n", inet_ntoa(in_conn.sin_addr.s_addr));
+ informationMessage(outputInfo, c);*/
+
+ return connFileDescriptor;
+}
+
+void cleanUp()
+{
+ close(server_sfd);
+}
+
+int main()
+{
+ outputInfo = stdout;
+ outputError = stdout;
+
+
+ setUpServer("127.0.0.1", 1100);
+
+ startListening(server_sfd);
+
+ int playersConnected = 0;
+ while(playersConnected < MAX_JUCATORI)
+ {
+ //Accepting connections from players
+ int playerFileDescriptor = acceptConnection(server_sfd);
+
+ echipe[playersConnected / NUMAR_ECHIPE].jucatori[playersConnected % JUCATORI_PER_ECHIPA].sfd = playerFileDescriptor;
+ char c[100];
+ sprintf(c, "%d players connected.\n", playersConnected);
+ informationMessage(outputInfo, c);
+ playersConnected++;
+ }
+
+ informationMessage(outputInfo, "All players connected to the server.\n");
+
+ close(server_sfd);
+
+ return 0;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ca...@us...> - 2010-03-10 12:07:21
|
Revision: 19
http://cruce.svn.sourceforge.net/cruce/?rev=19&view=rev
Author: caiusb
Date: 2010-03-10 12:07:15 +0000 (Wed, 10 Mar 2010)
Log Message:
-----------
Am modificat un pic Makefile-ul si am modificat si includ-urile sa compileze
cum trebuie.
Modified Paths:
--------------
C/trunk/server/Makefile
C/trunk/server/server.c
C/trunk/server/server_dummy.c
Modified: C/trunk/server/Makefile
===================================================================
--- C/trunk/server/Makefile 2010-03-10 11:54:31 UTC (rev 18)
+++ C/trunk/server/Makefile 2010-03-10 12:07:15 UTC (rev 19)
@@ -1,4 +1,4 @@
-objects = server.o protocol.o
+objects = server.o protocol.o
server: $(objects)
cc -o server $(objects)
@@ -20,4 +20,5 @@
clean:
rm -f $(objects)
rm -f server
+ rm -f server_dummy.o
rm -f dummy
Modified: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c 2010-03-10 11:54:31 UTC (rev 18)
+++ C/trunk/server/server.c 2010-03-10 12:07:15 UTC (rev 19)
@@ -6,12 +6,10 @@
//Our libraries
#include "server.h"
-#include "protocol.h"
+#include "../protocol/protocol.h"
-
#define NUMAR_ECHIPE 2
-
//Server related fields
struct echipa echipe[NUMAR_ECHIPE];
struct sockaddr_in serverSocketAddress;
Modified: C/trunk/server/server_dummy.c
===================================================================
--- C/trunk/server/server_dummy.c 2010-03-10 11:54:31 UTC (rev 18)
+++ C/trunk/server/server_dummy.c 2010-03-10 12:07:15 UTC (rev 19)
@@ -5,24 +5,9 @@
#include <sys/socket.h>
#include <netinet/in.h>
-#include "../server.h"
-#include "../protocol.h"
+#include "server.h"
+#include "../protocol/protocol.h"
-int decode_message(char *message) {
- int code;
- if (message[1] <= '9' && message[1] >= '0') {
- code = atoi(message);
- strcpy(message, message + 3);
- }
- code = atoi(message);
- strcpy(message, message + 2);
- printf("Decoded this message:\n");
- printf("code: %d\n", code);
- printf("message: %s\n", message);
- printf("---end---\n");
- return code;
-}
-
/** address, port **/
int main(int argc, char *argv[]) {
char ip[16];
@@ -72,7 +57,6 @@
//printf("Received connection from: %s\n",inet_ntoa(remoteSocket.sin_addr));
char message[1024];
- while(players < 4) {
memset(message, 0, 1024);
read(connectionFD, &message, 1024);
printf("%s\n", message);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ca...@us...> - 2010-03-10 11:54:38
|
Revision: 18
http://cruce.svn.sourceforge.net/cruce/?rev=18&view=rev
Author: caiusb
Date: 2010-03-10 11:54:31 +0000 (Wed, 10 Mar 2010)
Log Message:
-----------
Am uitat sa pun serverul.
Added Paths:
-----------
C/trunk/server/
C/trunk/server/Makefile
C/trunk/server/server.c
C/trunk/server/server.h
C/trunk/server/server_dummy.c
Added: C/trunk/server/Makefile
===================================================================
--- C/trunk/server/Makefile (rev 0)
+++ C/trunk/server/Makefile 2010-03-10 11:54:31 UTC (rev 18)
@@ -0,0 +1,23 @@
+objects = server.o protocol.o
+
+server: $(objects)
+ cc -o server $(objects)
+
+client.o: server.c ../protocol/protocol.h
+ cc -c server.c
+
+protocol.o: ../protocol/protocol.h ../protocol/protocol.c
+ cc -c ../protocol/protocol.c
+
+#dummy server
+dummy: dummy.o
+ cc -o dummy server_dummy.o protocol.o
+
+
+dummy.o: server_dummy.c ../protocol/protocol.h
+ cc -c server_dummy.c
+
+clean:
+ rm -f $(objects)
+ rm -f server
+ rm -f dummy
Added: C/trunk/server/server.c
===================================================================
--- C/trunk/server/server.c (rev 0)
+++ C/trunk/server/server.c 2010-03-10 11:54:31 UTC (rev 18)
@@ -0,0 +1,219 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+//Our libraries
+#include "server.h"
+#include "protocol.h"
+
+
+#define NUMAR_ECHIPE 2
+
+
+ //Server related fields
+struct echipa echipe[NUMAR_ECHIPE];
+struct sockaddr_in serverSocketAddress;
+char serverIP[16];
+int serverPort;
+int server_sfd;
+char messageDelimiter[] = " ";
+FILE *outputInfo;// = stdout;
+FILE *outputError;// = stdout;
+
+void decodeMessage(char message[], struct jucator sender)
+{
+
+ if(message == NULL)
+ {
+ informationMessage(outputError, "The message is NULL!");
+ exit(1);
+ }
+
+ informationMessage(outputInfo, "Starting message decoding");
+
+ //Starting to decode the message
+ char *header = strtok(message, messageDelimiter);
+
+ informationMessage(outputInfo, "header = %s" , header);
+
+ if(header == NULL)
+ {
+ informationMessage(outputError,"Error at separating the message header!\n");
+ exit(0);
+ }
+
+ char *rest = strtok(NULL, messageDelimiter);
+
+ int messageType = atoi(header);
+
+ if(messageType == 0)
+ {
+ informationMessage(outputError, "Error decoding the message header!\n");
+ exit(0);
+ }
+ informationMessage(outputInfo, "Successful message header separation.\n");
+
+ switch(messageType)
+ {
+ case JOIN_GAME:
+ {
+ int i;
+ int j;
+ for (i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ if(echipe[i].jucatori_activi < JUCATORI_PER_ECHIPA)
+ {
+ echipe[i].jucatori[echipe[i].jucatori_activi++] = sender;
+ }
+ }
+
+ if(i == NUMAR_ECHIPE)
+ {
+ sendNACKMessage(sender, "Nu mai sunt locuri!\n");
+ }
+
+ //sending an acknowledge message
+ sendAckMessage(sender, "Cerere acceptata.\n");
+
+
+ for (i = 0; i < NUMAR_ECHIPE; i++)
+ {
+ for (j = 0; j < echipe[i].jucatori_activi; j++)
+ {
+ //To sent information message to the rest of players
+ }
+ }
+ break;
+ }
+ }
+
+}
+
+void sendAckMessage(struct jucator receiver, char message[])
+{
+ //adding the header
+ char buffer[100];
+ sprintf(buffer, "%d %s", ACK, message);
+
+ write(receiver.sfd, &message, strlen(message) * sizeof(char));
+}
+
+void sendNACKMessage(struct jucator receiver, char message[])
+{
+ //adding header
+ //adding the header
+ char buffer[100];
+ sprintf(buffer, "%d %s", NACK, message);
+
+ write(receiver.sfd, &message, strlen(message) * sizeof(char));
+}
+
+void informationMessage(FILE *output, char message[])
+{
+ fprintf(output, "%s", message);
+}
+
+
+void setUpServer(char ip[], int port)
+{
+ printf("Starting to set up the server.\n");
+ strcpy(serverIP, ip);
+ serverPort = port;
+
+ //Setting up the sever socket
+ server_sfd = socket(PF_INET, SOCK_STREAM, 0);
+ if (server_sfd == -1)
+ {
+ perror("Error creating Server socket!\n");
+ exit(1);
+ }
+ memset(&serverSocketAddress, 0, sizeof(struct sockaddr_in));
+ serverSocketAddress.sin_family = AF_INET;
+ if (inet_aton(serverIP, &serverSocketAddress.sin_addr) == 0)
+ {
+ perror("Address not valid!\n");
+ exit(1);
+ }
+ serverSocketAddress.sin_port = htons(serverPort);
+
+ if (bind(server_sfd, (struct server *) &serverSocketAddress, sizeof(struct sockaddr_in)) == -1)
+ {
+ perror("Error binding to address");
+ exit(1);
+ }
+
+ printf("Server set up to IP address: %s and binded to port %d.\n", serverIP, serverPort);
+}
+
+void startListening(int server_sfd)
+{
+ if (listen(server_sfd, 100) == -1)
+ {
+ perror("Error listening to socket");
+ exit(1);
+ }
+ else
+ {
+ printf("Server starting to listen.\n");
+ }
+}
+
+int acceptConnection(int socketFileDescriptor)
+{
+ informationMessage(outputInfo, "Accepting a connection request");
+ struct sockaddr_in in_conn;
+ socklen_t socksize = sizeof(struct sockaddr_in);
+
+ memset(&in_conn, 0, sizeof(struct sockaddr_in));
+
+ int connFileDescriptor = accept(socketFileDescriptor, (struct sockaddr *) &in_conn, &socksize);
+
+ if (connFileDescriptor == -1)
+ {
+ informationMessage(outputError, "Error accepting connection");
+ exit(1);
+ }
+
+ /*
+ char *c = sprintf("Received connection from: %s\n", inet_ntoa(in_conn.sin_addr.s_addr));
+ informationMessage(outputInfo, c);*/
+
+ return connFileDescriptor;
+}
+
+void cleanUp()
+{
+ close(server_sfd);
+}
+
+int main()
+{
+ outputInfo = stdout;
+ outputError = stdout;
+
+
+ setUpServer("127.0.0.1", 1100);
+
+ startListening(server_sfd);
+
+ int playersConnected = 0;
+ while(playersConnected < MAX_JUCATORI)
+ {
+ //Accepting connections from players
+ int playerFileDescriptor = acceptConnection(server_sfd);
+
+ echipe[playersConnected / NUMAR_ECHIPE].jucatori[playersConnected % JUCATORI_PER_ECHIPA].sfd = playerFileDescriptor;
+ char c[100];
+ sprintf(c, "%d players connected.\n", playersConnected);
+ informationMessage(outputInfo, c);
+ playersConnected++;
+ }
+
+ informationMessage(outputInfo, "All players connected to the server.\n");
+
+ close(server_sfd);
+
+ return 0;
+}
Added: C/trunk/server/server.h
===================================================================
--- C/trunk/server/server.h (rev 0)
+++ C/trunk/server/server.h 2010-03-10 11:54:31 UTC (rev 18)
@@ -0,0 +1,40 @@
+#ifndef __SERVER_H__
+#define __SERVER_H__
+
+#define MAX_JUCATORI 4
+#define MAX_CARTI 24
+#define CARTI_MANA 6
+#define JUCATORI_PER_ECHIPA 2
+
+/**
+Structura pentru o carte
+valoare - valoare cartii (0,2,3,4,10,11)
+culoare - culoarea (D,V,M,R - Duba, Verde, Mac si Rosu).
+**/
+struct carte {
+ int valoare;
+ char culoare;
+};
+
+/**
+Structura pentru un jucator
+**/
+struct jucator {
+ struct carte carti[CARTI_MANA];
+ int carti_ramase;
+ char nume[20];
+ int sfd; /* socket file descriptor */
+};
+
+/**
+Structura pentru o echipa de 2 jucatori
+**/
+struct echipa {
+ struct jucator jucatori[JUCATORI_PER_ECHIPA];
+ int jucatori_activi;
+ int anunturi;
+ int scor;
+ struct carte carti_luate[MAX_CARTI];
+};
+
+#endif /* __SERVER_H__ */
Added: C/trunk/server/server_dummy.c
===================================================================
--- C/trunk/server/server_dummy.c (rev 0)
+++ C/trunk/server/server_dummy.c 2010-03-10 11:54:31 UTC (rev 18)
@@ -0,0 +1,104 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include "../server.h"
+#include "../protocol.h"
+
+int decode_message(char *message) {
+ int code;
+ if (message[1] <= '9' && message[1] >= '0') {
+ code = atoi(message);
+ strcpy(message, message + 3);
+ }
+ code = atoi(message);
+ strcpy(message, message + 2);
+ printf("Decoded this message:\n");
+ printf("code: %d\n", code);
+ printf("message: %s\n", message);
+ printf("---end---\n");
+ return code;
+}
+
+/** address, port **/
+int main(int argc, char *argv[]) {
+ char ip[16];
+ strcpy(ip, argv[1]); //adresa IP server
+ int port = atoi(argv[2]); //port server
+
+ int socketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
+ if (socketFD == -1) {
+ printf("error creating socket\n");
+ exit(1);
+ }
+
+ struct sockaddr_in serverSocket;
+ memset(&serverSocket, 0, sizeof(struct sockaddr_in));
+ serverSocket.sin_family = AF_INET;
+ serverSocket.sin_port = htons(port);
+ if (inet_aton(ip, &serverSocket.sin_addr) == 0) {
+ printf("error in ip address format\n");
+ exit(1);
+ }
+
+ if (bind(socketFD, (const struct sockaddr *) &serverSocket, sizeof(struct sockaddr_in)) == -1) {
+ printf("error binding\n");
+ close(socketFD);
+ exit(1);
+ }
+
+ if (listen(socketFD, 100) == -1) {
+ printf("error listening\n");
+ close(socketFD);
+ exit(1);
+ }
+
+ printf("Server up and running\n");
+
+ for (;;) {
+ struct sockaddr_in remoteSocket;
+ socklen_t socksize = sizeof(struct sockaddr_in);
+ memset(&remoteSocket, 0, sizeof(struct sockaddr_in));
+ int connectionFD = accept(socketFD, (struct sockaddr *) &remoteSocket, &socksize);
+ if (connectionFD < 0) {
+ printf("error accepting connection\n");
+ close(socketFD);
+ exit(1);
+ }
+
+ //printf("Received connection from: %s\n",inet_ntoa(remoteSocket.sin_addr));
+ char message[1024];
+
+ while(players < 4) {
+ memset(message, 0, 1024);
+ read(connectionFD, &message, 1024);
+ printf("%s\n", message);
+ int code = decode_message(message);
+ if (code == JOIN_GAME) {
+ printf("YEAH\n");
+ memset(message, 0, 1024);
+ strcpy(message, "2 ACK");
+ write(connectionFD, &message, strlen(message));
+ }
+
+ memset(message, 0, 1024);
+ read(connectionFD, &message, 1024);
+ printf("%s\n", message);
+ code = decode_message(message);
+ if (code == START_GAME) {
+ printf("YEAH\n");
+ memset(message, 0, 1024);
+ strcpy(message, "2 ACK");
+ write(connectionFD, &message, strlen(message));
+ }
+
+ shutdown(connectionFD, SHUT_RDWR);
+ close(connectionFD);
+ }
+
+ close(socketFD);
+ return 0;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ca...@us...> - 2010-03-10 11:26:48
|
Revision: 17
http://cruce.svn.sourceforge.net/cruce/?rev=17&view=rev
Author: caiusb
Date: 2010-03-10 11:26:41 +0000 (Wed, 10 Mar 2010)
Log Message:
-----------
Am creat ierarhia de directoare si am pus Makefile-uri in pentru server si
client.
Added Paths:
-----------
C/trunk/client/
C/trunk/client/Makefile
C/trunk/client/client.c
C/trunk/client/client_lavinia.c
C/trunk/protocol/
C/trunk/protocol/protocol.c
C/trunk/protocol/protocol.h
Removed Paths:
-------------
C/trunk/.project
C/trunk/Server/
C/trunk/client.c
C/trunk/protocol.h
C/trunk/server.c
C/trunk/server.h
C/trunk/src/
Deleted: C/trunk/.project
===================================================================
--- C/trunk/.project 2010-03-09 22:18:55 UTC (rev 16)
+++ C/trunk/.project 2010-03-10 11:26:41 UTC (rev 17)
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>Cruce</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
- <triggers>clean,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>?name?</key>
- <value></value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.append_environment</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
- <value>all</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.buildArguments</key>
- <value></value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.buildCommand</key>
- <value>make</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.buildLocation</key>
- <value>${workspace_loc:/Cruce/Debug}</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
- <value>clean</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.contents</key>
- <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
- <value>false</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enableFullBuild</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
- <value>all</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.stopOnError</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
- <value>true</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.cdt.core.cnature</nature>
- <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
- <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
- </natures>
-</projectDescription>
Added: C/trunk/client/Makefile
===================================================================
--- C/trunk/client/Makefile (rev 0)
+++ C/trunk/client/Makefile 2010-03-10 11:26:41 UTC (rev 17)
@@ -0,0 +1,14 @@
+objects = client.o protocol.o
+
+client: $(objects)
+ cc -o client $(objects)
+
+client.o: client.c ../protocol/protocol.h
+ cc -c client.c
+
+protocol.o: ../protocol/protocol.h ../protocol/protocol.c
+ cc -c ../protocol/protocol.c
+
+clean:
+ rm -f $(objects)
+ rm -f client
Added: C/trunk/client/client.c
===================================================================
--- C/trunk/client/client.c (rev 0)
+++ C/trunk/client/client.c 2010-03-10 11:26:41 UTC (rev 17)
@@ -0,0 +1,110 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+/*
+* aici partea nashpa e ca clientul depinde de server.
+* NOT OK! Clientul si serverul depind numai de protocol
+* si nu intre ele
+*/
+#include "../server/server.h"
+#include "../protocol/protocol.h"
+
+struct jucator player;
+
+int join_game() {
+ char message[1024];
+ char answer = 'n';
+ while (answer != 'y') {
+ printf("Join game? [y|n]");
+ scanf("%c%*c", &answer);
+ }
+ memset(message, 0, 1024);
+ sprintf(message, "%d %s", JOIN_GAME, player.nume);
+ write(player.sfd, &message, strlen(message));
+
+ memset(message, 0, 1024);
+ read(player.sfd, &message, 1024);
+ int code = decode_message(message);
+ printf("Received %s from server\n", message);
+ if (code == NACK)
+ return 0;
+ else if (code == ACK)
+ return 1;
+}
+
+int start_game() {
+ char message[1024];
+ char answer = 'n';
+ while (answer != 'y') {
+ printf("Start game? [y|n]");
+ scanf("%c%*c", &answer);
+ }
+
+ memset(message, 0, 1024);
+ sprintf(message, "%d", START_GAME);
+ write(player.sfd, &message, strlen(message));
+
+ memset(message, 0, 1024);
+ read(player.sfd, &message, 1024);
+ int code = decode_message(message);
+ printf("Received %s from server\n", message);
+ if (code == NACK)
+ return 0;
+ else if (code == ACK)
+ return 1;
+}
+
+/** adresa, port, nume **/
+int main(int argc, char *argv[]) {
+ if (argc != 4) {
+ printf("eroare la nr de argumente\n");
+ exit(1);
+ }
+
+ char ip[16]; //adresa IP a serverului
+ strcpy(ip, argv[1]);
+ int port = atoi(argv[2]); //portul serverului
+ strcpy(player.nume, argv[3]);
+
+ player.sfd = socket(PF_INET, SOCK_STREAM, 0);
+ if (player.sfd == -1) {
+ printf("eroare la crearea socketului\n");
+ exit(1);
+ }
+
+ struct sockaddr_in serverSocket;
+ memset(&serverSocket, 0, sizeof(struct sockaddr_in));
+ serverSocket.sin_family = AF_INET;
+ serverSocket.sin_port = htons(port);
+ if (inet_aton(ip, &serverSocket.sin_addr) == 0) {
+ printf("eroare la adresa ip\n");
+ exit(1);
+ }
+
+ if (connect(player.sfd, (struct sockaddr *) &serverSocket, sizeof(struct sockaddr_in)) == -1) {
+ printf("eroare la crearea conexinii\n");
+ close(player.sfd);
+ exit(1);
+ }
+
+ printf("Connected to server\n");
+
+ if (!join_game()) {
+ printf("couldn't join the game\n");
+ exit(1);
+ }
+ //wait for 4 messages about players
+ if(!start_game()) {
+ printf("couldn't start the game\n");
+ exit(1);
+ }
+ printf("Now we play. Next time.\n");
+
+ shutdown(player.sfd, SHUT_RDWR);
+ close(player.sfd);
+ return 0;
+}
Added: C/trunk/client/client_lavinia.c
===================================================================
--- C/trunk/client/client_lavinia.c (rev 0)
+++ C/trunk/client/client_lavinia.c 2010-03-10 11:26:41 UTC (rev 17)
@@ -0,0 +1,97 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+int main(int argc, char *argv[])
+{
+ int sfd;
+ struct sockaddr_in addr;
+ char buf, ip[16], buf1[100], *name;
+ int port, n=0;
+
+ if (argc == 1)
+ {
+ strcpy(ip,"127.0.0.1");
+ port = 1100;
+ }
+ else
+ if (argc == 2)
+ {
+ printf("Usage %s [ip port]\n",argv[0]);
+ exit(1);
+ }
+ else
+ {
+ strcpy(ip,argv[1]);
+ port = atoi(argv[2]);
+ }
+
+ // creare socket
+ sfd = socket(PF_INET, SOCK_STREAM, 0);
+ if (sfd == -1)
+ {
+ perror("Error creating socket");
+ exit(1);
+ }
+
+ memset(&addr,0,sizeof(struct sockaddr_in));
+ addr.sin_family = AF_INET;
+
+ // transformare IP din Internet Standard dot notation in Network standard
+ if (inet_aton(ip,&addr.sin_addr) == -1)
+ {
+ perror("Invalid address");
+ exit(1);
+ }
+
+ // transformare adresa port in network byte order/ short (2 octeti)
+ addr.sin_port = htons(port);
+
+ // conectare la server
+ if (connect(sfd,(struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1)
+ {
+ perror("Error connecting to server");
+ exit(1);
+ }
+
+ printf("Connected to server\n");
+
+ // JOIN THE GAME
+ //---citire de la tastatura a numelui
+ printf("Do you wish to join the game. If so, please type your name");
+ scanf("%s",name);
+
+ //---construire mesaj de join
+ strcpy(buf,"1 ");
+ strcat(buf,name);
+ strcat(buf," \n");
+
+ //---trimitere catre server
+ write(sfd,&buf,strlen(buf));
+
+ //---MESSAGE FROM THE SERVER
+ memset(&buf1,0,100);
+ while (read(sfd,&buf,1))
+ buf1[n++] = buf;
+ strcat(buf1,"\n");
+ printf("%s",buf1);
+
+ // START THE GAME
+ printf("Do you wish to start the game? If so, please press any key!")
+ while(read(0,&buf,1) == 0)
+ ;
+ strcpy(buf,"2 \n");
+ write(sfd,&buf,strlen(buf));
+
+ //---MESSAGE FROM THE SERVER
+ memset(&buf1,0,100);
+ n = 0;
+ while (read(sfd,&buf,1))
+ buf1[n++] = buf;
+ strcat(buf1,"\n");
+ printf("%s",buf1);
+
+ close(sfd);
+}
Deleted: C/trunk/client.c
===================================================================
--- C/trunk/client.c 2010-03-09 22:18:55 UTC (rev 16)
+++ C/trunk/client.c 2010-03-10 11:26:41 UTC (rev 17)
@@ -1,97 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-int main(int argc, char *argv[])
-{
- int sfd;
- struct sockaddr_in addr;
- char buf, ip[16], buf1[100], *name;
- int port, n=0;
-
- if (argc == 1)
- {
- strcpy(ip,"127.0.0.1");
- port = 1100;
- }
- else
- if (argc == 2)
- {
- printf("Usage %s [ip port]\n",argv[0]);
- exit(1);
- }
- else
- {
- strcpy(ip,argv[1]);
- port = atoi(argv[2]);
- }
-
- // creare socket
- sfd = socket(PF_INET, SOCK_STREAM, 0);
- if (sfd == -1)
- {
- perror("Error creating socket");
- exit(1);
- }
-
- memset(&addr,0,sizeof(struct sockaddr_in));
- addr.sin_family = AF_INET;
-
- // transformare IP din Internet Standard dot notation in Network standard
- if (inet_aton(ip,&addr.sin_addr) == -1)
- {
- perror("Invalid address");
- exit(1);
- }
-
- // transformare adresa port in network byte order/ short (2 octeti)
- addr.sin_port = htons(port);
-
- // conectare la server
- if (connect(sfd,(struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1)
- {
- perror("Error connecting to server");
- exit(1);
- }
-
- printf("Connected to server\n");
-
- // JOIN THE GAME
- //---citire de la tastatura a numelui
- printf("Do you wish to join the game. If so, please type your name");
- scanf("%s",name);
-
- //---construire mesaj de join
- strcpy(buf,"1 ");
- strcat(buf,name);
- strcat(buf," \n");
-
- //---trimitere catre server
- write(sfd,&buf,strlen(buf));
-
- //---MESSAGE FROM THE SERVER
- memset(&buf1,0,100);
- while (read(sfd,&buf,1))
- buf1[n++] = buf;
- strcat(buf1,"\n");
- printf("%s",buf1);
-
- // START THE GAME
- printf("Do you wish to start the game? If so, please press any key!")
- while(read(0,&buf,1) == 0)
- ;
- strcpy(buf,"2 \n");
- write(sfd,&buf,strlen(buf));
-
- //---MESSAGE FROM THE SERVER
- memset(&buf1,0,100);
- n = 0;
- while (read(sfd,&buf,1))
- buf1[n++] = buf;
- strcat(buf1,"\n");
- printf("%s",buf1);
-
- close(sfd);
-}
Added: C/trunk/protocol/protocol.c
===================================================================
--- C/trunk/protocol/protocol.c (rev 0)
+++ C/trunk/protocol/protocol.c 2010-03-10 11:26:41 UTC (rev 17)
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "protocol.h"
+
+int decode_message(char *message) {
+ int code;
+
+ if (message[1] <= '9' && message[1] >= '0') {
+ code = atoi(message);
+ strcpy(message, message + 3);
+ } else {
+ code = atoi(message);
+ strcpy(message, message + 2);
+ }
+ /*
+ printf("Decoded this message:\n");
+ printf("code: %d\n", code);
+ printf("message: %s\n", message);
+ printf("---end---\n");
+ */
+ return code;
+}
+
+void pad(char *msg) {
+ int size = strlen(msg);
+ int i;
+ for (i=size;i<MSG_SIZE;i++)
+ msg[i] = PAD_CHAR;
+ msg[MSG_SIZE-1] = '\0';
+}
Added: C/trunk/protocol/protocol.h
===================================================================
--- C/trunk/protocol/protocol.h (rev 0)
+++ C/trunk/protocol/protocol.h 2010-03-10 11:26:41 UTC (rev 17)
@@ -0,0 +1,24 @@
+#ifndef __PROTOCOL_H__
+#define __PROTOCOL_H__
+
+#define MSG_SIZE 1024
+#define PAD_CHAR ' '
+
+#define JOIN_GAME 1
+#define ACK 2
+#define NACK 3
+#define INFO_MSG 4
+#define START_GAME 5
+#define SEND_CARDS 6
+#define BEGIN_BID 7
+#define BID_? 8
+#define BID 9
+#define HIT 10
+#define CARD_ANUNT 11
+
+#define DELIMITER " "
+
+int decode_message(char *message);
+void pad(char *msg);
+
+#endif /* __PROTOCOL_H__ */
Deleted: C/trunk/protocol.h
===================================================================
--- C/trunk/protocol.h 2010-03-09 22:18:55 UTC (rev 16)
+++ C/trunk/protocol.h 2010-03-10 11:26:41 UTC (rev 17)
@@ -1,18 +0,0 @@
-#ifndef __PROTOCOL_H__
-#define __PROTOCOL_H__
-
-#define JOIN_GAME 1
-#define ACK 2
-#define NACK 3
-#define INFO_MSG 4
-#define START_GAME 5
-#define SEND_CARDS 6
-#define BEGIN_BID 7
-#define BID_? 8
-#define BID 9
-#define HIT 10
-#define CARD_ANUNT 11
-
-int decode_message(char *message);
-
-#endif /* __PROTOCOL_H__ */
Deleted: C/trunk/server.c
===================================================================
--- C/trunk/server.c 2010-03-09 22:18:55 UTC (rev 16)
+++ C/trunk/server.c 2010-03-10 11:26:41 UTC (rev 17)
@@ -1,219 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-
-//Our libraries
-#include "server.h"
-#include "protocol.h"
-
-
-#define NUMAR_ECHIPE 2
-
-
- //Server related fields
-struct echipa echipe[NUMAR_ECHIPE];
-struct sockaddr_in serverSocketAddress;
-char serverIP[16];
-int serverPort;
-int server_sfd;
-char messageDelimiter[] = " ";
-FILE *outputInfo;// = stdout;
-FILE *outputError;// = stdout;
-
-void decodeMessage(char message[], struct jucator sender)
-{
-
- if(message == NULL)
- {
- informationMessage(outputError, "The message is NULL!");
- exit(1);
- }
-
- informationMessage(outputInfo, "Starting message decoding");
-
- //Starting to decode the message
- char *header = strtok(message, messageDelimiter);
-
- informationMessage(outputInfo, "header = %s" , header);
-
- if(header == NULL)
- {
- informationMessage(outputError,"Error at separating the message header!\n");
- exit(0);
- }
-
- char *rest = strtok(NULL, messageDelimiter);
-
- int messageType = atoi(header);
-
- if(messageType == 0)
- {
- informationMessage(outputError, "Error decoding the message header!\n");
- exit(0);
- }
- informationMessage(outputInfo, "Successful message header separation.\n");
-
- switch(messageType)
- {
- case JOIN_GAME:
- {
- int i;
- int j;
- for (i = 0; i < NUMAR_ECHIPE; i++)
- {
- if(echipe[i].jucatori_activi < JUCATORI_PER_ECHIPA)
- {
- echipe[i].jucatori[echipe[i].jucatori_activi++] = sender;
- }
- }
-
- if(i == NUMAR_ECHIPE)
- {
- sendNACKMessage(sender, "Nu mai sunt locuri!\n");
- }
-
- //sending an acknowledge message
- sendAckMessage(sender, "Cerere acceptata.\n");
-
-
- for (i = 0; i < NUMAR_ECHIPE; i++)
- {
- for (j = 0; j < echipe[i].jucatori_activi; j++)
- {
- //To sent information message to the rest of players
- }
- }
- break;
- }
- }
-
-}
-
-void sendAckMessage(struct jucator receiver, char message[])
-{
- //adding the header
- char buffer[100];
- sprintf(buffer, "%d %s", ACK, message);
-
- write(receiver.sfd, &message, strlen(message) * sizeof(char));
-}
-
-void sendNACKMessage(struct jucator receiver, char message[])
-{
- //adding header
- //adding the header
- char buffer[100];
- sprintf(buffer, "%d %s", NACK, message);
-
- write(receiver.sfd, &message, strlen(message) * sizeof(char));
-}
-
-void informationMessage(FILE *output, char message[])
-{
- fprintf(output, "%s", message);
-}
-
-
-void setUpServer(char ip[], int port)
-{
- printf("Starting to set up the server.\n");
- strcpy(serverIP, ip);
- serverPort = port;
-
- //Setting up the sever socket
- server_sfd = socket(PF_INET, SOCK_STREAM, 0);
- if (server_sfd == -1)
- {
- perror("Error creating Server socket!\n");
- exit(1);
- }
- memset(&serverSocketAddress, 0, sizeof(struct sockaddr_in));
- serverSocketAddress.sin_family = AF_INET;
- if (inet_aton(serverIP, &serverSocketAddress.sin_addr) == 0)
- {
- perror("Address not valid!\n");
- exit(1);
- }
- serverSocketAddress.sin_port = htons(serverPort);
-
- if (bind(server_sfd, (struct server *) &serverSocketAddress, sizeof(struct sockaddr_in)) == -1)
- {
- perror("Error binding to address");
- exit(1);
- }
-
- printf("Server set up to IP address: %s and binded to port %d.\n", serverIP, serverPort);
-}
-
-void startListening(int server_sfd)
-{
- if (listen(server_sfd, 100) == -1)
- {
- perror("Error listening to socket");
- exit(1);
- }
- else
- {
- printf("Server starting to listen.\n");
- }
-}
-
-int acceptConnection(int socketFileDescriptor)
-{
- informationMessage(outputInfo, "Accepting a connection request");
- struct sockaddr_in in_conn;
- socklen_t socksize = sizeof(struct sockaddr_in);
-
- memset(&in_conn, 0, sizeof(struct sockaddr_in));
-
- int connFileDescriptor = accept(socketFileDescriptor, (struct sockaddr *) &in_conn, &socksize);
-
- if (connFileDescriptor == -1)
- {
- informationMessage(outputError, "Error accepting connection");
- exit(1);
- }
-
- /*
- char *c = sprintf("Received connection from: %s\n", inet_ntoa(in_conn.sin_addr.s_addr));
- informationMessage(outputInfo, c);*/
-
- return connFileDescriptor;
-}
-
-void cleanUp()
-{
- close(server_sfd);
-}
-
-int main()
-{
- outputInfo = stdout;
- outputError = stdout;
-
-
- setUpServer("127.0.0.1", 1100);
-
- startListening(server_sfd);
-
- int playersConnected = 0;
- while(playersConnected < MAX_JUCATORI)
- {
- //Accepting connections from players
- int playerFileDescriptor = acceptConnection(server_sfd);
-
- echipe[playersConnected / NUMAR_ECHIPE].jucatori[playersConnected % JUCATORI_PER_ECHIPA].sfd = playerFileDescriptor;
- char c[100];
- sprintf(c, "%d players connected.\n", playersConnected);
- informationMessage(outputInfo, c);
- playersConnected++;
- }
-
- informationMessage(outputInfo, "All players connected to the server.\n");
-
- close(server_sfd);
-
- return 0;
-}
Deleted: C/trunk/server.h
===================================================================
--- C/trunk/server.h 2010-03-09 22:18:55 UTC (rev 16)
+++ C/trunk/server.h 2010-03-10 11:26:41 UTC (rev 17)
@@ -1,40 +0,0 @@
-#ifndef __SERVER_H__
-#define __SERVER_H__
-
-#define MAX_JUCATORI 4
-#define MAX_CARTI 24
-#define CARTI_MANA 6
-#define JUCATORI_PER_ECHIPA 2
-
-/**
-Structura pentru o carte
-valoare - valoare cartii (0,2,3,4,10,11)
-culoare - culoarea (D,V,M,R - Duba, Verde, Mac si Rosu).
-**/
-struct carte {
- int valoare;
- char culoare;
-};
-
-/**
-Structura pentru un jucator
-**/
-struct jucator {
- struct carte carti[CARTI_MANA];
- int carti_ramase;
- char nume[20];
- int sfd; /* socket file descriptor */
-};
-
-/**
-Structura pentru o echipa de 2 jucatori
-**/
-struct echipa {
- struct jucator jucatori[JUCATORI_PER_ECHIPA];
- int jucatori_activi;
- int anunturi;
- int scor;
- struct carte carti_luate[MAX_CARTI];
-};
-
-#endif /* __SERVER_H__ */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|