From: <sv...@ww...> - 2004-06-13 14:37:16
|
Author: wolverine Date: 2004-06-13 07:37:10 -0700 (Sun, 13 Jun 2004) New Revision: 1034 Added: trunk/CSP/CSPSim/Source/Networking/DispatchMessageHandler.cpp Modified: trunk/CSP/CSPSim/Source/CSPSim.cpp trunk/CSP/CSPSim/Source/DynamicObject.cpp trunk/CSP/CSPSim/Source/Makefile.in trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp trunk/CSP/CSPSim/Source/SimObject.cpp Log: Added DispatchMessageHandler.cpp to handle incoming messages and forward them to the correct object. Modified: trunk/CSP/CSPSim/Source/CSPSim.cpp =================================================================== --- trunk/CSP/CSPSim/Source/CSPSim.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/CSPSim.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -425,6 +425,15 @@ m_RemoteServerNode = new NetworkNode(1, remoteAddr.c_str(), remotePort ); m_localNode = new NetworkNode(1, localAddr.c_str(), localMessagePort); m_NetworkMessenger = new NetworkMessenger(m_localNode); + PrintMessageHandler * printMessageHandler = new PrintMessageHandler(); + printMessageHandler->setFrequency(100); + m_NetworkMessenger->registerReceiveHandler(printMessageHandler); + DispatchMessageHandler * dispatchMessageHandler = new DispatchMessageHandler(); + dispatchMessageHandler->setLocalAddress( m_localNode->getAddress().getAddress().s_addr ); + dispatchMessageHandler->setLocalPort( localMessagePort ); + dispatchMessageHandler->setDataManager(m_DataManager); + dispatchMessageHandler->setVirtualBattlefield(getBattlefield()); + m_NetworkMessenger->registerReceiveHandler(dispatchMessageHandler); #if 0 // set the Main Menu then start the main loop Modified: trunk/CSP/CSPSim/Source/DynamicObject.cpp =================================================================== --- trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -406,8 +406,7 @@ simdata::MemoryWriter writer((simdata::uint8*)ptrPayload); writer << m_ID; - simdata::uint32 objType = 1; - writer << objType; + writer << m_Type; writer << CSPSim::theSim->getElapsedTime(); b_GlobalPosition->value().serialize(writer); b_LinearVelocity->value().serialize(writer); Modified: trunk/CSP/CSPSim/Source/Makefile.in =================================================================== --- trunk/CSP/CSPSim/Source/Makefile.in 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/Makefile.in 2004-06-13 14:37:10 UTC (rev 1034) @@ -78,6 +78,7 @@ Networking/NetworkAddress.cpp \ Networking/PrintMessageHandler.cpp \ Networking/EchoMessageHandler.cpp \ + Networking/DispatchMessageHandler.cpp \ NumericalMethod.cpp \ ObjectModel.cpp \ ObjectRangeInfo.cpp \ Added: trunk/CSP/CSPSim/Source/Networking/DispatchMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/DispatchMessageHandler.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/Networking/DispatchMessageHandler.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -0,0 +1,72 @@ +#include "Networking.h" +#include "DynamicObject.h" + +#include "Config.h" +#include <SimData/FileUtility.h> + +extern SimpleConfig g_Config; +DispatchMessageHandler::DispatchMessageHandler() +{ + _addr = 0; + _port = 0; +} + +DispatchMessageHandler::~DispatchMessageHandler() +{ + +} + +void DispatchMessageHandler::process(NetworkMessage * message, NetworkMessenger * messenger) +{ + NetworkNode * node = message->getOriginatorNode(); + unsigned int addr = node->getAddress().getAddress().s_addr; + unsigned short port = node->getPort(); + if (isLocal(addr, port)) + return; + simdata::uint16 messageType = message->getType(); + + void * ptr = message->getPayloadPtr(); + ObjectUpdateMessagePayload * messagePayload = (ObjectUpdateMessagePayload*)ptr; + + unsigned int objectID = messagePayload->id; + unsigned int objectType = messagePayload->id; + + RemoteObjectWrapper * remoteObjectWrapper = m_RemoteObjectTable.getRemoteObject( + addr, port, objectID ); + + if (remoteObjectWrapper == NULL) + { + // TODO create new object and add it to table. + // + // set remoteObjectWrapper to value of new object. + simdata::Ref<DynamicObject> obj = addRemoteObject(message); + RemoteObjectWrapper * remoteObjectWrapper = new RemoteObjectWrapper(obj); + // TODO add new object to wrapper object + m_RemoteObjectTable.putRemoteObject( addr, port, objectID, remoteObjectWrapper ); + } + simdata::Ref<DynamicObject> object = remoteObjectWrapper->getWrappedObject(); + object->putUpdateMessage(message); + + +} + +bool DispatchMessageHandler::isLocal(unsigned int addr, unsigned short port) +{ + return ((_addr == addr) && (_port == port)); +} + + +simdata::Ref<DynamicObject> DispatchMessageHandler::addRemoteObject( NetworkMessage * message ) +{ + CSP_LOG(APP, DEBUG, "DispatchMessageHandler::addRemoteObject() - adding new object"); + + // use hard coded mirage for now. + std::string vehicle = g_Config.getPath("Testing", "Vehicle", "sim:vehicles.aircraft.m2k", false); + simdata::Ref<DynamicObject> ao = _dataManager.getObject(vehicle.c_str()); + assert(ao.valid()); + + ao->putUpdateMessage(message); + + _virtualBattlefield->addUnit(ao); + return ao; +} Modified: trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -29,6 +29,16 @@ #include "Networking.h" +EchoMessageHandler::EchoMessageHandler() +{ + +} + +EchoMessageHandler::~EchoMessageHandler() +{ + +} + void EchoMessageHandler::process(NetworkMessage * message, NetworkMessenger * messenger) { Modified: trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -46,7 +46,7 @@ m_messageReceiveArrayCount = 0; m_messageReceiveArray.reserve(m_messageReceiveArrayMax); - m_ReceiveHandler = NULL; +// m_ReceiveHandler = NULL; } NetworkMessenger::NetworkMessenger(NetworkNode * originatorNode) @@ -68,7 +68,7 @@ m_messageReceiveArrayCount = 0; m_messageReceiveArray.reserve(m_messageReceiveArrayMax); - m_ReceiveHandler = NULL; +// m_ReceiveHandler = NULL; } //NetworkMessenger::NetworkMessenger(ost::InetAddress & addr, Port port) @@ -138,8 +138,14 @@ NetworkMessage * networkMessage = receiveMessage(); if ( networkMessage ) { - if ( m_ReceiveHandler ) - m_ReceiveHandler->process(networkMessage, this); + std::list<NetworkMessageHandler *>::iterator iter = m_ReceiveHandlerList.begin(); + std::list<NetworkMessageHandler *>::const_iterator end = m_ReceiveHandlerList.end(); + for (;iter != end ; ++iter) { + NetworkMessageHandler * handler = (NetworkMessageHandler*)(*iter); + if (handler != NULL) { + handler->process(networkMessage, this); + } + } } else return; @@ -158,7 +164,7 @@ void NetworkMessenger::registerReceiveHandler(NetworkMessageHandler * handler) { - m_ReceiveHandler = handler; + m_ReceiveHandlerList.push_back(handler); } Modified: trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -30,6 +30,17 @@ #include "Networking.h" #include <stdio.h> +PrintMessageHandler::PrintMessageHandler() +{ + m_frequency = 1; + m_count = 0; +} + +PrintMessageHandler::~PrintMessageHandler() +{ + +} + void PrintMessageHandler::process(NetworkMessage * message, NetworkMessenger * messenger) { if (m_count % m_frequency == 0) Modified: trunk/CSP/CSPSim/Source/SimObject.cpp =================================================================== --- trunk/CSP/CSPSim/Source/SimObject.cpp 2004-06-13 14:36:27 UTC (rev 1033) +++ trunk/CSP/CSPSim/Source/SimObject.cpp 2004-06-13 14:37:10 UTC (rev 1034) @@ -37,11 +37,14 @@ SIMDATA_REGISTER_INTERFACE(SimObject) +unsigned int SimObject::localObjectInstance = 0; SimObject::SimObject() { CSP_LOG(APP, DEBUG, "SimObject::SimObject()" ); + m_ID = ++SimObject::localObjectInstance; + m_Type = 1; // TODO change this m_Flags = 0; setAggregateFlag(true); |