Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Network/asnetwork.cpp')
-rw-r--r--Source/Network/asnetwork.cpp176
1 files changed, 85 insertions, 91 deletions
diff --git a/Source/Network/asnetwork.cpp b/Source/Network/asnetwork.cpp
index 55a45273..a04e250f 100644
--- a/Source/Network/asnetwork.cpp
+++ b/Source/Network/asnetwork.cpp
@@ -40,103 +40,97 @@ void ASNetwork::Dispose() {
}
void ASNetwork::Update() {
- if( sockets.size() > 0 ) {
- int check_counter = SocketData::BUF_SIZE;
- while( check_counter > 0 ) {
- int nr_sockets = SDLNet_CheckSockets(socketset,0);
- if( nr_sockets > 0 ) {
- std::map<SocketID, SocketData>::iterator socketit = sockets.begin();
- for(; socketit != sockets.end(); socketit++ ) {
- SocketData &sd = socketit->second;
- if( SDLNet_SocketReady( sd.socket ) && sd.used < SocketData::BUF_SIZE ) {
- int recv_size = SDLNet_TCP_Recv(sd.socket, sd.buf + sd.used, 1);
- if( recv_size == 1 ) {
- sd.used++;
- } else if( recv_size <= 0 ) {
- sd.valid = false;
- LOGE << "Connection Recv error on " << socketit->first << " : " << SDLNet_GetError() << std::endl;
- }
- }
- }
- check_counter--;
- } else if( nr_sockets == -1 ) {
- LOGE << "Error using select() on socket" << std::endl;
- check_counter = 0;
- } else {
- check_counter = 0;
- }
- }
-
- //Offset the calls to allow calls to DestroyTCPSocket.
- int id_count = 0;
- uint8_t* data[MAX_SOCKETS];
- size_t size[MAX_SOCKETS];
- SocketID id[MAX_SOCKETS];
-
- std::map<SocketID, SocketData>::iterator socketit = sockets.begin();
- for(; socketit != sockets.end(); socketit++ ) {
- SocketData &sd = socketit->second;
- if( sd.used > 0 ) {
- data[id_count] = sd.buf;
- size[id_count] = sd.used;
- id[id_count] = socketit->first;
- id_count++;
- } else if( sd.valid == false ) { //Note that we use NULL on data as a destroy marker.
- data[id_count] = NULL;
- size[id_count] = 0;
- id[id_count] = socketit->first;
- id_count++;
- }
- sd.used = 0;
- }
-
- for( int i = 0; i < id_count; i++ ) {
- if( data[i] == NULL ) {
- DestroySocketTCP(id[i]);
- } else {
- std::vector<ASNetworkCallback*>::iterator cbit = callbacks.begin();
- for(; cbit != callbacks.end(); cbit++ ) {
- (*cbit)->IncomingTCPData(id[i], data[i], size[i] );
- }
- }
- }
- }
+ if (sockets.size() > 0) {
+ int check_counter = SocketData::BUF_SIZE;
+ while (check_counter > 0) {
+ int nr_sockets = SDLNet_CheckSockets(socketset, 0);
+ if (nr_sockets > 0) {
+ std::map<SocketID, SocketData>::iterator socketit = sockets.begin();
+ for (; socketit != sockets.end(); socketit++) {
+ SocketData& sd = socketit->second;
+ if (SDLNet_SocketReady(sd.socket) && sd.used < SocketData::BUF_SIZE) {
+ int recv_size = SDLNet_TCP_Recv(sd.socket, sd.buf + sd.used, 1);
+ if (recv_size == 1) {
+ sd.used++;
+ } else if (recv_size <= 0) {
+ sd.valid = false;
+ LOGE << "Connection Recv error on " << socketit->first << " : " << SDLNet_GetError() << std::endl;
+ }
+ }
+ }
+ check_counter--;
+ } else if (nr_sockets == -1) {
+ LOGE << "Error using select() on socket" << std::endl;
+ check_counter = 0;
+ } else {
+ check_counter = 0;
+ }
+ }
+
+ // Offset the calls to allow calls to DestroyTCPSocket.
+ int id_count = 0;
+ uint8_t* data[MAX_SOCKETS];
+ size_t size[MAX_SOCKETS];
+ SocketID id[MAX_SOCKETS];
+
+ std::map<SocketID, SocketData>::iterator socketit = sockets.begin();
+ for (; socketit != sockets.end(); socketit++) {
+ SocketData& sd = socketit->second;
+ if (sd.used > 0) {
+ data[id_count] = sd.buf;
+ size[id_count] = sd.used;
+ id[id_count] = socketit->first;
+ id_count++;
+ } else if (sd.valid == false) { // Note that we use NULL on data as a destroy marker.
+ data[id_count] = NULL;
+ size[id_count] = 0;
+ id[id_count] = socketit->first;
+ id_count++;
+ }
+ sd.used = 0;
+ }
+
+ for (int i = 0; i < id_count; i++) {
+ if (data[i] == NULL) {
+ DestroySocketTCP(id[i]);
+ } else {
+ std::vector<ASNetworkCallback*>::iterator cbit = callbacks.begin();
+ for (; cbit != callbacks.end(); cbit++) {
+ (*cbit)->IncomingTCPData(id[i], data[i], size[i]);
+ }
+ }
+ }
+ }
}
SocketID ASNetwork::CreateSocketTCP(std::string host, uint16_t port) {
- if( sockets.size() < (unsigned)MAX_SOCKETS ) {
+ if (sockets.size() < (unsigned)MAX_SOCKETS) {
IPaddress adr;
- int ret = SDLNet_ResolveHost(&adr, host.c_str(), port);
- if( ret == 0 ) {
+ int ret = SDLNet_ResolveHost(&adr, host.c_str(), port);
+ if (ret == 0) {
TCPsocket tcp_socket;
tcp_socket = SDLNet_TCP_Open(&adr);
- if( tcp_socket ) {
- SDLNet_AddSocket( socketset, (SDLNet_GenericSocket)tcp_socket );
-
+ if (tcp_socket) {
+ SDLNet_AddSocket(socketset, (SDLNet_GenericSocket)tcp_socket);
+
SocketData sd;
sd.used = 0;
sd.socket = tcp_socket;
sd.valid = true;
- SocketID socket_id = socket_id_counter++;
+ SocketID socket_id = socket_id_counter++;
sockets[socket_id] = sd;
return socket_id;
- }
- else
- {
+ } else {
LOGE << "Unable to open socket to resolved address: " << host << ":" << port << std::endl;
- LOGE << "Error: " << SDLNet_GetError() << std::endl;
+ LOGE << "Error: " << SDLNet_GetError() << std::endl;
}
- }
- else
- {
+ } else {
LOGE << "Unable to resolve host " << host << ":" << port << std::endl;
}
- }
- else
- {
+ } else {
LOGE << "Unable to create another socket connection, reached max of: " << MAX_SOCKETS << std::endl;
}
@@ -145,21 +139,21 @@ SocketID ASNetwork::CreateSocketTCP(std::string host, uint16_t port) {
void ASNetwork::DestroySocketTCP(SocketID sock) {
std::map<SocketID, SocketData>::iterator datait = sockets.find(sock);
- if( datait != sockets.end() ) {
+ if (datait != sockets.end()) {
SDLNet_DelSocket(socketset, (SDLNet_GenericSocket)datait->second.socket);
SDLNet_TCP_Close(datait->second.socket);
- sockets.erase(datait);
+ sockets.erase(datait);
}
}
int ASNetwork::SocketTCPSend(SocketID socket, const uint8_t* buf, size_t len) {
std::map<SocketID, SocketData>::iterator datait = sockets.find(socket);
- if( datait != sockets.end() ) {
- SocketData &sd = datait->second;
- int ret_data_size = SDLNet_TCP_Send( sd.socket, buf, len );
- if( ret_data_size < (int)len ) {
+ if (datait != sockets.end()) {
+ SocketData& sd = datait->second;
+ int ret_data_size = SDLNet_TCP_Send(sd.socket, buf, len);
+ if (ret_data_size < (int)len) {
sd.valid = false;
- DestroySocketTCP(socket);
+ DestroySocketTCP(socket);
LOGE << "Error when trying to send data on socket, error: \"" << SDLNet_GetError() << "\", shutting it down." << std::endl;
}
return ret_data_size;
@@ -171,20 +165,20 @@ int ASNetwork::SocketTCPSend(SocketID socket, const uint8_t* buf, size_t len) {
bool ASNetwork::IsValidSocketTCP(SocketID socket) {
std::map<SocketID, SocketData>::iterator datait = sockets.find(socket);
- if( datait != sockets.end() ) {
+ if (datait != sockets.end()) {
return true;
} else {
return false;
}
}
-void ASNetwork::RegisterASNetworkCallback( ASNetworkCallback* cb ) {
+void ASNetwork::RegisterASNetworkCallback(ASNetworkCallback* cb) {
callbacks.push_back(cb);
}
-void ASNetwork::DeRegisterASNetworkCallback( ASNetworkCallback* cb ) {
- std::vector<ASNetworkCallback*>::iterator callit = std::find(callbacks.begin(), callbacks.end(),cb);
- if( callit != callbacks.end() ) {
- callbacks.erase(callit);
+void ASNetwork::DeRegisterASNetworkCallback(ASNetworkCallback* cb) {
+ std::vector<ASNetworkCallback*>::iterator callit = std::find(callbacks.begin(), callbacks.end(), cb);
+ if (callit != callbacks.end()) {
+ callbacks.erase(callit);
}
}