From: Oliver O. <fr...@us...> - 2007-03-15 07:27:07
|
Update of /cvsroot/simspark/simspark/spark/oxygen/simulationserver In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv7790/spark/oxygen/simulationserver Modified Files: agentcontrol.cpp agentcontrol.h monitorcontrol.cpp monitorcontrol.h netclient.cpp netcontrol.cpp netcontrol.h netmessage.cpp simulationserver.cpp simulationserver.h Log Message: Merged WIN32 branch back to main trunk (access previous version with tag pre_merge_WIN32) Index: simulationserver.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/simulationserver.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** simulationserver.cpp 8 Jan 2006 14:07:38 -0000 1.3 --- simulationserver.cpp 15 Mar 2007 07:26:28 -0000 1.4 *************** *** 22,28 **** #include "simulationserver.h" #include "simcontrolnode.h" - #include <oxygen/monitorserver/monitorserver.h> - #include <oxygen/sceneserver/sceneserver.h> - #include <oxygen/gamecontrolserver/gamecontrolserver.h> #include <zeitgeist/logserver/logserver.h> #include <signal.h> --- 22,25 ---- *************** *** 65,81 **** void SimulationServer::OnLink() { ! mMonitorServer = shared_dynamic_cast<MonitorServer> ! (GetCore()->Get("/sys/server/monitor")); ! ! if (mMonitorServer.get() == 0) ! { ! GetLog()->Error() ! << "(SimulationServer) ERROR: MonitorServer not found.\n"; ! } ! ! mGameControlServer = shared_dynamic_cast<GameControlServer> ! (GetCore()->Get("/sys/server/gamecontrol")); ! if (mGameControlServer.get() == 0) { GetLog()->Error() --- 62,68 ---- void SimulationServer::OnLink() { ! RegisterCachedPath(mGameControlServer, "/sys/server/gamecontrol"); ! if (mGameControlServer.expired()) { GetLog()->Error() *************** *** 83,90 **** } ! mSceneServer = shared_dynamic_cast<SceneServer> ! (GetCore()->Get("/sys/server/scene")); ! ! if (mSceneServer.get() == 0) { GetLog()->Error() --- 70,75 ---- } ! RegisterCachedPath(mSceneServer, "/sys/server/scene"); ! if (mSceneServer.expired()) { GetLog()->Error() *************** *** 93,104 **** } - - void SimulationServer::OnUnlink() - { - mMonitorServer.reset(); - mGameControlServer.reset(); - mSceneServer.reset(); - } - void SimulationServer::Quit() { --- 78,81 ---- *************** *** 203,208 **** { if ( ! (mSceneServer.get() == 0) || ! (mGameControlServer.get() == 0) ) { --- 180,185 ---- { if ( ! (mSceneServer.expired()) || ! (mGameControlServer.expired()) ) { *************** *** 224,228 **** // simulate passed time in one single step mSceneServer->Update(mSumDeltaTime); ! mGameControlServer->Update(mSimStep); mSimTime += mSumDeltaTime; mSumDeltaTime = 0; --- 201,205 ---- // simulate passed time in one single step mSceneServer->Update(mSumDeltaTime); ! mGameControlServer->Update(mSumDeltaTime); mSimTime += mSumDeltaTime; mSumDeltaTime = 0; *************** *** 336,352 **** } - shared_ptr<GameControlServer> SimulationServer::GetGameControlServer() - { - return mGameControlServer; - } - - shared_ptr<MonitorServer> SimulationServer::GetMonitorServer() - { - return mMonitorServer; - } - shared_ptr<SceneServer> SimulationServer::GetSceneServer() { ! return mSceneServer; } --- 313,319 ---- } shared_ptr<SceneServer> SimulationServer::GetSceneServer() { ! return mSceneServer.get(); } Index: monitorcontrol.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/monitorcontrol.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** monitorcontrol.h 5 Dec 2005 21:21:18 -0000 1.1 --- monitorcontrol.h 15 Mar 2007 07:26:28 -0000 1.2 *************** *** 22,25 **** --- 22,26 ---- #include "netcontrol.h" + #include <oxygen/monitorserver/monitorserver.h> namespace oxygen *************** *** 56,64 **** protected: virtual void OnLink(); - virtual void OnUnlink(); protected: /** cached reference to the MonitorServer */ ! boost::shared_ptr<MonitorServer> mMonitorServer; /** the update interval for the connected monitors in cycles */ --- 57,64 ---- protected: virtual void OnLink(); protected: /** cached reference to the MonitorServer */ ! CachedPath<MonitorServer> mMonitorServer; /** the update interval for the connected monitors in cycles */ Index: agentcontrol.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/agentcontrol.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** agentcontrol.h 5 Dec 2005 21:21:18 -0000 1.1 --- agentcontrol.h 15 Mar 2007 07:26:28 -0000 1.2 *************** *** 22,25 **** --- 22,26 ---- #include "netcontrol.h" + #include <oxygen/gamecontrolserver/gamecontrolserver.h> namespace oxygen *************** *** 53,61 **** protected: virtual void OnLink(); - virtual void OnUnlink(); protected: /** cached reference to the GameControlServer */ ! boost::shared_ptr<GameControlServer> mGameControlServer; }; --- 54,61 ---- protected: virtual void OnLink(); protected: /** cached reference to the GameControlServer */ ! CachedPath<GameControlServer> mGameControlServer; }; Index: monitorcontrol.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/monitorcontrol.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** monitorcontrol.cpp 5 Dec 2005 21:21:18 -0000 1.1 --- monitorcontrol.cpp 15 Mar 2007 07:26:28 -0000 1.2 *************** *** 22,26 **** #include "netmessage.h" #include <zeitgeist/logserver/logserver.h> - #include <oxygen/monitorserver/monitorserver.h> #include <oxygen/sceneserver/sceneserver.h> #include <oxygen/sceneserver/scene.h> --- 22,25 ---- *************** *** 44,62 **** { NetControl::OnLink(); ! shared_ptr<SimulationServer> sim = GetSimulationServer(); ! if (sim.get() == 0) { GetLog()->Error() ! << "(MonitorControl) ERROR: SimulationServer not found\n"; return; } - - mMonitorServer = sim->GetMonitorServer(); - } - - void MonitorControl::OnUnlink() - { - NetControl::OnUnlink(); - mMonitorServer.reset(); } --- 43,54 ---- { NetControl::OnLink(); ! RegisterCachedPath(mMonitorServer, "/sys/server/monitor"); ! ! if (mMonitorServer.expired()) { GetLog()->Error() ! << "(MonitorControl) ERROR: MonitorServer not found\n"; return; } } *************** *** 73,77 **** string header = mMonitorServer->GetMonitorHeaderInfo(); mNetMessage->PrepareToSend(header); ! SendMessage(client->addr,header); } --- 65,69 ---- string header = mMonitorServer->GetMonitorHeaderInfo(); mNetMessage->PrepareToSend(header); ! SendClientMessage(client->addr,header); } *************** *** 96,100 **** // send updates to all connected monitors ! string info = mMonitorServer->GetMonitorInfo(); mNetMessage->PrepareToSend(info); --- 88,92 ---- // send updates to all connected monitors ! string info = mMonitorServer->GetMonitorData(); mNetMessage->PrepareToSend(info); *************** *** 105,109 **** ) { ! SendMessage((*iter).second,info); } --- 97,101 ---- ) { ! SendClientMessage((*iter).second,info); } *************** *** 167,170 **** mMonitorInterval = i; } - - --- 159,160 ---- Index: netclient.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/netclient.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** netclient.cpp 13 Dec 2005 21:26:40 -0000 1.2 --- netclient.cpp 15 Mar 2007 07:26:28 -0000 1.3 *************** *** 22,29 **** #include "netclient.h" #include <zeitgeist/logserver/logserver.h> - #include <netinet/in.h> #include <rcssnet/exception.hpp> #include <cerrno> using namespace oxygen; using namespace zeitgeist; --- 22,32 ---- #include "netclient.h" #include <zeitgeist/logserver/logserver.h> #include <rcssnet/exception.hpp> #include <cerrno> + #ifndef WIN32 + #include <netinet/in.h> + #endif + using namespace oxygen; using namespace zeitgeist; *************** *** 204,208 **** { // test for available data ! int fd = mSocket->getFD(); fd_set readfds; --- 207,211 ---- { // test for available data ! Socket::SocketDesc fd = mSocket->getFD(); fd_set readfds; *************** *** 214,218 **** time.tv_usec = 0; ! int rval = select(fd+1, &readfds, 0, 0, &time ); if (rval == 0) --- 217,227 ---- time.tv_usec = 0; ! #ifdef WIN32 ! int maxFd = 0; ! #else ! int maxFd = fd + 1; ! #endif ! ! int rval = select(maxFd, &readfds, 0, 0, &time ); if (rval == 0) Index: netmessage.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/netmessage.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** netmessage.cpp 5 Dec 2005 21:21:18 -0000 1.1 --- netmessage.cpp 15 Mar 2007 07:26:28 -0000 1.2 *************** *** 20,24 **** --- 20,28 ---- #include "netmessage.h" #include "netbuffer.h" + #include <rcssnet/socket.hpp> + + #ifndef WIN32 #include <netinet/in.h> + #endif using namespace oxygen; *************** *** 38,42 **** { // prefix the message with it's payload length ! unsigned int len = htonl(msg.size()); string prefix((const char*)&len,sizeof(unsigned int)); msg = prefix + msg; --- 42,46 ---- { // prefix the message with it's payload length ! unsigned int len = htonl(static_cast<u_long>(msg.size())); string prefix((const char*)&len,sizeof(unsigned int)); msg = prefix + msg; *************** *** 45,50 **** --- 49,60 ---- bool NetMessage::Extract(shared_ptr<NetBuffer> buffer, std::string& msg) { + if (buffer.get() == 0) + { + return false; + } + // a message is prefixed with it's payload length const unsigned int preSz = sizeof(unsigned int); + string& data = buffer->GetData(); Index: netcontrol.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/netcontrol.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** netcontrol.h 24 May 2006 10:07:10 -0000 1.2 --- netcontrol.h 15 Mar 2007 07:26:28 -0000 1.3 *************** *** 113,122 **** /** sends a message to the given client */ ! void SendMessage(boost::shared_ptr<Client> client, ! const std::string& msg); /** sends a message to the client with the given address */ ! void SendMessage(const rcss::net::Addr& addr, ! const std::string& msg); /** create a socket according to the given ESocketType */ --- 113,122 ---- /** sends a message to the given client */ ! void SendClientMessage(boost::shared_ptr<Client> client, ! const std::string& msg); /** sends a message to the client with the given address */ ! void SendClientMessage(const rcss::net::Addr& addr, ! const std::string& msg); /** create a socket according to the given ESocketType */ *************** *** 162,165 **** --- 162,168 ---- void RemoveClient(const rcss::net::Addr& from); + /** removes a client entry and closes the associated socket. */ + void RemoveClient(TAddrMap::iterator iter); + /** removes all clients marked in the mCloseClients list */ void CloseDeadConnections(); Index: netcontrol.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/netcontrol.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** netcontrol.cpp 5 Dec 2005 21:21:18 -0000 1.1 --- netcontrol.cpp 15 Mar 2007 07:26:28 -0000 1.2 *************** *** 21,25 **** #include "netmessage.h" #include <zeitgeist/logserver/logserver.h> - #include <netinet/in.h> #include <rcssnet/exception.hpp> #include <rcssnet/tcpsocket.hpp> --- 21,24 ---- *************** *** 28,31 **** --- 27,34 ---- #include <cerrno> + #ifndef WIN32 + #include <netinet/in.h> + #endif + using namespace rcss::net; using namespace oxygen; *************** *** 209,220 **** // close all client connections ! for ( ! TAddrMap::iterator iter = mClients.begin(); ! iter != mClients.end(); ! ++iter ! ) ! { ! RemoveClient((*iter).second->addr); ! } // shutdown the server socket --- 212,219 ---- // close all client connections ! while (! mClients.empty()) ! { ! RemoveClient(mClients.begin()); ! } // shutdown the server socket *************** *** 224,228 **** << DescribeSocketType() << std::endl; mSocket.reset(); - mClients.clear(); } --- 223,226 ---- *************** *** 245,261 **** } ! void NetControl::RemoveClient(const Addr& from) { ! TAddrMap::iterator mapIter = mClients.find(from); ! ! if (mapIter == mClients.end()) ! { ! GetLog()->Warning() ! << "(NetControl) '" << GetName() ! << "' RemoveClient called with an unknown client address\n"; ! return; ! } ! ! shared_ptr<Client> client = (*mapIter).second; ClientDisconnect(client); --- 243,249 ---- } ! void NetControl::RemoveClient(TAddrMap::iterator iter) { ! shared_ptr<Client> client = (*iter).second; ClientDisconnect(client); *************** *** 266,270 **** << ((socket.get() != 0) ? "TCP" : "UDP") << " connection from '" ! << from.getHostStr() << ":" << from.getPort() << "' id " << client->id << endl; --- 254,258 ---- << ((socket.get() != 0) ? "TCP" : "UDP") << " connection from '" ! << client->addr.getHostStr() << ":" << client->addr.getPort() << "' id " << client->id << endl; *************** *** 274,278 **** } ! mClients.erase(mapIter); } --- 262,281 ---- } ! mClients.erase(iter); ! } ! ! void NetControl::RemoveClient(const Addr& from) ! { ! TAddrMap::iterator mapIter = mClients.find(from); ! ! if (mapIter == mClients.end()) ! { ! GetLog()->Warning() ! << "(NetControl) '" << GetName() ! << "' RemoveClient called with an unknown client address\n"; ! return; ! } ! ! RemoveClient(mapIter); } *************** *** 287,291 **** } ! void NetControl::SendMessage(shared_ptr<Client> client, const string& msg) { if (client.get() == 0) --- 290,294 ---- } ! void NetControl::SendClientMessage(shared_ptr<Client> client, const string& msg) { if (client.get() == 0) *************** *** 319,323 **** } ! void NetControl::SendMessage(const Addr& addr, const string& msg) { TAddrMap::iterator iter = mClients.find(addr); --- 322,326 ---- } ! void NetControl::SendClientMessage(const Addr& addr, const string& msg) { TAddrMap::iterator iter = mClients.find(addr); *************** *** 331,335 **** } ! SendMessage((*iter).second,msg); } --- 334,338 ---- } ! SendClientMessage((*iter).second,msg); } *************** *** 344,348 **** } ! int fd = mSocket->getFD(); fd_set readfds; --- 347,351 ---- } ! Socket::SocketDesc fd = mSocket->getFD(); fd_set readfds; *************** *** 356,360 **** for(;;) { ! int ret = select(fd+1, &readfds, 0, 0, &time); if (ret == 0) --- 359,370 ---- for(;;) { ! #ifdef WIN32 ! // maxFd is ignored on Win32 and is present just for api compatibility ! int maxFd = 0; ! #else ! int maxFd = fd + 1; ! #endif ! ! int ret = select(maxFd, &readfds, 0, 0, &time); if (ret == 0) *************** *** 384,387 **** --- 394,402 ---- shared_ptr<Socket> socket(mSocket->accept(addr)); + if (socket.get() == 0) + { + return; + } + int ret = socket->setNonBlocking(true); *************** *** 478,482 **** } ! int fd = mSocket->getFD(); fd_set readfds; --- 493,497 ---- } ! Socket::SocketDesc fd = mSocket->getFD(); fd_set readfds; *************** *** 490,494 **** for(;;) { ! int ret = select(fd+1, &readfds, 0, 0, &time); if (ret == 0) --- 505,516 ---- for(;;) { ! #ifdef WIN32 ! // maxFd is ignored on Win32 and is present just for api compatibility ! int maxFd = 0; ! #else ! int maxFd = fd + 1; ! #endif ! ! int ret = select(maxFd, &readfds, 0, 0, &time); if (ret == 0) *************** *** 534,537 **** --- 556,564 ---- void NetControl::ReadTCPMessages() { + if (mClients.empty()) + { + return; + } + // generate a set of client socket fds fd_set client_fds; *************** *** 546,551 **** ) { ! const int fd = (*iter).second->socket->getFD(); maxFd = std::max<int>(fd,maxFd); FD_SET(fd,&client_fds); } --- 573,583 ---- ) { ! const Socket::SocketDesc fd = (*iter).second->socket->getFD(); ! #ifdef WIN32 ! // maxFd is ignored for Win32 ! maxFd = 0; ! #else maxFd = std::max<int>(fd,maxFd); + #endif FD_SET(fd,&client_fds); } *************** *** 584,588 **** ) { ! const int fd = (*iter).second->socket->getFD(); if (! FD_ISSET(fd, &test_fds)) { --- 616,620 ---- ) { ! const Socket::SocketDesc fd = (*iter).second->socket->getFD(); if (! FD_ISSET(fd, &test_fds)) { *************** *** 599,603 **** } else { ! if (rval < 0) { GetLog()->Error() --- 631,635 ---- } else { ! if (rval <= 0) { GetLog()->Error() *************** *** 605,614 **** << "' recv returned error on a client socket '" << strerror(errno) << "' " << endl; - continue; } - // (rval==0) indicates a close() on - // the client side - // mark the client connection to be // closed and exclude it from further --- 637,642 ---- Index: simulationserver.h =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/simulationserver.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** simulationserver.h 2 Jan 2006 20:37:41 -0000 1.2 --- simulationserver.h 15 Mar 2007 07:26:28 -0000 1.3 *************** *** 24,34 **** #include <zeitgeist/node.h> namespace oxygen { ! class GameControlServer; ! class MonitorServer; ! class SceneServer; ! class SimControlNode; class SimulationServer : public zeitgeist::Node --- 24,33 ---- #include <zeitgeist/node.h> + #include <oxygen/gamecontrolserver/gamecontrolserver.h> + #include <oxygen/sceneserver/sceneserver.h> namespace oxygen { ! class SimControlNode; class SimulationServer : public zeitgeist::Node *************** *** 121,130 **** virtual void Run(int argc = 0, char** argv = 0); - /** returns the cached MonitorServer reference */ - boost::shared_ptr<MonitorServer> GetMonitorServer(); - - /** returns the cached GameControlServer reference */ - boost::shared_ptr<GameControlServer> GetGameControlServer(); - /** returns thr cached SceneServer reference */ boost::shared_ptr<SceneServer> GetSceneServer(); --- 120,123 ---- *************** *** 135,139 **** protected: virtual void OnLink(); - virtual void OnUnlink(); /** advances the simulation mSumDeltaTime seconds. If mSimStep is --- 128,131 ---- *************** *** 180,191 **** int mCycle; - /** a cached reference to the monitor server */ - boost::shared_ptr<MonitorServer> mMonitorServer; - /** a cached reference to the GameControlServer */ ! boost::shared_ptr<GameControlServer> mGameControlServer; /** a cached reference to the SceneServer */ ! boost::shared_ptr<SceneServer> mSceneServer; }; --- 172,180 ---- int mCycle; /** a cached reference to the GameControlServer */ ! CachedPath<GameControlServer> mGameControlServer; /** a cached reference to the SceneServer */ ! CachedPath<SceneServer> mSceneServer; }; Index: agentcontrol.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/spark/oxygen/simulationserver/agentcontrol.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** agentcontrol.cpp 5 Dec 2005 21:21:18 -0000 1.1 --- agentcontrol.cpp 15 Mar 2007 07:26:28 -0000 1.2 *************** *** 22,26 **** #include "netmessage.h" #include <zeitgeist/logserver/logserver.h> - #include <oxygen/gamecontrolserver/gamecontrolserver.h> #include <oxygen/agentaspect/agentaspect.h> --- 22,25 ---- *************** *** 42,60 **** { NetControl::OnLink(); ! shared_ptr<SimulationServer> sim = GetSimulationServer(); ! if (sim.get() == 0) ! { ! GetLog()->Error() ! << "(AgentControl) ERROR: SimulationServer not found\n"; ! return; ! } ! ! mGameControlServer = sim->GetGameControlServer(); ! } ! void AgentControl::OnUnlink() ! { ! NetControl::OnUnlink(); ! mGameControlServer.reset(); } --- 41,51 ---- { NetControl::OnLink(); ! RegisterCachedPath(mGameControlServer, "/sys/server/gamecontrol"); ! if (mGameControlServer.expired()) ! { ! GetLog()->Error() ! << "(AgentControl) ERROR: GameControlServer not found.\n"; ! } } *************** *** 181,185 **** mNetMessage->PrepareToSend(senses); ! SendMessage(client,senses); } } --- 172,176 ---- mNetMessage->PrepareToSend(senses); ! SendClientMessage(client,senses); } } |