|
From: <sv...@ww...> - 2004-05-17 02:14:28
|
Author: wolverine
Date: 2004-05-16 19:14:21 -0700 (Sun, 16 May 2004)
New Revision: 955
Modified:
trunk/CSP/CSPSim/CHANGES.current
trunk/CSP/CSPSim/Data/CSPSim.ini
trunk/CSP/CSPSim/Include/CSPSim.h
trunk/CSP/CSPSim/Include/Networking.h
trunk/CSP/CSPSim/Source/CSPSim.cpp
trunk/CSP/CSPSim/Source/ClientNode.cpp
trunk/CSP/CSPSim/Source/DynamicObject.cpp
trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp
trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp
trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp
trunk/CSP/CSPSim/Source/Networking/NetworkNode.cpp
trunk/CSP/CSPSim/Source/ServerNode.cpp
Log:
Networking changes
Modified: trunk/CSP/CSPSim/CHANGES.current
===================================================================
--- trunk/CSP/CSPSim/CHANGES.current 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/CHANGES.current 2004-05-17 02:14:21 UTC (rev 955)
@@ -1,6 +1,12 @@
Version 0.4.0 (in progress)
===========================
+2004-05-16: wolverine
+ * changes to networking include configuration from CSPSim.ini
+ which includes ports, server node, option to disable/enable
+ networking. Also removed a few extra printf statesments.
+ Added NetworkMessage pooling/memory manage.
+
2004-05-15: wolverine
* Changes to and cleanup to networking code.
Modified: trunk/CSP/CSPSim/Data/CSPSim.ini
===================================================================
--- trunk/CSP/CSPSim/Data/CSPSim.ini 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Data/CSPSim.ini 2004-05-17 02:14:21 UTC (rev 955)
@@ -36,8 +36,9 @@
Date = 2004-05-09 12:00:00
[Networking]
+UseNetworking = true
LocalMessagePort = 3150
-LocalMessageHost = 127.0.0.1
+LocalMessageHost = 127.0.0.1
RemoteMessagePort = 3160
RemoteMessageHost = 127.0.0.1
Modified: trunk/CSP/CSPSim/Include/CSPSim.h
===================================================================
--- trunk/CSP/CSPSim/Include/CSPSim.h 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Include/CSPSim.h 2004-05-17 02:14:21 UTC (rev 955)
@@ -183,7 +183,8 @@
NetworkMessenger * m_NetworkMessenger;
NetworkNode * m_RemoteServerNode;
NetworkNode * m_localNode;
-
+ bool b_networkingFlag;
+
osg::ref_ptr<Producer::RenderSurface> m_RenderSurface;
};
Modified: trunk/CSP/CSPSim/Include/Networking.h
===================================================================
--- trunk/CSP/CSPSim/Include/Networking.h 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Include/Networking.h 2004-05-17 02:14:21 UTC (rev 955)
@@ -78,7 +78,8 @@
simdata::uint16 getPayloadLen();
Port getOriginatorPort();
-
+ NetworkNode * getOriginatorNode();
+
bool isInitialized();
bool isHeaderValid();
@@ -110,6 +111,7 @@
public:
NetworkNode();
NetworkNode(int node_id, ost::InetHostAddress addr, Port port);
+ NetworkNode(int node_id, simdata::uint32 addr, Port port);
NetworkNode(int node_id, const char * hostname, Port port);
@@ -120,6 +122,7 @@
short getId();
Port getPort();
ost::InetHostAddress getAddress();
+ const char * getHostname();
};
@@ -153,7 +156,8 @@
MessageSocketDuplex * m_messageSocketDuplex;
std::list<NetworkMessage*> m_messageList;
NetworkNode * m_orginatorNode;
-
+ std::list<NetworkMessage*> m_messagePool;
+
public:
NetworkMessenger();
Modified: trunk/CSP/CSPSim/Source/CSPSim.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/CSPSim.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/CSPSim.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -153,6 +153,7 @@
m_NetworkMessenger = NULL;
m_RemoteServerNode = NULL;
m_localNode = NULL;
+ b_networkingFlag = false;
}
@@ -414,6 +415,7 @@
m_GameScreen->onInit();
// create the networking layer
+ b_networkingFlag = g_Config.getBool("Networking", "UseNetworking", false, true);
int localMessagePort = g_Config.getInt("Networking", "LocalMessagePort", 10000, true);
CSP_LOG(APP, DEBUG, "init() - Creating Message listener on port: " << localMessagePort);
std::string remoteAddr = g_Config.getString("Networking", "RemoteMessageHost", "127.0.0.1", true);
@@ -716,20 +718,20 @@
// be moved elsewhere. Currently commenting out so we can move to subversion.
CSP_LOG(APP, DEBUG, "CSPSim::run... beginning network updates");
- simdata::Ref<DynamicObject> dynamicObject = (simdata::Ref<DynamicObject>)m_ActiveObject;
- NetworkMessage * message = dynamicObject->getUpdateMessage();
+ if (b_networkingFlag)
+ {
+ simdata::Ref<DynamicObject> dynamicObject = (simdata::Ref<DynamicObject>)m_ActiveObject;
+ NetworkMessage * message = dynamicObject->getUpdateMessage();
- CSP_LOG(APP, DEBUG, "CSPSim::run... queuing test network updates");
- m_NetworkMessenger->queueMessage(m_RemoteServerNode, message);
- m_NetworkMessenger->sendMessages();
- m_NetworkMessenger->receiveMessages();
+// CSP_LOG(APP, DEBUG, "CSPSim::run... queuing test network updates");
+ m_NetworkMessenger->queueMessage(m_RemoteServerNode, message);
+ m_NetworkMessenger->sendMessages();
+ m_NetworkMessenger->receiveMessages();
-// dynamicObject->putUpdateMessage( message );
- CSP_LOG(APP, DEBUG, "CSPSim::run... finished network updates");
-
+// CSP_LOG(APP, DEBUG, "CSPSim::run... finished network updates");
+ }
// this may not be necessary. especially if a memory pool of messages objects is used.
-// delete message;
}
Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -2,6 +2,7 @@
#include "ClientNode.h"
#include <stdio.h>
#include <stdlib.h>
+#include "Config.h"
ClientNode::ClientNode()
{
@@ -11,18 +12,24 @@
int ClientNode::run()
{
printf("Network test client starting up...\n");
- Port localPort = 3150;
- Port remotePort = 3160;
- NetworkNode localNode(1, "localhost", localPort);
- NetworkNode remoteNode(1, "localhost", remotePort);
- NetworkMessenger * messenger = new NetworkMessenger(&localNode);
- NetworkMessage * message = messenger->getMessageFromPool(1, 100);
+ Port localPort = g_Config.getInt("Networking", "LocalMessagePort", 10000, true);
+ std::string localHost = g_Config.getString("Networking", "LocalMessageHost", "127.0.0.1", true);
+
+ Port remotePort = (Port)g_Config.getInt("Networking", "RemoteMessagePort", 0, true);
+ std::string remoteHost = g_Config.getString("Networking", "RemoteMessageHost", "127.0.0.1", true);
+
+
+ NetworkNode * remoteNode = new NetworkNode(1, remoteHost.c_str(), remotePort );
+ NetworkNode * localNode = new NetworkNode(1, localHost.c_str(), localPort);
+ NetworkMessenger * networkMessenger = new NetworkMessenger(localNode);
+
+ NetworkMessage * message = networkMessenger->getMessageFromPool(1, 100);
char * payloadPtr = (char*)message->getPayloadPtr();
memset(payloadPtr, 0 , 100);
strcpy(payloadPtr, "Hello From CSP Network Test Client!");
Port port = message->getOriginatorPort();
- messenger->queueMessage(&remoteNode, message);
- messenger->sendMessages();
+ networkMessenger->queueMessage(remoteNode, message);
+ networkMessenger->sendMessages();
return 0;
}
Modified: trunk/CSP/CSPSim/Source/DynamicObject.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -403,7 +403,7 @@
unsigned char * ptrBuf = (unsigned char*)message->getPayloadPtr();
- printf("Generating network update message for object id: %d\n", m_ID);
+// printf("Generating network update message for object id: %d\n", m_ID);
memcpy((void*)ptrBuf, (void*)&m_ID, sizeof(unsigned int)); ptrBuf += sizeof(unsigned int);
simdata::SimTime timeStamp = CSPSim::theSim->getElapsedTime();
@@ -448,11 +448,11 @@
// verify we have the correct id in the packet for this object.
if (m_ID == idValue)
{
- printf("Loading update message of object %d\n", m_ID);
+// printf("Loading update message of object %d\n", m_ID);
}
else
{
- printf("Error loading update message, object id (%d) does not match\n", idValue);
+// printf("Error loading update message, object id (%d) does not match\n", idValue);
}
// get timestamp
Modified: trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -74,8 +74,8 @@
// get addr of next packet
Port port;
ost::InetHostAddress addr = m_UDPReceiverSocket->getPeer(&port);
- printf("MessageSocketDuplex::recvfrom() - port: %d\n", port);
- printf("MessageSocketDuplex::recvfrom() - hostname: %s\n", addr.getHostname());
+ //printf("MessageSocketDuplex::recvfrom() - port: %d\n", port);
+// printf("MessageSocketDuplex::recvfrom() - hostname: %s\n", addr.getHostname());
// peek at packet to verify this is a valid CSP packet. and if so get the packet type.
Modified: trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -140,3 +140,7 @@
return m_header.m_port;
}
+NetworkNode * NetworkMessage::getOriginatorNode()
+{
+ return new NetworkNode(m_header.m_id, m_header.m_ipaddr, m_header.m_port);
+}
Modified: trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -50,19 +50,28 @@
void NetworkMessenger::sendMessages()
{
CSP_LOG(APP, DEBUG, "NetworkMessenger::sendMessages()");
- std::list<NetworkMessage*>::iterator i = m_messageList.begin();
- std::list<NetworkMessage*>::const_iterator end = m_messageList.end();
- for ( ; i != end ; ++i )
+ while(!m_messageList.empty())
{
- m_messageSocketDuplex->sendto((*i), g_node);
+ NetworkMessage * message = m_messageList.front();
+ m_messageSocketDuplex->sendto(message, g_node);
+ m_messageList.pop_front();
+ returnMessageToPool(message);
+
}
+// std::list<NetworkMessage*>::iterator i = m_messageList.begin();
+// std::list<NetworkMessage*>::const_iterator end = m_messageList.end();
+// for ( ; i != end ; ++i )
+// {
+// m_messageSocketDuplex->sendto((*i), g_node);
+// }
}
void NetworkMessenger::receiveMessages()
{
CSP_LOG(APP, DEBUG, "NetworkMessenger::ReceiveMessage()");
-
+ NetworkMessage * networkMessageHandle;
+ m_messageSocketDuplex->recvfrom(&networkMessageHandle);
}
NetworkNode * NetworkMessenger::getOrginatorNode()
@@ -79,8 +88,18 @@
// buffer then cast it to a NetworkMessage pointer.
NetworkMessage * NetworkMessenger::getMessageFromPool(int messageType, int payloadLen)
{
- simdata::uint8 * buffer = new simdata::uint8[NETWORK_PACKET_SIZE];
- NetworkMessage * message = (NetworkMessage*)buffer;
+ printf("NetworkMessenger::getMessageFromPool() - CurrentPoolSize: %d\n", m_messagePool.size());
+ if (m_messagePool.empty())
+ {
+ for(int i=0;i<100;i++)
+ {
+ simdata::uint8 * buffer = new simdata::uint8[NETWORK_PACKET_SIZE];
+ NetworkMessage * message = (NetworkMessage*)buffer;
+ m_messagePool.push_back(message);
+ }
+ }
+ NetworkMessage * message = m_messagePool.front();
+ m_messagePool.pop_front();
message->initialize( messageType, payloadLen, m_orginatorNode);
return message;
}
@@ -88,7 +107,8 @@
// cast the NetworkMessage pointer back to a binary buffer then free the buffer.
void NetworkMessenger::returnMessageToPool(NetworkMessage * message)
{
- simdata::uint8 * buffer = (simdata::uint8 *)message;
- delete buffer;
+ printf("NetworkMessenger::returnMessageToPool() - CurrentPoolSize: %d\n", m_messagePool.size());
+ m_messagePool.push_back(message);
}
+
Modified: trunk/CSP/CSPSim/Source/Networking/NetworkNode.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/Networking/NetworkNode.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/Networking/NetworkNode.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -47,6 +47,14 @@
m_port = port;
}
+NetworkNode::NetworkNode(int node_id, simdata::uint32 addr, Port port)
+{
+ m_node_id = node_id;
+ struct in_addr my_in_addr;
+ my_in_addr.s_addr = addr;
+ m_addr = ost::InetHostAddress(my_in_addr);
+ m_port = port;
+}
void NetworkNode::setAddress(ost::InetHostAddress addr)
{
m_addr = addr;
@@ -77,3 +85,7 @@
return m_node_id;
}
+const char * NetworkNode::getHostname()
+{
+ m_addr.getHostname();
+}
Modified: trunk/CSP/CSPSim/Source/ServerNode.cpp
===================================================================
--- trunk/CSP/CSPSim/Source/ServerNode.cpp 2004-05-16 03:05:34 UTC (rev 954)
+++ trunk/CSP/CSPSim/Source/ServerNode.cpp 2004-05-17 02:14:21 UTC (rev 955)
@@ -5,6 +5,7 @@
#ifndef WIN32
#include <unistd.h>
#endif
+#include "Config.h"
ServerNode::ServerNode()
{
@@ -13,23 +14,27 @@
int ServerNode::run()
{
- printf("Network test client starting up...\n");
- Port remotePort = 3150;
- Port localPort = 3160;
- unsigned short messageLen = 512;
- NetworkNode * remoteNode;
- NetworkNode localNode(1, "localhost", localPort);
+ printf("Network test server starting up...\n");
+ Port remotePort = g_Config.getInt("Networking", "LocalMessagePort", 10000, true);
+ std::string remoteHost = g_Config.getString("Networking", "LocalMessageHost", "127.0.0.1", true);
- MessageSocketDuplex * socket = new MessageSocketDuplex(localPort);
+ Port localPort = (Port)g_Config.getInt("Networking", "RemoteMessagePort", 0, true);
+ std::string localHost = g_Config.getString("Networking", "RemoteMessageHost", "127.0.0.1", true);
+
+ NetworkNode * remoteNode = new NetworkNode(1, remoteHost.c_str(), remotePort );
+ NetworkNode * localNode = new NetworkNode(1, localHost.c_str(), localPort);
+
+ MessageSocketDuplex * socketDuplex = new MessageSocketDuplex(localPort);
NetworkMessage * message=NULL;
while(1)
{
- int numreceived = socket->recvfrom(&message);
+ int numreceived = socketDuplex->recvfrom(&message);
if (numreceived > 0)
{
- Port port = message->getOriginatorPort();
+ NetworkNode * node = message->getOriginatorNode();
printf("Received Data From Client:\n");
- printf("Client port: %d\n", port);
+ printf("Client addr: %s\n", node->getHostname());
+ printf("Client port: %d\n", node->getPort());
}
else
{
|