-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.cpp
66 lines (56 loc) · 1.41 KB
/
server.cpp
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
62
63
64
65
66
#include "server.h"
#include "constants.h"
#include "util.h"
Server::Server() : _serverSocket(0), _peers(0) {
// Empty
}
Server::Server(ServerSocket* ss, Peers* p) : _serverSocket(ss), _peers(p) {
// Empty
}
/*
* Destructor. Stop the thread before destructing
*/
Server::~Server() {
Log::info("Server destructor()");
stopServer();
}
/*
* Startst the server thread, enabling it to accept connections from other peers.
* Returns true if thread was start successfully.
*/
bool Server::startServer() {
Log::info("starting server");
return startThread();
}
/*
* Stops the server thread.
*/
void Server::stopServer() {
Log::info("Stopping server");
stopThread();
}
/*
* Inherited from the Thread class. Runs in another thread. Listens for other
* peers trying to connect.
*/
void Server::run() {
Log::info("in Server's run()");
while (true) {
if (isCancelFlagSet())
return;
// Don't accept connections if already at max number of peers
if (_peers->getNumPeers() >= constants::MAX_PEERS)
continue;
Socket clientSocket = _serverSocket->acceptConnection();
Log::info("Server client connection accepted");
Peer* p = new Peer();
p->setSocket(clientSocket);
p->setState(Peer::connected);
_peers->addPeer(p);
// Start Peer thread so we can begin receiving data from the peer
if (!p->startThread()) {
// Error could not start Peer thread
Log::error("Could not start the Peer thread");
}
}
}