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

Reply via email to