Revision: 1458
http://rigsofrods.svn.sourceforge.net/rigsofrods/?rev=1458&view=rev
Author: rorthomas
Date: 2010-07-18 10:31:30 +0000 (Sun, 18 Jul 2010)
Log Message:
-----------
fixed user_info_t clientname usage
fixed broken character streaming: wrong precompiler macro
added server settings to network class
fixed stream not found message on freshly new or removed streams
Modified Paths:
--------------
trunk/source/main/Beam.cpp
trunk/source/main/Character.cpp
trunk/source/main/Character.h
trunk/source/main/ChatSystem.cpp
trunk/source/main/NetworkStreamManager.cpp
trunk/source/main/RoRFrameListener.cpp
trunk/source/main/network.cpp
trunk/source/main/network.h
Modified: trunk/source/main/Beam.cpp
===================================================================
--- trunk/source/main/Beam.cpp 2010-07-17 21:59:30 UTC (rev 1457)
+++ trunk/source/main/Beam.cpp 2010-07-18 10:31:30 UTC (rev 1458)
@@ -10964,14 +10964,14 @@
{
client_t *c = net->getClientInfo(sourceid);
if(!c) return;
- networkUsername = String(c->user.clientname);
+ networkUsername = String(c->user.username);
networkAuthlevel = c->user.authstatus;
} else
{
user_info_t *info = net->getLocalUserData();
if(!info) return;
- if(!strlen(info->clientname)) return;
- networkUsername = String(info->clientname);
+ if(!strlen(info->username)) return;
+ networkUsername = String(info->username);
networkAuthlevel = info->authstatus;
}
Modified: trunk/source/main/Character.cpp
===================================================================
--- trunk/source/main/Character.cpp 2010-07-17 21:59:30 UTC (rev 1457)
+++ trunk/source/main/Character.cpp 2010-07-18 10:31:30 UTC (rev 1458)
@@ -147,17 +147,17 @@
{
client_t *info = net->getClientInfo(this->source);
if(!info) return;
- if(!strlen(info->user.clientname)) return;
+ if(!strlen(info->user.username)) return;
this->colourNumber = info->user.colournum;
- networkUsername = info->user.clientname;
+ networkUsername = info->user.username;
networkAuthLevel = info->user.authstatus;
} else
{
user_info_t *info = net->getLocalUserData();
if(!info) return;
- if(!strlen(info->clientname)) return;
+ if(!strlen(info->username)) return;
this->colourNumber = info->colournum;
- networkUsername = String(info->clientname);
+ networkUsername = String(info->username);
networkAuthLevel = info->authstatus;
}
@@ -505,10 +505,10 @@
}
-#ifdef MYSOCKETW
+#ifdef USE_SOCKETW
if(net && !remote)
sendStreamData();
-#endif //MYSOCKETW
+#endif // USE_SOCKETW
}
void Character::updateMapIcon()
Modified: trunk/source/main/Character.h
===================================================================
--- trunk/source/main/Character.h 2010-07-17 21:59:30 UTC (rev 1457)
+++ trunk/source/main/Character.h 2010-07-18 10:31:30 UTC (rev 1458)
@@ -76,6 +76,7 @@
bool getPhysicsEnabled() { return physicsEnabled; };
void setPhysicsEnabled(bool val) { physicsEnabled=val; };
+ bool isRemote() { return remote; };
protected:
Ogre::Vector3 position;
Modified: trunk/source/main/ChatSystem.cpp
===================================================================
--- trunk/source/main/ChatSystem.cpp 2010-07-17 21:59:30 UTC (rev 1457)
+++ trunk/source/main/ChatSystem.cpp 2010-07-18 10:31:30 UTC (rev 1458)
@@ -99,7 +99,7 @@
{
try
{
- UTFString username =
tryConvertUTF(c->clientname);
+ UTFString username = tryConvertUTF(c->username);
te->setCaption(username);
String matName =
PlayerColours::getSingleton().getColourMaterial(c->colournum);
@@ -128,7 +128,7 @@
try
{
- UTFString username = tryConvertUTF(c->user.clientname);
+ UTFString username = tryConvertUTF(c->user.username);
String plstr = StringConverter::toString(num) + ": " +
ColoredTextAreaOverlayElement::StripColors(username);
@@ -184,7 +184,7 @@
client_t *c = net->getClientInfo(source);
if(c)
{
- username = tryConvertUTF(c->user.clientname);
+ username = tryConvertUTF(c->user.username);
int nickColour = 8;
if(c->user.authstatus & AUTH_NONE) nickColour = 8; //
grey
Modified: trunk/source/main/NetworkStreamManager.cpp
===================================================================
--- trunk/source/main/NetworkStreamManager.cpp 2010-07-17 21:59:30 UTC (rev
1457)
+++ trunk/source/main/NetworkStreamManager.cpp 2010-07-18 10:31:30 UTC (rev
1458)
@@ -170,7 +170,8 @@
if(streams.find(header.source)->second.find(header.streamid) ==
streams.find(header.source)->second.end())
{
// no such stream?!
- LogManager::getSingleton().logMessage("EEE Stream not found:
"+StringConverter::toString(header.source)+":"+StringConverter::toString(header.streamid));
+ if(header.streamid != 0)
+ LogManager::getSingleton().logMessage("EEE Stream not
found:
"+StringConverter::toString(header.source)+":"+StringConverter::toString(header.streamid));
pthread_mutex_unlock(&stream_mutex);
return;
}
Modified: trunk/source/main/RoRFrameListener.cpp
===================================================================
--- trunk/source/main/RoRFrameListener.cpp 2010-07-17 21:59:30 UTC (rev
1457)
+++ trunk/source/main/RoRFrameListener.cpp 2010-07-18 10:31:30 UTC (rev
1458)
@@ -2676,9 +2676,8 @@
if(net)
{
CharacterFactory::getSingleton().updateCharacters(dt);
- } else
+ } else if (!net && cameramode != CAMERA_FREE)
{
- if (cameramode != CAMERA_FREE)
// do not move the person in free camera mode
person->update(dt);
}
Modified: trunk/source/main/network.cpp
===================================================================
--- trunk/source/main/network.cpp 2010-07-17 21:59:30 UTC (rev 1457)
+++ trunk/source/main/network.cpp 2010-07-18 10:31:30 UTC (rev 1458)
@@ -91,6 +91,7 @@
ChatSystemFactory::getSingleton().setNetwork(this);
//
+ memset(&server_settings, 0, sizeof(server_info_t));
memset(&userdata, 0, sizeof(user_info_t));
shutdown=false;
#ifdef USE_OPENAL
@@ -98,7 +99,6 @@
#endif //USE_OPENAL
mySname = servername;
mySport = sport;
- strcpy(terrainName, "");
mefl = efl;
myauthlevel = AUTH_NONE;
net_instance=this;
@@ -181,26 +181,19 @@
netFatalError("Establishing network session: error getting
server version", false);
return false;
}
- //check server version
- if (strncmp(buffer, RORNET_VERSION, strlen(RORNET_VERSION)))
+ if(header.command != MSG2_HELLO)
{
- netFatalError("Establishing network session: wrong server
version");
+ netFatalError("Establishing network session: error getting
server hello");
return false;
}
- // receive terrain name
- if (receivemessage(&socket, &header, buffer, 255))
+ // save server settings
+ memcpy(&server_settings, buffer, sizeof(server_info_t));
+
+ if (strncmp(server_settings.protocolversion, RORNET_VERSION,
strlen(RORNET_VERSION)))
{
- netFatalError("Establishing network session: error getting
server terrain");
+ netFatalError("Establishing network session: wrong server
version, you are using version '" + String(RORNET_VERSION) + "' and the server
is using '"+String(server_settings.protocolversion)+"'");
return false;
}
- if (header.command != MSG2_TERRAIN_RESP)
- {
- netFatalError("Establishing network session: error getting
server terrain response");
- return false;
- }
- strncpy(terrainName, buffer, header.size);
- terrainName[header.size]=0;
-
// first handshake done, increase the timeout, important!
socket.set_timeout(0, 0);
@@ -242,11 +235,17 @@
strncpy(c.username, nickname.c_str(), 20);
strncpy(c.serverpassword, sha1pwresult, 40);
strncpy(c.usertoken, usertokensha1result, 40);
-
- if (sendmessage(&socket, MSG2_USER_CREDENTIALS, 0, sizeof(user_info_t),
(char*)&c))
+ strncpy(c.clientversion, ROR_VERSION_STRING,
strnlen(ROR_VERSION_STRING, 25));
+ strcpy(c.clientname, "RoR");
+ String lang = SETTINGS.getSetting("Language Short");
+ strncpy(c.language, lang.c_str(), std::min<int>(lang.size(), 10));
+ String guid = SETTINGS.getSetting("GUID");
+ strncpy(c.clientGUID, guid.c_str(), std::min<int>(guid.size(), 10));
+ strcpy(c.sessiontype, "normal");
+ if (sendmessage(&socket, MSG2_USER_INFO, 0, sizeof(user_info_t),
(char*)&c))
{
//this is an error!
- netFatalError("Establishing network session: error sending
hello", false);
+ netFatalError("Establishing network session: error sending user
info", false);
return false;
}
//now this is important, getting authorization
@@ -262,7 +261,7 @@
netFatalError("Establishing network session: sorry, server has
too many players", false);
return false;
}
- if (header.command==MSG2_BANNED)
+ else if (header.command==MSG2_BANNED)
{
char tmp[512];
memset(tmp, 0, 512);
@@ -278,12 +277,18 @@
return false;
}
- if (header.command==MSG2_WRONG_PW)
+ else if (header.command==MSG2_WRONG_PW)
{
//this is an error!
netFatalError("Establishing network session: sorry, wrong
password!", false);
return false;
}
+ else if (header.command==MSG2_WRONG_VER)
+ {
+ //this is an error!
+ netFatalError("Establishing network session: sorry, wrong
protocol version!", false);
+ return false;
+ }
if (header.command!=MSG2_WELCOME)
{
//this is an error!
@@ -292,9 +297,10 @@
}
//okay keep our uid
myuid = header.source;
- // set player colour
- userdata.colournum = *((int *)buffer);
+ // we get our userdata back
+ memcpy(&userdata, buffer, std::min<int>(sizeof(user_info_t),
header.size));
+
//start the handling threads
pthread_create(&sendthread, NULL, s_sendthreadstart, (void*)(0));
pthread_create(&receivethread, NULL, s_receivethreadstart, (void*)(0));
@@ -542,6 +548,12 @@
}
else if(header.command == MSG2_USER_LEAVE)
{
+ if(header.source == (int)myuid)
+ {
+ netFatalError("disconnected", false);
+ return;
+ }
+
// remove all things that belong to that user
client_t *client = getClientInfo(header.source);
if(client)
@@ -549,28 +561,17 @@
// now remove all possible streams
NetworkStreamManager::getSingleton().removeUser(header.source);
+ continue;
}
else if(header.command == MSG2_USER_INFO || header.command ==
MSG2_USER_JOIN)
{
- // this function syncs the user data in the network
- {
- // debug stuff
- /*
- LogManager::getSingleton().logMessage(" >
received user info:" + StringConverter::toString(header.source) + " (we are " +
StringConverter::toString(myuid) + ")");
- user_info_t *cinfo = (user_info_t*) buffer;
- LogManager::getSingleton().logMessage(" *
version : " + StringConverter::toString(cinfo->version));
- LogManager::getSingleton().logMessage(" *
nickname: " + String(cinfo->nickname));
- LogManager::getSingleton().logMessage(" * auth
: " + StringConverter::toString(cinfo->authstatus));
- LogManager::getSingleton().logMessage(" *
slotnum : " + StringConverter::toString(cinfo->slotnum));
- */
- }
if(header.source == (int)myuid)
{
// we got data about ourself!
memcpy(&userdata, buffer, sizeof(user_info_t));
CharacterFactory::getSingleton().localUserAttributesChanged(myuid);
// update our nickname
- nickname = String(userdata.clientname);
+ nickname = String(userdata.username);
// update auth status
myauthlevel = userdata.authstatus;
} else
@@ -606,6 +607,7 @@
pthread_mutex_unlock(&clients_mutex);
}
}
+ continue;
}
//debugPacket("receive-1", &header, buffer);
NetworkStreamManager::getSingleton().pushReceivedStreamMessage(header, buffer);
Modified: trunk/source/main/network.h
===================================================================
--- trunk/source/main/network.h 2010-07-17 21:59:30 UTC (rev 1457)
+++ trunk/source/main/network.h 2010-07-18 10:31:30 UTC (rev 1458)
@@ -61,8 +61,6 @@
char sendthreadstart_buffer[MAX_MESSAGE_LENGTH];
pthread_mutex_t msgsend_mutex;
RoRFrameListener *mefl;
- char terrainName[255];
- bool requestTerrainName();
Ogre::String nickname;
int rconauthed;
bool shutdown;
@@ -73,6 +71,7 @@
std::map<int, float> lagDataClients;
std::map<Ogre::String, Ogre::String> downloadingMods;
void updatePlayerList();
+ server_info_t server_settings;
public:
Network(Beam **btrucks, std::string servername, long sport,
RoRFrameListener *efl);
@@ -91,7 +90,7 @@
void sendthreadstart();
void receivethreadstart();
- char *getTerrainName() { return terrainName; };
+ char *getTerrainName() { return server_settings.terrain; };
Ogre::String getNickname(bool colour=false);
unsigned int getUserID() { return myuid; };
static unsigned long getNetTime();
@@ -112,5 +111,5 @@
#endif
-#endif // SOCKETW
+#endif // USE_SOCKETW
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Rigsofrods-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rigsofrods-devel