-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.cpp
More file actions
61 lines (49 loc) · 1.52 KB
/
server.cpp
File metadata and controls
61 lines (49 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "include/server.h"
Server::Server(int nClients, int port) {
/* Criacao do socket */
sock = socket(AF_INET, SOCK_STREAM, 0);
this->nClients = nClients;
/* Especifica o endereco para o socket */
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(port); // precisa converter o inteiro para o tipo do atributo sin_port
server_address.sin_addr.s_addr = INADDR_ANY; // endereco pra conectar com qualquer um
// bind the socket to our specified IP and port
bind(sock, (struct sockaddr *) &server_address, sizeof(server_address));
}
void Server::waitConnections() {
listen(sock, nClients);
for(int i = 0; i < nClients; i++) {
clients.push_back(accept(sock, NULL, NULL));
printf("Client %d connected.\n", i);
}
}
// id do socket
std::string Server::receiveMessage(int id) {
char msg[256];
fd_set set;
struct timeval timeout;
FD_ZERO(&set);
FD_SET(clients[id-1], &set);
timeout.tv_sec = TIMEOUT_SECS;
timeout.tv_usec = TIMEOUT_USECS;
int rv = select(clients[id-1] + 1, &set, NULL, NULL, &timeout);
if(rv == 0) {
//printf("Timeout\n");
return "";
}
else{
recv(clients[id-1], &msg, sizeof(msg), 0); // recebe a mensagem passada pelo socket
//printf("The client1 sent data: %s\n", msg);
return std::string(msg);
}
}
// envia mensagem para o player (id)
int Server::sendMessage(int id, std::string msg) {
char men[256];
memset(men, '\0', sizeof men);
strcpy(men, msg.c_str());
return send(clients[id-1], men, sizeof(men), 0) == 256;
}
Server::~Server(){
}