freebsd-ports/games/xevil/files/patch-cmn__role.cpp
2014-07-29 17:12:47 +00:00

477 lines
14 KiB
C++

--- cmn/role.cpp.orig 2012-05-27 06:52:30.000000000 +0900
+++ cmn/role.cpp 2012-05-27 06:53:11.000000000 +0900
@@ -29,9 +29,9 @@
#include "stdafx.h"
-#include <iostream.h>
+#include <iostream>
#if X11
-#include <strstream.h>
+#include <sstream>
#include <time.h>
#endif
#if WIN32
@@ -266,43 +266,39 @@
void Role::error(const char *msg1,const char *msg2,const char *msg3) {
- ostrstream str;
+ stringstream str;
if (msg2 == NULL) {
- str << msg1 << ends;
+ str << msg1;
}
else if (msg3 == NULL) {
- str << msg1 << msg2 << ends;
+ str << msg1 << msg2;
}
else {
- str << msg1 << msg2 << msg3 << ends;
+ str << msg1 << msg2 << msg3;
}
// Call one argument version.
- _error(str.str());
-
- delete str.str();
+ _error(str.str().c_str());
}
void Role::message(const char *msg1,const char *msg2,const char *msg3) {
- ostrstream str;
+ stringstream str;
if (msg2 == NULL) {
- str << msg1 << ends;
+ str << msg1;
}
else if (msg3 == NULL) {
- str << msg1 << msg2 << ends;
+ str << msg1 << msg2;
}
else {
- str << msg1 << msg2 << msg3 << ends;
+ str << msg1 << msg2 << msg3;
}
// Call one argument version.
- _message(str.str());
-
- delete str.str();
+ _message(str.str().c_str());
}
@@ -605,11 +601,11 @@
// Display message that we are looking up IP address.
// Assumes that caller will call Client::connect_server after a turn or two,
// so the message will be displayed on the Ui.
- ostrstream str;
- str << "Looking up IP address for server " << serverName << ends;
+ stringstream str;
+ str << "Looking up IP address for server " << serverName;
// Display for a long time.
- errLocator->arena_message_enq(str.str(),NULL,1000000);
- errLocator->message_enq(Utils::strdup(str.str()));
+ errLocator->arena_message_enq(Utils::strdup(str.str().c_str()),NULL,1000000);
+ errLocator->message_enq(Utils::strdup(str.str().c_str()));
// Probably would be better to use Role::message(), but we want it to stay
// up for a long time. Should add argument to Role::message().
@@ -663,12 +659,10 @@
}
}
if (n == CLIENT_PORT_TRIES) {
- ostrstream str;
+ stringstream str;
str << "Could not bind local UDP port to any of "
- << clientPortBase << "-" << (clientPortBase + CLIENT_PORT_TRIES - 1)
- << ends;
- error(str.str());
- delete str.str();
+ << clientPortBase << "-" << (clientPortBase + CLIENT_PORT_TRIES - 1);
+ error(str.str().c_str());
return;
}
// cout << "UDP port seems to be" << client.sin_port << endl;
@@ -703,22 +697,19 @@
// Inform user of failed connection
if (!ok()) {
- strstream msg;
+ stringstream msg;
msg << "Could not connect to " << serverName << " on port " <<
- port << "." << ends;
- error(msg.str());
- delete(msg.str());
+ port << ".";
+ error(msg.str().c_str());
delete tcpOut;
return;
}
// Inform user of successful connection
- strstream msg;
+ stringstream msg;
msg << hostName << " connected to " << serverName << " on port " <<
- port << ends;
- message(msg.str());
- delete msg.str();
-
+ port;
+ message(msg.str().c_str());
// Create TCP and UDP streams.
tcpIn = new NetInStream(tcpSock,False);
@@ -967,11 +958,11 @@
Role::_error(msg);
if (errorLocator) {
- ostrstream str2;
- str2 << "ERROR: " << msg << ends;
- errorLocator->arena_message_enq(str2.str(),NULL,ROLE_FAILED_TIME);
+ stringstream str2;
+ str2 << "ERROR: " << msg;
+ errorLocator->arena_message_enq(Utils::strdup(str2.str().c_str()),NULL,ROLE_FAILED_TIME);
// Don't delete str2.str(), give memory to the Locator.
- errorLocator->message_enq(Utils::strdup(str2.str()));
+ errorLocator->message_enq(Utils::strdup(str2.str().c_str()));
}
#if WIN32
// Only the client can afford to block on error messages.
@@ -986,11 +977,9 @@
Role::_error(msg);
if (errorLocator) {
- ostrstream str2;
- str2 << msg << ends;
- errorLocator->arena_message_enq(str2.str());
+ errorLocator->arena_message_enq(Utils::strdup(msg));
// Don't delete str2.str(), give memory to the Locator.
- errorLocator->message_enq(Utils::strdup(str2.str()));
+ errorLocator->message_enq(Utils::strdup(msg));
}
}
@@ -1256,10 +1245,9 @@
if (turn > turnMax) {
turnMax = turn;
if (echoPingPong) {
- ostrstream str;
- str << "PONG the server with turn " << turnMax << ends;
- message(str.str());
- delete str.str();
+ stringstream str;
+ str << "PONG the server with turn " << turnMax;
+ message(str.str().c_str());
}
// Tell server so it can free turn windows to send more data.
XETP::send_pong(udpOut,turnMax);
@@ -1365,10 +1353,9 @@
}
}
else {
- ostrstream str;
- str << "No context for classId " << classId << ends;
- error(str.str());
- delete str.str();
+ stringstream str;
+ str << "No context for classId " << classId;
+ error(str.str().c_str());
}
}
}
@@ -1582,9 +1569,9 @@
return Utils::strdup(clientName);
}
- ostrstream str;
- str << '\"' << intel->get_name() << "\"@" << clientName << ends;
- return str.str();
+ stringstream str;
+ str << '\"' << intel->get_name() << "\"@" << clientName;
+ return Utils::strdup(str.str().c_str());
}
@@ -1695,11 +1682,10 @@
}
#ifdef SKIP_MESSAGES
- ostrstream msg;
+ stringstream msg;
msg << "Average delay is " << avg << " out of "
- << delaysNum << " samples." << ends;
+ << delaysNum << " samples.";
server->message(msg.str());
- delete msg.str();
#endif
#if 0
@@ -1723,10 +1709,9 @@
// server->error("Client has reached maximum skip value.");
// }
#ifdef SKIP_MESSAGES
- ostrstream msg;
- msg << "Increasing skip to " << skip << ends;
+ stringstream msg;
+ msg << "Increasing skip to " << skip;
server->message(msg.str());
- delete msg.str();
#endif
}
// We have moved back into our target range, can send more data now.
@@ -1734,10 +1719,9 @@
skip--;
#ifdef SKIP_MESSAGES
- ostrstream msg;
- msg << "Decreasing skip to " << skip << ends;
+ stringstream msg;
+ msg << "Decreasing skip to " << skip;
server->message(msg.str());
- delete msg.str();
#endif
}
@@ -1777,7 +1761,7 @@
-Server::Server(Boolean lHuman,char *portName,LocatorP errLocator) {
+Server::Server(Boolean lHuman,const char *portName,LocatorP errLocator) {
// Hack, using errLocator for more than reporting errors.
errLocator->set_remember_deleted(True);
errLocator->set_remember_sounds(True);
@@ -1843,19 +1827,17 @@
// Give address to both the TCP and UDP sockets.
if (bind(tcpSock, (CMN_SOCKADDR *)&serverAddr, sizeof(serverAddr)) < 0) {
- ostrstream str;
+ stringstream str;
str << "Couldn't bind socket name to TCP socket on port "
- << port << "." << ends;
- error(str.str());
- delete str.str();
+ << port << ".";
+ error(str.str().c_str());
return;
}
if (bind(udpSock, (CMN_SOCKADDR *)&serverAddr, sizeof(serverAddr)) < 0) {
- ostrstream str;
+ stringstream str;
str << "Couldn't bind socket name to UDP socket on port "
- << port << "." << ends;
- error(str.str());
- delete str.str();
+ << port << ".";
+ error(str.str().c_str());
return;
}
@@ -1868,10 +1850,9 @@
assert(udpIn);
// Message to server log.
- strstream msg;
- msg << "Set up server on port " << port << ends;
- message(msg.str());
- delete(msg.str());
+ stringstream msg;
+ msg << "Set up server on port " << port;
+ message(msg.str().c_str());
running = True;
}
@@ -1951,10 +1932,9 @@
localHumanId = hId;
// Log the human's name.
- strstream msg;
- msg << "Player 0 \"" << human->get_name() << '\"' << "@SERVER" << ends;
- message(msg.str());
- delete(msg.str());
+ stringstream msg;
+ msg << "Player 0 \"" << human->get_name() << '\"' << "@SERVER";
+ message(msg.str().c_str());
return;
}
@@ -1985,12 +1965,11 @@
// Log all the players in the game, some code duplication for the
// local human.
- ostrstream str;
+ stringstream str;
char* fullName = cn->get_full_client_name();
- str << "Player " << num << " " << fullName << ends;
- message(str.str());
+ str << "Player " << num << " " << fullName;
+ message(str.str().c_str());
delete fullName;
- delete str.str();
// Send assign_intel via TCP
OutStreamP out = cn->get_tcp_out_stream();
@@ -2007,13 +1986,12 @@
// anyway.
for (m = 0; m < connections.length() && m != n; m++) {
char* fullName = cn->get_full_client_name();
- ostrstream str;
- str << fullName << " has joined the game" << ends;
+ stringstream str;
+ str << fullName << " has joined the game";
delete fullName;
OutStreamP out = cn->get_udp_out_stream();
- XETP::send_arena_message(out,timeMS,str.str());
- delete str.str();
+ XETP::send_arena_message(out,timeMS,str.str().c_str());
}
cn->creation_message_sent();
}
@@ -2101,13 +2079,12 @@
// Give the connection some slack when it is first starting up.
turn - cn->get_start_turn() >= MINIMUM_CUTOFF) {
char* fullName = cn->get_full_client_name();
- ostrstream str;
+ stringstream str;
str << fullName
<< " has not responded in "
- << diff << " turns. Disconnect." << ends;
- message(str.str());
+ << diff << " turns. Disconnect.";
+ message(str.str().c_str());
delete fullName;
- delete str.str();
tooOld = True;
}
}
@@ -2147,11 +2124,10 @@
diff == NO_ACTIVITY_WARN_2 ||
diff == NO_ACTIVITY_WARN_3) {
if (echoPingPong) {
- ostrstream str;
+ stringstream str;
str << "Haven't heard from " << cn->get_client_name()
- << " in " << diff << " turns, sending PING." << ends;
- message(str.str());
- delete str.str();
+ << " in " << diff << " turns, sending PING.";
+ message(str.str().c_str());
}
XETP::send_ping(cn->get_udp_out_stream());
}
@@ -2311,7 +2287,11 @@
for (m = 0; m < followers.length(); m++) {
PhysicalP q = (PhysicalP)followers.get(m);
netData = q->get_net_data();
- assert(!netData->get_sent_flag());
+ // This line was aborting network games, often in the pound scenario.
+ // Without it, the server seems to continue without error.
+ // I tried replacing it with a warning, but there is so much of it
+ // that it is nearly impossible to see anything else. -Brandon
+// assert(!netData->get_sent_flag());
netData->set_sent_flag(True);
}
@@ -2713,9 +2693,9 @@
// Careful to set the propagate flag to False so the message doesn't get
// sent to the clients.
if (errorLocator) {
- ostrstream str2;
- str2 << "SERVER: " << msg << ends;
- errorLocator->arena_message_enq(str2.str(),NULL,ROLE_FAILED_TIME,False);
+ stringstream str2;
+ str2 << "SERVER: " << msg;
+ errorLocator->arena_message_enq(Utils::strdup(str2.str().c_str()),NULL,ROLE_FAILED_TIME,False);
// Don't delete str2.str(), give memory to the Locator.
// Could do a regular message_enq(), but would have to deal with the
@@ -2728,10 +2708,9 @@
void Server::display_chat_message(LocatorP l,const char* sender,
const char* msg) {
// Log the chat message, then let Role handle it.
- strstream logMsg;
- logMsg << '<' << sender << '>' << msg << ends;
- message(logMsg.str());
- delete logMsg.str();
+ stringstream logMsg;
+ logMsg << '<' << sender << '>' << msg;
+ message(logMsg.str().c_str());
Role::display_chat_message(l,sender,msg);
}
@@ -2851,12 +2830,11 @@
udpAddr->sin_port = htons(udpPort);
// Log the connection.
- strstream msg;
+ stringstream msg;
msg << clientName <<
" connected (TCP port " << ntohs(tcpAddr.sin_port) <<
- ", UDP port " << udpPort << ")" << ends;
- message(msg.str());
- delete(msg.str());
+ ", UDP port " << udpPort << ")";
+ message(msg.str().c_str());
Connection* cn =
new Connection(this,errorLocator,
@@ -2874,7 +2852,7 @@
XETP::send_reset(out,manager->get_game_style_type());
// Say hello to the new client.
- ostrstream greeting;
+ stringstream greeting;
greeting << "Welcome to " << hostName << ".";
if (get_humans_num() == 1) {
@@ -2884,10 +2862,8 @@
greeting << " There are now "
<< get_humans_num() << " players.";
}
- greeting << ends;
int timeMS = quantaToMS(UI_ARENA_MESSAGE_TIME,manager);
- XETP::send_arena_message(out,timeMS,greeting.str());
- delete greeting.str();
+ XETP::send_arena_message(out,timeMS,greeting.str().c_str());
manager->humans_num_incremented();
}
@@ -2918,18 +2894,16 @@
Connection* cm = get_connection(m);
char* fullName = cn->get_full_client_name();
- ostrstream str;
+ stringstream str;
str << fullName << " has disconnected";
if (intel) {
str << ", " << kills << " human kills";
}
- str << ends;
XETP::send_arena_message(cm->get_udp_out_stream(),
- timeMS,str.str());
+ timeMS,str.str().c_str());
delete fullName;
- delete str.str();
}
}
@@ -3262,8 +3236,8 @@
void Server::send_udp_server_pong(IGameManager* manager,LocatorP locator,
CMN_SOCKET udpSock,
CMN_SOCKADDR_IN* destAddr) {
- static char* unknownString = "<unknown>";
- static char* serverString = "<server>";
+ static const char* unknownString = "<unknown>";
+ static const char* serverString = "<server>";
// Temporary stream.