You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(47) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(140) |
Feb
(98) |
Mar
(152) |
Apr
(104) |
May
(71) |
Jun
(94) |
Jul
(169) |
Aug
(83) |
Sep
(47) |
Oct
(134) |
Nov
(7) |
Dec
(20) |
2004 |
Jan
(41) |
Feb
(14) |
Mar
(42) |
Apr
(47) |
May
(68) |
Jun
(143) |
Jul
(65) |
Aug
(29) |
Sep
(40) |
Oct
(34) |
Nov
(33) |
Dec
(97) |
2005 |
Jan
(29) |
Feb
(30) |
Mar
(9) |
Apr
(37) |
May
(13) |
Jun
(31) |
Jul
(22) |
Aug
(23) |
Sep
|
Oct
(37) |
Nov
(34) |
Dec
(117) |
2006 |
Jan
(48) |
Feb
(6) |
Mar
(2) |
Apr
(71) |
May
(10) |
Jun
(16) |
Jul
(7) |
Aug
(1) |
Sep
(14) |
Oct
(17) |
Nov
(25) |
Dec
(26) |
2007 |
Jan
(8) |
Feb
(2) |
Mar
(7) |
Apr
(26) |
May
|
Jun
(12) |
Jul
(30) |
Aug
(14) |
Sep
(9) |
Oct
(4) |
Nov
(7) |
Dec
(6) |
2008 |
Jan
(10) |
Feb
(10) |
Mar
(6) |
Apr
(8) |
May
|
Jun
(10) |
Jul
(18) |
Aug
(15) |
Sep
(16) |
Oct
(5) |
Nov
(3) |
Dec
(10) |
2009 |
Jan
(11) |
Feb
(2) |
Mar
|
Apr
(15) |
May
(31) |
Jun
(18) |
Jul
(11) |
Aug
(26) |
Sep
(52) |
Oct
(17) |
Nov
(4) |
Dec
|
2010 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@ww...> - 2004-06-12 22:15:05
|
Author: mkrose Date: 2004-06-12 15:14:57 -0700 (Sat, 12 Jun 2004) New Revision: 1024 Modified: trunk/CSP/SimData/CHANGES.current trunk/CSP/SimData/Include/SimData/Ref.h Log: Don't throw on invalid pointer assignments. Callers must check that the result of an assignments in not null. Modified: trunk/CSP/SimData/CHANGES.current =================================================================== --- trunk/CSP/SimData/CHANGES.current 2004-06-12 20:52:36 UTC (rev 1023) +++ trunk/CSP/SimData/CHANGES.current 2004-06-12 22:14:57 UTC (rev 1024) @@ -1,6 +1,13 @@ Version 0.4.0 (in progress) =========================== +2004-06-12: onsight + * Commented out throw statement for assignment to Ref<> from an + incompatible type. Callers must check that the ref is not null + after assignment. + + * Added isNull() method to Ref. + 2004-16-12: wolverine * added a MemoryWriter class to write out a SimData object to a binary memory buffer. Added a MemoryReader class. Added Modified: trunk/CSP/SimData/Include/SimData/Ref.h =================================================================== --- trunk/CSP/SimData/Include/SimData/Ref.h 2004-06-12 20:52:36 UTC (rev 1023) +++ trunk/CSP/SimData/Include/SimData/Ref.h 2004-06-12 22:14:57 UTC (rev 1024) @@ -248,6 +248,12 @@ inline bool valid() const { return _reference != 0; } + + /** Test for null pointer. + */ + inline bool isNull() const { + return _reference == 0; + } /** Comparison with other simdata pointers. */ @@ -299,7 +305,7 @@ _reference = dynamic_cast<CLASS*>(ptr); if (_reference == 0 && ptr != 0) { SIMDATA_LOG(LOG_ALL, LOG_ERROR, "simdata::Ref() assignment: incompatible types (dynamic cast failed)."); - throw ConversionError(); + //throw ConversionError(); } } |
From: <sv...@ww...> - 2004-06-12 20:52:43
|
Author: wolverine Date: 2004-06-12 13:52:36 -0700 (Sat, 12 Jun 2004) New Revision: 1023 Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp 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/ServerNode.cpp Log: Added a NetworkMessenger parameter to the process method of NetworkMessageHandler Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp =================================================================== --- trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-12 20:52:25 UTC (rev 1022) +++ trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-12 20:52:36 UTC (rev 1023) @@ -60,6 +60,9 @@ NetworkNode * remoteNode = new NetworkNode(1, remoteHost.c_str(), remotePort ); NetworkNode * localNode = new NetworkNode(1, localHost.c_str(), localPort); NetworkMessenger * networkMessenger = new NetworkMessenger(localNode); + PrintMessageHandler * printMessageHandler = new PrintMessageHandler(); + printMessageHandler->setFrequency(1); + networkMessenger->registerReceiveHandler(printMessageHandler); unsigned short messageType = 2; unsigned short payloadLen = sizeof(int) + sizeof(double) + 3*sizeof(simdata::Vector3) + @@ -116,8 +119,12 @@ ptrPayload->dump(); networkMessenger->queueMessage(remoteNode, message); - networkMessenger->sendQueuedMessages(); + while(1) + { + networkMessenger->sendQueuedMessages(); + networkMessenger->receiveMessages(); + } return 0; } Modified: trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp 2004-06-12 20:52:25 UTC (rev 1022) +++ trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp 2004-06-12 20:52:36 UTC (rev 1023) @@ -29,9 +29,20 @@ #include "Networking.h" -void EchoMessageHandler::process(NetworkMessage * message) +void EchoMessageHandler::process(NetworkMessage * message, NetworkMessenger * messenger) { + NetworkNode * originatorNode = message->getOriginatorNode(); + + // must make a copy of the message since the buffer in the parameter will be returned + // to the pool after this function exists. + NetworkMessage * messageCopy = messenger->allocMessageBuffer(); + memcpy( (void*)messageCopy, (void*)message, 512); + + MessageHeader * header = (MessageHeader*)messageCopy; + ObjectUpdateMessagePayload * ptrPayload = (ObjectUpdateMessagePayload*)messageCopy->getPayloadPtr(); + + messenger->queueMessage(originatorNode, messageCopy); } Modified: trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-06-12 20:52:25 UTC (rev 1022) +++ trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-06-12 20:52:36 UTC (rev 1023) @@ -139,7 +139,7 @@ NetworkMessage * networkMessage = receiveMessage(); if ( networkMessage ) { if ( m_ReceiveHandler ) - m_ReceiveHandler->process(networkMessage); + m_ReceiveHandler->process(networkMessage, this); } else return; Modified: trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp 2004-06-12 20:52:25 UTC (rev 1022) +++ trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp 2004-06-12 20:52:36 UTC (rev 1023) @@ -30,7 +30,7 @@ #include "Networking.h" #include <stdio.h> -void PrintMessageHandler::process(NetworkMessage * message) +void PrintMessageHandler::process(NetworkMessage * message, NetworkMessenger * messenger) { if (m_count % m_frequency == 0) { Modified: trunk/CSP/CSPSim/Source/ServerNode.cpp =================================================================== --- trunk/CSP/CSPSim/Source/ServerNode.cpp 2004-06-12 20:52:25 UTC (rev 1022) +++ trunk/CSP/CSPSim/Source/ServerNode.cpp 2004-06-12 20:52:36 UTC (rev 1023) @@ -48,9 +48,12 @@ NetworkNode * localNode = new NetworkNode(1, localHost.c_str(), localPort); NetworkMessenger * networkMessenger = new NetworkMessenger(localNode); - PrintMessageHandler * printMessageHandler = new PrintMessageHandler(); - printMessageHandler->setFrequency(1); - networkMessenger->registerReceiveHandler(printMessageHandler); +// PrintMessageHandler * printMessageHandler = new PrintMessageHandler(); +// printMessageHandler->setFrequency(1); +// networkMessenger->registerReceiveHandler(printMessageHandler); + + EchoMessageHandler * echoMessageHandler = new EchoMessageHandler(); + networkMessenger->registerReceiveHandler(echoMessageHandler); //MessageSocketDuplex * socketDuplex = new MessageSocketDuplex(localPort); NetworkMessage * message=NULL; @@ -60,7 +63,7 @@ networkMessenger->receiveMessages(); networkMessenger->sendQueuedMessages(); #ifndef WIN32 - ::sleep(1); + // ::sleep(1); #endif } |
From: <sv...@ww...> - 2004-06-12 20:52:32
|
Author: wolverine Date: 2004-06-12 13:52:25 -0700 (Sat, 12 Jun 2004) New Revision: 1022 Modified: trunk/CSP/CSPSim/Include/Networking.h Log: Added a NetworkMessenger parameter to the process method of NetworkMessageHandler Modified: trunk/CSP/CSPSim/Include/Networking.h =================================================================== --- trunk/CSP/CSPSim/Include/Networking.h 2004-06-12 18:29:08 UTC (rev 1021) +++ trunk/CSP/CSPSim/Include/Networking.h 2004-06-12 20:52:25 UTC (rev 1022) @@ -195,33 +195,6 @@ //#endif -class NetworkMessageHandler -{ - public: - virtual void process(NetworkMessage * message) = 0; -}; - -class EchoMessageHandler : public NetworkMessageHandler -{ - - public: - virtual void process(NetworkMessage * message); - -}; - -class PrintMessageHandler : public NetworkMessageHandler -{ - protected: - int m_frequency; - int m_count; - public: - PrintMessageHandler() { m_frequency = 1; m_count = 0;} - virtual void process(NetworkMessage * message); - - void setFrequency(int frequency) { m_frequency = frequency; } - int getFrequency() { return m_frequency; } -}; - class NetworkMessagePool { // private: @@ -294,6 +267,7 @@ }; +class NetworkMessageHandler; class NetworkMessenger { @@ -351,6 +325,33 @@ }; +class NetworkMessageHandler +{ + public: + virtual void process(NetworkMessage * message, NetworkMessenger * messenger) = 0; +}; + +class EchoMessageHandler : public NetworkMessageHandler +{ + + public: + virtual void process(NetworkMessage * message, NetworkMessenger * messenger); + +}; + +class PrintMessageHandler : public NetworkMessageHandler +{ + protected: + int m_frequency; + int m_count; + public: + PrintMessageHandler() { m_frequency = 1; m_count = 0;} + virtual void process(NetworkMessage * message, NetworkMessenger * messenger); + + void setFrequency(int frequency) { m_frequency = frequency; } + int getFrequency() { return m_frequency; } +}; + // not currently using these below class NetworkBroadcaster |
From: <sv...@ww...> - 2004-06-12 18:29:16
|
Author: wolverine Date: 2004-06-12 11:29:08 -0700 (Sat, 12 Jun 2004) New Revision: 1021 Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp trunk/CSP/CSPSim/Source/DynamicObject.cpp Log: Changed network code to use MemoryReader in SimData Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp =================================================================== --- trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-12 18:28:52 UTC (rev 1020) +++ trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-12 18:29:08 UTC (rev 1021) @@ -99,8 +99,8 @@ // ptrPayload->timeStamp = 1.0; simdata::MemoryWriter writer((simdata::uint8 *)ptrPayload); - writer << (int)id; - writer << (int)type; + writer << id; + writer << type; writer << timestamp; // b_GlobalPosition->value().writeBinary((unsigned char *)&(ptrPayload->globalPosition),24); Modified: trunk/CSP/CSPSim/Source/DynamicObject.cpp =================================================================== --- trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-12 18:28:52 UTC (rev 1020) +++ trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-12 18:29:08 UTC (rev 1021) @@ -405,9 +405,9 @@ // b_Attitude->value().writeBinary((unsigned char *)&(ptrPayload->attitude),32); simdata::MemoryWriter writer((simdata::uint8*)ptrPayload); - writer << (int)m_ID; + writer << m_ID; simdata::uint32 objType = 1; - writer << (int)objType; + writer << objType; writer << CSPSim::theSim->getElapsedTime(); b_GlobalPosition->value().serialize(writer); b_LinearVelocity->value().serialize(writer); @@ -441,11 +441,23 @@ //ptrPayload->timeStamp = CSPSim::theSim->getElapsedTime(); // //load the other values. - b_GlobalPosition->value().readBinary((unsigned char*)&(ptrPayload->globalPosition),24); - b_LinearVelocity->value().readBinary((unsigned char *)&(ptrPayload->linearVelocity),24); - b_AngularVelocity->value().readBinary((unsigned char *)&(ptrPayload->angularVelocity),24); - b_Attitude->value().readBinary((unsigned char *)&(ptrPayload->attitude),32); + //b_GlobalPosition->value().readBinary((unsigned char*)&(ptrPayload->globalPosition),24); + //b_LinearVelocity->value().readBinary((unsigned char *)&(ptrPayload->linearVelocity),24); + //b_AngularVelocity->value().readBinary((unsigned char *)&(ptrPayload->angularVelocity),24); + //b_Attitude->value().readBinary((unsigned char *)&(ptrPayload->attitude),32); + unsigned int _id; + unsigned _type; + float _timestamp; + + simdata::MemoryReader reader((simdata::uint8*)ptrPayload); + reader >> _id; + reader >> _type; + reader >> _timestamp; + b_GlobalPosition->value().serialize(reader); + b_LinearVelocity->value().serialize(reader); + b_AngularVelocity->value().serialize(reader); + b_Attitude->value().serialize(reader); } |
From: <sv...@ww...> - 2004-06-12 18:28:58
|
Author: wolverine Date: 2004-06-12 11:28:52 -0700 (Sat, 12 Jun 2004) New Revision: 1020 Modified: trunk/CSP/CSPSim/CHANGES.current Log: Changed network code to use MemoryReader in SimData Modified: trunk/CSP/CSPSim/CHANGES.current =================================================================== --- trunk/CSP/CSPSim/CHANGES.current 2004-06-12 18:26:58 UTC (rev 1019) +++ trunk/CSP/CSPSim/CHANGES.current 2004-06-12 18:28:52 UTC (rev 1020) @@ -3,6 +3,8 @@ 2004-06-12: wolverine * Switching the writing of network buffers to use a SimData MemoryWriter. + Switched the code that reads network buffers to use a SimData + MemoryReader 2004-06-10: wolverine * Merged the networking classes MessageSocketDuplex into |
From: <sv...@ww...> - 2004-06-12 18:27:09
|
Author: wolverine Date: 2004-06-12 11:26:58 -0700 (Sat, 12 Jun 2004) New Revision: 1019 Modified: trunk/CSP/SimData/CHANGES.current trunk/CSP/SimData/Include/SimData/Archive.h Log: Added a MemoryReader class to Archive.h Modified: trunk/CSP/SimData/CHANGES.current =================================================================== --- trunk/CSP/SimData/CHANGES.current 2004-06-12 12:28:47 UTC (rev 1018) +++ trunk/CSP/SimData/CHANGES.current 2004-06-12 18:26:58 UTC (rev 1019) @@ -3,7 +3,9 @@ 2004-16-12: wolverine * added a MemoryWriter class to write out a SimData object to - a binary memory buffer. + a binary memory buffer. Added a MemoryReader class. Added + unsigned methods to all the Reader and Writer classes in Archive + which fixes a compile error. 2004-06-12: delta * Added Properties.h to SimData.vcproj header folder. Modified: trunk/CSP/SimData/Include/SimData/Archive.h =================================================================== --- trunk/CSP/SimData/Include/SimData/Archive.h 2004-06-12 12:28:47 UTC (rev 1018) +++ trunk/CSP/SimData/Include/SimData/Archive.h 2004-06-12 18:26:58 UTC (rev 1019) @@ -85,6 +85,9 @@ virtual Reader& operator>>(char &x)=0; virtual Reader& operator>>(short &x)=0; virtual Reader& operator>>(int &x)=0; + virtual Reader& operator>>(unsigned char &x)=0; + virtual Reader& operator>>(unsigned short &x)=0; + virtual Reader& operator>>(unsigned int &x)=0; virtual Reader& operator>>(bool &x)=0; virtual Reader& operator>>(float &x)=0; virtual Reader& operator>>(double &x)=0; @@ -127,6 +130,21 @@ (*self) >> y; return y; } + unsigned int _uint() { + unsigned int y; + (*self) >> y; + return y; + } + unsigned short _ushort() { + unsigned short y; + (*self) >> y; + return y; + } + unsigned char _uchar() { + unsigned char y; + (*self) >> y; + return y; + } hasht _hasht() { simdata::hasht y; (*self) >> y; @@ -206,6 +224,9 @@ virtual Writer& operator<<(const char)=0; virtual Writer& operator<<(const short)=0; virtual Writer& operator<<(const int)=0; + virtual Writer& operator<<(const unsigned char)=0; + virtual Writer& operator<<(const unsigned short)=0; + virtual Writer& operator<<(const unsigned int)=0; virtual Writer& operator<<(const bool)=0; virtual Writer& operator<<(const float)=0; virtual Writer& operator<<(const double)=0; @@ -224,6 +245,9 @@ void _int(int x) { (*self) << x; } void _short(short x) { (*self) << x; } void _char(char x) { (*self) << x; } + void _uint(unsigned int x) { (*self) << x; } + void _ushort(unsigned short x) { (*self) << x; } + void _uchar(unsigned char x) { (*self) << x; } void _hasht(hasht const &x) { (*self) << x; } void _string(std::string const &x) { (*self) << x; } void _basetype(BaseType const &x) { (*self) << x; } @@ -277,6 +301,18 @@ write(&x, sizeof(x)); _n += sizeof(x); return *this; } + Writer& operator<<(const unsigned char x) { + write(&x, sizeof(x)); _n += sizeof(x); + return *this; + } + Writer& operator<<(const unsigned short x) { + write(&x, sizeof(x)); _n += sizeof(x); + return *this; + } + Writer& operator<<(const unsigned int x) { + write(&x, sizeof(x)); _n += sizeof(x); + return *this; + } Writer& operator<<(const bool x) { const char c = x ? 1:0; operator<<(c); @@ -357,6 +393,13 @@ _d += sizeof(int); return *this; } + Reader& operator>>(unsigned int &y) { + _n -= sizeof(unsigned int); + if (_n < 0) throw DataUnderflow(); + memcpy(&y, _d, sizeof(unsigned int)); + _d += sizeof(unsigned int); + return *this; + } Reader& operator>>(bool &y) { char x; operator>>(x); @@ -370,6 +413,13 @@ _d += sizeof(short); return *this; } + Reader& operator>>(unsigned short &y) { + _n -= sizeof(unsigned short); + if (_n < 0) throw DataUnderflow(); + memcpy(&y, _d, sizeof(unsigned short)); + _d += sizeof(unsigned short); + return *this; + } Reader& operator>>(char &y) { _n -= sizeof(char); if (_n < 0) throw DataUnderflow(); @@ -377,6 +427,13 @@ _d += sizeof(char); return *this; } + Reader& operator>>(unsigned char &y) { + _n -= sizeof(unsigned char); + if (_n < 0) throw DataUnderflow(); + memcpy(&y, _d, sizeof(unsigned char)); + _d += sizeof(unsigned char); + return *this; + } Reader& operator>>(hasht &y) { _n -= sizeof(hasht); if (_n < 0) throw DataUnderflow(); @@ -442,6 +499,21 @@ _n += sizeof(int); return *this; } + Writer& operator<<(const unsigned char x) { + memcpy(_ptr+_n, &x, sizeof(unsigned char)); + _n += sizeof(unsigned char); + return *this; + } + Writer& operator<<(const unsigned short x) { + memcpy(_ptr+_n, &x, sizeof(unsigned short)); + _n += sizeof(unsigned short); + return *this; + } + Writer& operator<<(const unsigned int x) { + memcpy(_ptr+_n, &x, sizeof(x)); + _n += sizeof(int); + return *this; + } Writer& operator<<(const bool x) { const char c = x ? 1:0; operator<<(c); @@ -478,6 +550,94 @@ return *this; } }; + + +class SIMDATA_EXPORT MemoryReader: public Reader { + uint8 * _ptr; + int _n; + //void write(const void* x, int n) { + // fwrite(x, n, 1, _f); + //} +public: + MemoryReader(uint8 * ptr): Reader(), _n(0) { + _ptr = ptr; + assert(_ptr != 0); + } + void resetCount() { _n = 0; } + int getCount() { return _n; } + + Reader& operator>>(char &x) { + memcpy(&x, _ptr+_n, sizeof(char)); + _n += sizeof(char); + return *this; + } + Reader& operator>>(short &x) { + memcpy(&x, _ptr+_n, sizeof(short)); + _n += sizeof(short); + return *this; + } + Reader& operator>>(int &x) { + memcpy(&x, _ptr+_n, sizeof(x)); + _n += sizeof(int); + return *this; + } + Reader& operator>>(unsigned char &x) { + memcpy(&x, _ptr+_n, sizeof(unsigned char)); + _n += sizeof(unsigned char); + return *this; + } + Reader& operator>>(unsigned short &x) { + memcpy(&x, _ptr+_n, sizeof(unsigned short)); + _n += sizeof(unsigned short); + return *this; + } + Reader& operator>>(unsigned int &x) { + memcpy(&x, _ptr+_n, sizeof(x)); + _n += sizeof(int); + return *this; + } + Reader& operator>>(bool &y) { + char x; + operator>>(x); + y = (x != 0); + _n += sizeof(char); + return *this; + } + Reader& operator>>(float &x) { + memcpy(&x, _ptr+_n, sizeof(x)); + _n += sizeof(x); + return *this; + } + Reader& operator>>(double &x) { + memcpy(&x, _ptr+_n, sizeof(x)); + _n += sizeof(x); + return *this; + } + Reader& operator>>(char* &x) { + int n = strlen(x); + operator>>(n); + memcpy(x, _ptr+_n, n); + _n += n; + return *this; + } + Reader& operator>>(BaseType &x) { + x.serialize(*this); + return *this; + } + Reader& operator>>(hasht &x) { + memcpy(&x, _ptr+_n, sizeof(x)); + _n += sizeof(x); + return *this; + } + Reader& operator>>(std::string &y) { + char* c; + operator>>(c); + y.assign(c); + free(c); + return *this; + } +}; + NAMESPACE_SIMDATA_END |
From: <sv...@ww...> - 2004-06-12 12:28:55
|
Author: wolverine Date: 2004-06-12 05:28:47 -0700 (Sat, 12 Jun 2004) New Revision: 1018 Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp trunk/CSP/CSPSim/Source/DynamicObject.cpp Log: Switching Networking to use a MemoryWriter class to load the message. Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp =================================================================== --- trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-12 12:28:21 UTC (rev 1017) +++ trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-12 12:28:47 UTC (rev 1018) @@ -6,6 +6,7 @@ #include "Bus.h" +#include <SimData/Archive.h> #include <SimData/Ref.h> #include <SimData/Date.h> #include <SimData/DataManager.h> @@ -73,6 +74,9 @@ // strcpy(payloadPtr, "Hello From CSP Network Test Client!"); // Port port = message->getOriginatorPort(); + simdata::uint32 id; + simdata::uint32 type; + float timestamp; DataChannel<simdata::Vector3>::Ref b_GlobalPosition; DataChannel<simdata::Vector3>::Ref b_AngularVelocity; DataChannel<simdata::Vector3>::Ref b_LinearVelocity; @@ -83,19 +87,34 @@ b_LinearVelocity = DataChannel<simdata::Vector3>::newLocal(Kinetics::Velocity, simdata::Vector3::ZERO); b_Attitude = DataChannel<simdata::Quat>::newLocal(Kinetics::Attitude, simdata::Quat::IDENTITY); + id = 1; + type = 1; + timestamp = 0.0; b_GlobalPosition->value() = simdata::Vector3(1.0, 1.0, 1.0); b_AngularVelocity->value() = simdata::Vector3(1.0, 1.0, 1.0); b_LinearVelocity->value() = simdata::Vector3(1.0, 1.0, 1.0); b_Attitude->value() = simdata::Quat(1.0, 1.0, 1.0, 0.0); - ptrPayload->id = 1; - ptrPayload->timeStamp = 1.0; - b_GlobalPosition->value().writeBinary((unsigned char *)&(ptrPayload->globalPosition),24); - b_LinearVelocity->value().writeBinary((unsigned char *)&(ptrPayload->linearVelocity),24); - b_AngularVelocity->value().writeBinary((unsigned char *)&(ptrPayload->angularVelocity),24); - b_Attitude->value().writeBinary((unsigned char *)&(ptrPayload->attitude),32); + // ptrPayload->id = 1; + // ptrPayload->timeStamp = 1.0; + simdata::MemoryWriter writer((simdata::uint8 *)ptrPayload); + writer << (int)id; + writer << (int)type; + writer << timestamp; + +// b_GlobalPosition->value().writeBinary((unsigned char *)&(ptrPayload->globalPosition),24); +// b_LinearVelocity->value().writeBinary((unsigned char *)&(ptrPayload->linearVelocity),24); +// b_AngularVelocity->value().writeBinary((unsigned char *)&(ptrPayload->angularVelocity),24); +// b_Attitude->value().writeBinary((unsigned char *)&(ptrPayload->attitude),32); + b_GlobalPosition->value().serialize(writer); + b_LinearVelocity->value().serialize(writer); + b_AngularVelocity->value().serialize(writer); + b_Attitude->value().serialize(writer); + + ptrPayload->dump(); + networkMessenger->queueMessage(remoteNode, message); networkMessenger->sendQueuedMessages(); Modified: trunk/CSP/CSPSim/Source/DynamicObject.cpp =================================================================== --- trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-12 12:28:21 UTC (rev 1017) +++ trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-12 12:28:47 UTC (rev 1018) @@ -397,12 +397,22 @@ NetworkMessage * message = CSPSim::theSim->getNetworkMessenger()->allocMessageBuffer(messageType, payloadLen); ObjectUpdateMessagePayload * ptrPayload = (ObjectUpdateMessagePayload*)message->getPayloadPtr(); - ptrPayload->id = m_ID; - ptrPayload->timeStamp = CSPSim::theSim->getElapsedTime(); - b_GlobalPosition->value().writeBinary((unsigned char *)&(ptrPayload->globalPosition),24); - b_LinearVelocity->value().writeBinary((unsigned char *)&(ptrPayload->linearVelocity),24); - b_AngularVelocity->value().writeBinary((unsigned char *)&(ptrPayload->angularVelocity),24); - b_Attitude->value().writeBinary((unsigned char *)&(ptrPayload->attitude),32); +// ptrPayload->id = m_ID; +// ptrPayload->timeStamp = CSPSim::theSim->getElapsedTime(); +// b_GlobalPosition->value().writeBinary((unsigned char *)&(ptrPayload->globalPosition),24); +// b_LinearVelocity->value().writeBinary((unsigned char *)&(ptrPayload->linearVelocity),24); +// b_AngularVelocity->value().writeBinary((unsigned char *)&(ptrPayload->angularVelocity),24); +// b_Attitude->value().writeBinary((unsigned char *)&(ptrPayload->attitude),32); + + simdata::MemoryWriter writer((simdata::uint8*)ptrPayload); + writer << (int)m_ID; + simdata::uint32 objType = 1; + writer << (int)objType; + writer << CSPSim::theSim->getElapsedTime(); + b_GlobalPosition->value().serialize(writer); + b_LinearVelocity->value().serialize(writer); + b_AngularVelocity->value().serialize(writer); + b_Attitude->value().serialize(writer); CSP_LOG(APP, DEBUG, "DynamicObject::getUpdateMessage() - returning message"); |
From: <sv...@ww...> - 2004-06-12 12:28:27
|
Author: wolverine Date: 2004-06-12 05:28:21 -0700 (Sat, 12 Jun 2004) New Revision: 1017 Modified: trunk/CSP/CSPSim/Include/Networking.h Log: Switching Networking to use a MemoryWriter class to load the message. Modified: trunk/CSP/CSPSim/Include/Networking.h =================================================================== --- trunk/CSP/CSPSim/Include/Networking.h 2004-06-12 12:28:00 UTC (rev 1016) +++ trunk/CSP/CSPSim/Include/Networking.h 2004-06-12 12:28:21 UTC (rev 1017) @@ -178,6 +178,15 @@ printf("ObjectUpdateMessagePayload - angularVelocityOffset: %d\n", angularVelocityAddr - thisAddr ); printf("ObjectUpdateMessagePayload - attitudeOffset: %d\n", attitudeAddr - thisAddr ); } + + void dump() + { + printf("ObjectUpdateMessagePayload - id: %d\n", id); + printf("ObjectUpdateMessagePayload - objectType: %d\n", objectType); + printf("ObjectUpdateMessagePayload - timestamp: %f\n", timeStamp); + printf("ObjectUpdateMessagePayload - GlobalPosition [x: %f, y: %f, z: %f]\n", globalPosition.x, globalPosition.y, globalPosition.z); + + } }; |
From: <sv...@ww...> - 2004-06-12 12:28:07
|
Author: wolverine Date: 2004-06-12 05:28:00 -0700 (Sat, 12 Jun 2004) New Revision: 1016 Modified: trunk/CSP/CSPSim/CHANGES.current Log: Switching Networking to use a MemoryWriter class to load the message. Modified: trunk/CSP/CSPSim/CHANGES.current =================================================================== --- trunk/CSP/CSPSim/CHANGES.current 2004-06-12 12:26:32 UTC (rev 1015) +++ trunk/CSP/CSPSim/CHANGES.current 2004-06-12 12:28:00 UTC (rev 1016) @@ -1,6 +1,9 @@ Version 0.4.0 (in progress) =========================== +2004-06-12: wolverine + * Switching the writing of network buffers to use a SimData MemoryWriter. + 2004-06-10: wolverine * Merged the networking classes MessageSocketDuplex into NetworkMessenger. Also added a callback mechanism to handle |
From: <sv...@ww...> - 2004-06-12 12:26:38
|
Author: wolverine Date: 2004-06-12 05:26:32 -0700 (Sat, 12 Jun 2004) New Revision: 1015 Modified: trunk/CSP/SimData/CHANGES.current Log: new changelog Modified: trunk/CSP/SimData/CHANGES.current =================================================================== --- trunk/CSP/SimData/CHANGES.current 2004-06-12 12:25:24 UTC (rev 1014) +++ trunk/CSP/SimData/CHANGES.current 2004-06-12 12:26:32 UTC (rev 1015) @@ -1,6 +1,10 @@ Version 0.4.0 (in progress) =========================== +2004-16-12: wolverine + * added a MemoryWriter class to write out a SimData object to + a binary memory buffer. + 2004-06-12: delta * Added Properties.h to SimData.vcproj header folder. |
From: <sv...@ww...> - 2004-06-12 12:25:30
|
Author: wolverine Date: 2004-06-12 05:25:24 -0700 (Sat, 12 Jun 2004) New Revision: 1014 Modified: trunk/CSP/SimData/Include/SimData/Archive.h trunk/CSP/SimData/Include/SimData/Uniform.h Log: Added a memory writer class to Archive.h Modified: trunk/CSP/SimData/Include/SimData/Archive.h =================================================================== --- trunk/CSP/SimData/Include/SimData/Archive.h 2004-06-12 11:58:42 UTC (rev 1013) +++ trunk/CSP/SimData/Include/SimData/Archive.h 2004-06-12 12:25:24 UTC (rev 1014) @@ -413,6 +413,71 @@ }; +class SIMDATA_EXPORT MemoryWriter: public Writer { + uint8 * _ptr; + int _n; + //void write(const void* x, int n) { + // fwrite(x, n, 1, _f); + //} +public: + MemoryWriter(uint8 * ptr): Writer(), _n(0) { + _ptr = ptr; + assert(_ptr != 0); + } + void resetCount() { _n = 0; } + int getCount() { return _n; } + + Writer& operator<<(const char x) { + memcpy(_ptr+_n, &x, sizeof(char)); + _n += sizeof(char); + return *this; + } + Writer& operator<<(const short x) { + memcpy(_ptr+_n, &x, sizeof(short)); + _n += sizeof(short); + return *this; + } + Writer& operator<<(const int x) { + memcpy(_ptr+_n, &x, sizeof(x)); + _n += sizeof(int); + return *this; + } + Writer& operator<<(const bool x) { + const char c = x ? 1:0; + operator<<(c); + return *this; + } + Writer& operator<<(const float x) { + memcpy(_ptr+_n, &x, sizeof(x)); + _n += sizeof(x); + return *this; + } + Writer& operator<<(const double x) { + memcpy(_ptr+_n, &x, sizeof(x)); + _n += sizeof(x); + return *this; + } + Writer& operator<<(const char* x) { + int n = strlen(x); + operator<<(n); + memcpy(_ptr+_n, x, n); + _n += n; + return *this; + } + Writer& operator<<(const BaseType &x) { + x.serialize(*this); + return *this; + } + Writer& operator<<(const hasht &x) { + memcpy(_ptr+_n, &x, sizeof(x)); + _n += sizeof(x); + return *this; + } + Writer& operator<<(const std::string &x) { + operator<<(x.c_str()); + return *this; + } +}; NAMESPACE_SIMDATA_END Modified: trunk/CSP/SimData/Include/SimData/Uniform.h =================================================================== --- trunk/CSP/SimData/Include/SimData/Uniform.h 2004-06-12 11:58:42 UTC (rev 1013) +++ trunk/CSP/SimData/Include/SimData/Uniform.h 2004-06-12 12:25:24 UTC (rev 1014) @@ -51,6 +51,7 @@ typedef unsigned short uint16; typedef signed int int32; typedef unsigned int uint32; + //@} /** Test for big-endian byte order */ |
From: <sv...@ww...> - 2004-06-12 11:58:48
|
Author: delta Date: 2004-06-12 04:58:42 -0700 (Sat, 12 Jun 2004) New Revision: 1013 Modified: trunk/CSP/CSPSim/Include/StaticObject.h Log: Removed void serialize(simdata::Archive&). Modified: trunk/CSP/CSPSim/Include/StaticObject.h =================================================================== --- trunk/CSP/CSPSim/Include/StaticObject.h 2004-06-12 10:38:54 UTC (rev 1012) +++ trunk/CSP/CSPSim/Include/StaticObject.h 2004-06-12 11:58:42 UTC (rev 1013) @@ -47,7 +47,8 @@ SIMDATA_OBJECT(StaticObject, 0, 0) protected: - virtual void serialize(simdata::Archive&); + //virtual void serialize(simdata::Reader&); + //virtual void serialize(simdata::Writer&); virtual void dump() {} virtual double onUpdate(double) { return 0.0; } virtual void initialize() {} |
From: <sv...@ww...> - 2004-06-12 10:39:00
|
Author: delta Date: 2004-06-12 03:38:54 -0700 (Sat, 12 Jun 2004) New Revision: 1012 Modified: trunk/CSP/CSPSim/Include/BaseDynamics.h Log: Corrected a typo in a comment. Modified: trunk/CSP/CSPSim/Include/BaseDynamics.h =================================================================== --- trunk/CSP/CSPSim/Include/BaseDynamics.h 2004-06-12 10:32:08 UTC (rev 1011) +++ trunk/CSP/CSPSim/Include/BaseDynamics.h 2004-06-12 10:38:54 UTC (rev 1012) @@ -123,7 +123,7 @@ inline simdata::Vector3 getForce() const { return m_Force; } /** - * Get the total force computed in the last update() call. + * Get the total moment computed in the last update() call. */ inline simdata::Vector3 getMoment() const { return m_Moment; } |
From: <sv...@ww...> - 2004-06-12 10:32:15
|
Author: delta Date: 2004-06-12 03:32:08 -0700 (Sat, 12 Jun 2004) New Revision: 1011 Modified: trunk/CSP/SimData/CHANGES.current trunk/CSP/SimData/VisualStudio2003/SimData.vcproj Log: Added Properties.h to vcproj. Modified: trunk/CSP/SimData/CHANGES.current =================================================================== --- trunk/CSP/SimData/CHANGES.current 2004-06-12 04:11:39 UTC (rev 1010) +++ trunk/CSP/SimData/CHANGES.current 2004-06-12 10:32:08 UTC (rev 1011) @@ -1,6 +1,9 @@ Version 0.4.0 (in progress) =========================== +2004-06-12: delta + * Added Properties.h to SimData.vcproj header folder. + 2004-06-11: onsight * Fixed up the ArchiveTest to use ArchiveReader and ArchiveWriter, and also changed the import statements in the test suite a bit. Modified: trunk/CSP/SimData/VisualStudio2003/SimData.vcproj =================================================================== --- trunk/CSP/SimData/VisualStudio2003/SimData.vcproj 2004-06-12 04:11:39 UTC (rev 1010) +++ trunk/CSP/SimData/VisualStudio2003/SimData.vcproj 2004-06-12 10:32:08 UTC (rev 1011) @@ -350,6 +350,9 @@ RelativePath="..\Include\SimData\Path.h"> </File> <File + RelativePath="..\Include\SimData\Properties.h"> + </File> + <File RelativePath="..\Include\SimData\Quat.h"> </File> <File |
From: <sv...@ww...> - 2004-06-12 04:11:45
|
Author: wolverine Date: 2004-06-11 21:11:39 -0700 (Fri, 11 Jun 2004) New Revision: 1010 Added: trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp Log: new files Added: trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp 2004-06-12 04:06:11 UTC (rev 1009) +++ trunk/CSP/CSPSim/Source/Networking/EchoMessageHandler.cpp 2004-06-12 04:11:39 UTC (rev 1010) @@ -0,0 +1,37 @@ + +// Combat Simulator Project - FlightSim Demo +// Copyright (C) 2002 The Combat Simulator Project +// http://csp.sourceforge.net +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +/** + * @file EchoMessageHandler.cpp: + * @author Scott Flicker (Wolverine) + * + * Class for Handling Network Messages. + * Echos the message back to the sender. + */ + + +#include "Networking.h" + +void EchoMessageHandler::process(NetworkMessage * message) +{ + +} + + Added: trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp 2004-06-12 04:06:11 UTC (rev 1009) +++ trunk/CSP/CSPSim/Source/Networking/PrintMessageHandler.cpp 2004-06-12 04:11:39 UTC (rev 1010) @@ -0,0 +1,78 @@ + +// Combat Simulator Project - FlightSim Demo +// Copyright (C) 2002 The Combat Simulator Project +// http://csp.sourceforge.net +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +/** + * @file PringMessageHandler.cpp: + * @author Scott Flicker (Wolverine) + * + * Class for Handling Network Messages. + * Prints the contents of the message. + */ + + +#include "Networking.h" +#include <stdio.h> + +void PrintMessageHandler::process(NetworkMessage * message) +{ + if (m_count % m_frequency == 0) + { + NetworkNode * node = message->getOriginatorNode(); + MessageHeader * header = (MessageHeader*)message; + header->dumpOffsets(); + std::cout << "Received Data From Client:" << std::endl; + std::cout << "Client addr: " << node->getHostname() << std::endl; + std::cout << "Client port: " << node->getPort() << std::endl; + std::cout << "Header Information" << std::endl; + std::cout << "MagicNumber: " << std::hex << header->m_magicNumber << std::endl; + std::cout << "PayloadLen: " << header->m_payloadLen << std::endl; + std::cout << "MessageType: " << header->m_messageType << std::endl; + std::cout << "IPAddr: " << header->m_ipaddr << std::endl; + std::cout << "Port: " << std::hex << header->m_port << std::endl; + std::cout << "ID: " << header->m_id << std::endl; + + ObjectUpdateMessagePayload * ptrPayload = (ObjectUpdateMessagePayload*)message->getPayloadPtr(); + ptrPayload->dumpOffsets(); + printf("Payload Information\n"); + printf("ID: %u\n", ptrPayload->id); + printf("TYPE: %u\n", ptrPayload->objectType); + printf("TimeStamp: %f\n", ptrPayload->timeStamp); + printf("PosX: %f, PosY: %f, PosZ: %f\n", + ptrPayload->globalPosition.x, + ptrPayload->globalPosition.y, + ptrPayload->globalPosition.z); + printf("LVeloX: %f, LVeloY: %f, LVeloZ: %f\n", + ptrPayload->linearVelocity.x, + ptrPayload->linearVelocity.y, + ptrPayload->linearVelocity.z); + printf("AngVeloX: %f, AngVeloY: %f, AngVeloZ: %f\n", + ptrPayload->angularVelocity.x, + ptrPayload->angularVelocity.y, + ptrPayload->angularVelocity.z); + printf("AttX: %f, AttY: %f, AttZ: %f, AttW: %f\n", + ptrPayload->attitude.x, + ptrPayload->attitude.y, + ptrPayload->attitude.z, + ptrPayload->attitude.w); + } + m_count++; +} + + |
From: <sv...@ww...> - 2004-06-12 04:06:18
|
Author: mkrose Date: 2004-06-11 21:06:11 -0700 (Fri, 11 Jun 2004) New Revision: 1009 Modified: trunk/CSP/SimData/CHANGES.current trunk/CSP/SimData/Include/SimData/InterfaceRegistry.h Log: Move a static initializer out of an anonymous namespace to make vc happy. Update CHANGES.current. Modified: trunk/CSP/SimData/CHANGES.current =================================================================== --- trunk/CSP/SimData/CHANGES.current 2004-06-12 03:23:19 UTC (rev 1008) +++ trunk/CSP/SimData/CHANGES.current 2004-06-12 04:06:11 UTC (rev 1009) @@ -2,6 +2,17 @@ =========================== 2004-06-11: onsight + * Fixed up the ArchiveTest to use ArchiveReader and ArchiveWriter, + and also changed the import statements in the test suite a bit. + Should be slightly cleaner now, but more importantly the tests + should run against the local copy of SimData rather than the + one installed in site-packages (if any). + + * Move the static initializer for object interface pointers + outside of the anonymous namespace that encloses the interface + instance declaration. Should fix compile problems under VC. + +2004-06-11: onsight * Major refactoring of object and basetype serialization. Archive, Packer, and UnPacker are replaced by Reader and Writer abstract classes, and ArchiveReader and ArchiveWriter subclasses. The Modified: trunk/CSP/SimData/Include/SimData/InterfaceRegistry.h =================================================================== --- trunk/CSP/SimData/Include/SimData/InterfaceRegistry.h 2004-06-12 03:23:19 UTC (rev 1008) +++ trunk/CSP/SimData/Include/SimData/InterfaceRegistry.h 2004-06-12 04:06:11 UTC (rev 1009) @@ -303,25 +303,7 @@ */ virtual bool isStatic() const { return false; } -#if 0 - /** - * XXX write me! - */ - void pack(Object *o, Packer &p) { - InterfaceList::const_iterator it = _interfaces.begin(); - for (; it != _interfaces.end(); ++it) (*it)->pack(o, p); - } - /** - * XXX write me! - */ - void unpack(Object *o, UnPacker &p) { - InterfaceList::const_iterator it = _interfaces.begin(); - for (; it != _interfaces.end(); ++it) (*it)->unpack(o, p); - } -#endif - - /////////////////////////////////////////////////////// SWIG #ifdef SWIG public: @@ -748,8 +730,8 @@ * See @ref InterfaceMacros for details. */ #define SIMDATA_REGISTER_INTERFACE(classname) \ -namespace { \ SIMDATA(ObjectInterface)<classname> *classname::classname##InterfaceProxy::_interface = 0; \ +namespace { \ classname::classname##InterfaceProxy __##classname##_interface; \ } /* anonymous namespace */ @@ -758,8 +740,8 @@ * See @ref InterfaceMacros for details. */ #define SIMDATA_REGISTER_INNER_INTERFACE(prefix, classname) \ -namespace { \ SIMDATA(ObjectInterface)<classname> *prefix::classname::classname##InterfaceProxy::_interface = 0; \ +namespace { \ prefix::classname::classname##InterfaceProxy __##prefix##_##classname##_interface; \ } /* anonymous namespace */ |
From: <sv...@ww...> - 2004-06-12 03:23:33
|
Author: mkrose Date: 2004-06-11 20:23:19 -0700 (Fri, 11 Jun 2004) New Revision: 1008 Added: trunk/CSP/SimData/SimData/Tests/RunTests.py trunk/CSP/SimData/SimData/Tests/TestSuites.py Modified: trunk/CSP/SimData/Makefile trunk/CSP/SimData/SimData/Tests/ArchiveTests.py trunk/CSP/SimData/SimData/Tests/TypeTests.py trunk/CSP/SimData/SimData/Tests/__init__.py Log: - Fix unittests to use the new reader/writer classes. - Cleanup the imports of test modules and make sure that SimData is imported from the local package (not site-packages). - Fix the make 'test' target to run the python unittests in addition to the c++ unittests. - Turn debug symbols on by default Modified: trunk/CSP/SimData/Makefile =================================================================== --- trunk/CSP/SimData/Makefile 2004-06-11 15:51:27 UTC (rev 1007) +++ trunk/CSP/SimData/Makefile 2004-06-12 03:23:19 UTC (rev 1008) @@ -5,7 +5,7 @@ export GLDOPTS = $(shell python setup.py ldopts) export GDEBUGF = -g -W -Wall -pedantic -Wmissing-prototypes -Wconversion -Wshadow #-DSIMDATA_NOLOADCHECK -export GCFLAGS = -fPIC -O2 +export GCFLAGS = -fPIC -O2 -g export CXX = g++ export SWIG = swig @@ -32,6 +32,7 @@ tests: @$(MAKE) --no-print-directory -C SimData/Tests all + python SimData/Tests/RunTests.py tests-clean: @$(MAKE) --no-print-directory -C SimData/Tests clean Modified: trunk/CSP/SimData/SimData/Tests/ArchiveTests.py =================================================================== --- trunk/CSP/SimData/SimData/Tests/ArchiveTests.py 2004-06-11 15:51:27 UTC (rev 1007) +++ trunk/CSP/SimData/SimData/Tests/ArchiveTests.py 2004-06-12 03:23:19 UTC (rev 1008) @@ -1,16 +1,20 @@ import SimData + import os from unittest import TestCase, TestSuite, makeSuite + def round8(x): return long((x*1e+8)+0.5)*1e-8; + def round5(x): return long((x*1e+5)+0.5)*1e-5; + class ArchiveTest(TestCase): def setUp(self): self.f = SimData.PackFile('__test__.dar', 'wb') #open('__test__.dar', 'wb') - self.archive = SimData.Packer(self.f) + self.archive = SimData.ArchiveWriter(self.f) def setRead(self): self.size = self.archive.getCount() self.archive = None @@ -19,10 +23,11 @@ self.data = self.f.read(self.size) self.f.close() os.unlink('__test__.dar') - self.archive = SimData.UnPacker(self.data) + self.archive = SimData.ArchiveReader(self.data) def tearDown(self): self.failUnless(self.archive.isComplete()) + class TypeArchiveTest(ArchiveTest): def testSimDate(self): """Test storage and retrieval of SimDate""" @@ -234,7 +239,10 @@ x1 = self.archive._bool() self.assertEqual(x0, x1) + TypeArchiveSuite = makeSuite(TypeArchiveTest, 'test') -suites = [TypeArchiveSuite] +import TestSuites +TestSuites.AddSuite(TypeArchiveSuite) + Added: trunk/CSP/SimData/SimData/Tests/RunTests.py =================================================================== --- trunk/CSP/SimData/SimData/Tests/RunTests.py 2004-06-11 15:51:27 UTC (rev 1007) +++ trunk/CSP/SimData/SimData/Tests/RunTests.py 2004-06-12 03:23:19 UTC (rev 1008) @@ -0,0 +1,8 @@ +import TestSuites + +# add new tests to this import list +import ArchiveTests +import TypeTests + +TestSuites.Run() + Added: trunk/CSP/SimData/SimData/Tests/TestSuites.py =================================================================== --- trunk/CSP/SimData/SimData/Tests/TestSuites.py 2004-06-11 15:51:27 UTC (rev 1007) +++ trunk/CSP/SimData/SimData/Tests/TestSuites.py 2004-06-12 03:23:19 UTC (rev 1008) @@ -0,0 +1,17 @@ +import sys +import os.path + +root = os.path.join(os.path.dirname(__file__), '..', '..') +sys.path.insert(0, os.path.abspath(root)) + +import unittest + +suites = [] + +def AddSuite(suite): + global suites + suites.append(suite) + +def Run(): + runner = unittest.TextTestRunner() + runner.run(unittest.TestSuite(suites)) Modified: trunk/CSP/SimData/SimData/Tests/TypeTests.py =================================================================== --- trunk/CSP/SimData/SimData/Tests/TypeTests.py 2004-06-11 15:51:27 UTC (rev 1007) +++ trunk/CSP/SimData/SimData/Tests/TypeTests.py 2004-06-12 03:23:19 UTC (rev 1008) @@ -1,12 +1,16 @@ import SimData + import os from unittest import TestCase, TestSuite, makeSuite + def round8(x): return long((x*1e+8)+0.5)*1e-8; + def round5(x): return long((x*1e+5)+0.5)*1e-5; + class KeyTest(TestCase): """Test functionality Key""" def testComparisons(self): @@ -66,5 +70,7 @@ DateSuite = makeSuite(DateTest, 'test') -suites = [KeySuite, DateSuite] +import TestSuites +TestSuites.AddSuite(KeySuite) +TestSuites.AddSuite(DateSuite) Modified: trunk/CSP/SimData/SimData/Tests/__init__.py =================================================================== --- trunk/CSP/SimData/SimData/Tests/__init__.py 2004-06-11 15:51:27 UTC (rev 1007) +++ trunk/CSP/SimData/SimData/Tests/__init__.py 2004-06-12 03:23:19 UTC (rev 1008) @@ -1,14 +1 @@ -import unittest - -suites = [] - -def addTestSuites(module): - mod = __import__(module) - suites.extend(mod.suites) - -addTestSuites("ArchiveTests") -addTestSuites("TypeTests") - -runner = unittest.TextTestRunner() -runner.run(unittest.TestSuite(suites)) - +import RunTests |
From: <sv...@ww...> - 2004-06-11 03:03:33
|
Author: wolverine Date: 2004-06-10 20:03:26 -0700 (Thu, 10 Jun 2004) New Revision: 1006 Modified: trunk/CSP/CSPSim/Source/CSPSim.cpp trunk/CSP/CSPSim/Source/ClientNode.cpp trunk/CSP/CSPSim/Source/DynamicObject.cpp trunk/CSP/CSPSim/Source/Makefile.in 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/ServerNode.cpp Log: Did some rearranging of the network code the main result was to merge MessageBufferDuplex into NetworkMessenger. Also added some callback routines for receiving messages. Modified: trunk/CSP/CSPSim/Source/CSPSim.cpp =================================================================== --- trunk/CSP/CSPSim/Source/CSPSim.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/CSPSim.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -726,7 +726,7 @@ // CSP_LOG(APP, DEBUG, "CSPSim::run... queuing test network updates"); m_NetworkMessenger->queueMessage(m_RemoteServerNode, message); - m_NetworkMessenger->sendMessages(); + m_NetworkMessenger->sendQueuedMessages(); m_NetworkMessenger->receiveMessages(); Modified: trunk/CSP/CSPSim/Source/ClientNode.cpp =================================================================== --- trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/ClientNode.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -30,6 +30,10 @@ int ClientNode::run() { + int level = g_Config.getInt("Debug", "LoggingLevel", 0, true); + csplog().setLogLevels(CSP_ALL, level); + csplog().setOutput("ClientNode.log"); + printf("sizeof(int) = %d\n", sizeof(int)); printf("sizeof(double) = %d\n", sizeof(double)); printf("sizeof(simdata::Vector3) = %d\n", sizeof(simdata::Vector3)); @@ -60,7 +64,7 @@ unsigned short payloadLen = sizeof(int) + sizeof(double) + 3*sizeof(simdata::Vector3) + sizeof(simdata::Quat) /* + sizeof(simdata::Matrix3) + sizeof(double) */; - NetworkMessage * message = networkMessenger->getMessageFromPool(messageType, payloadLen); + NetworkMessage * message = networkMessenger->allocMessageBuffer(messageType, payloadLen); ObjectUpdateMessagePayload * ptrPayload = (ObjectUpdateMessagePayload*)message->getPayloadPtr(); ptrPayload->dumpOffsets(); @@ -93,7 +97,7 @@ networkMessenger->queueMessage(remoteNode, message); - networkMessenger->sendMessages(); + networkMessenger->sendQueuedMessages(); return 0; } Modified: trunk/CSP/CSPSim/Source/DynamicObject.cpp =================================================================== --- trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/DynamicObject.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -399,7 +399,7 @@ unsigned short payloadLen = sizeof(int) + sizeof(double) + 3*sizeof(simdata::Vector3) + sizeof(simdata::Quat) /* + sizeof(simdata::Matrix3) + sizeof(double) */; - NetworkMessage * message = CSPSim::theSim->getNetworkMessenger()->getMessageFromPool(messageType, payloadLen); + NetworkMessage * message = CSPSim::theSim->getNetworkMessenger()->allocMessageBuffer(messageType, payloadLen); ObjectUpdateMessagePayload * ptrPayload = (ObjectUpdateMessagePayload*)message->getPayloadPtr(); ptrPayload->id = m_ID; Modified: trunk/CSP/CSPSim/Source/Makefile.in =================================================================== --- trunk/CSP/CSPSim/Source/Makefile.in 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/Makefile.in 2004-06-11 03:03:26 UTC (rev 1006) @@ -75,6 +75,8 @@ Networking/NetworkSocket.cpp \ Networking/MessageSocketDuplex.cpp \ Networking/NetworkAddress.cpp \ + Networking/PrintMessageHandler.cpp \ + Networking/EchoMessageHandler.cpp \ NumericalMethod.cpp \ ObjectModel.cpp \ ObjectRangeInfo.cpp \ Modified: trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/Networking/MessageSocketDuplex.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -26,6 +26,7 @@ MessageSocketDuplex::MessageSocketDuplex() { + CSP_LOG(APP, DEBUG, "MessageSocketDuplex.MessageSocketDuplex()"); m_UDPReceiverSocket = new ost::UDPSocket(); m_UDPSenderSocket = new ost::UDPSocket(); m_receiverAddr = NULL; @@ -35,6 +36,8 @@ MessageSocketDuplex::MessageSocketDuplex(Port port) { // create receiver end point + CSP_LOG(APP, DEBUG, "MessageSocketDuplex.MessageSocketDuplex(port) - port: " << port); + m_UDPReceiverSocket = new ost::UDPSocket(); m_receiverAddr = new ost::InetAddress(); // this should be to INADDR_ANY m_receiverPort = port; m_UDPReceiverSocket = new ost::UDPSocket(*m_receiverAddr, port); @@ -43,6 +46,9 @@ MessageSocketDuplex::MessageSocketDuplex(ost::InetAddress & addr, Port port) { + CSP_LOG(APP, DEBUG, "MessageSocketDuplex.MessageSocketDuplex(addr,port) - addr: " << addr + << ", port: " << port); + m_UDPReceiverSocket = new ost::UDPSocket(); m_receiverAddr = &addr; m_receiverPort = port; m_UDPReceiverSocket = new ost::UDPSocket(addr, port); @@ -52,22 +58,27 @@ int MessageSocketDuplex::sendto(NetworkMessage * message, ost::InetHostAddress * remoteAddress, Port * remotePort) { -// CSP_LOG(NETWORK, DEBUG, "Sending Network Packet"); - + CSP_LOG(APP, DEBUG, "MessageSocketDuplex::sentto(message,addr,port)"); + printf("MessageSocketDuplex::sentto(message,addr,port)"); + message->dumpMessageHeader(); + + CSP_LOG(APP, DEBUG, "MessageSocketDuplex::sentto(message,addr,port) - Setting Remote Peer"); m_UDPSenderSocket->setPeer(*remoteAddress, *remotePort); + CSP_LOG(APP, DEBUG, "MessageSocketDuplex::sentto(message,addr,port) - Sending Network Packet"); #ifdef _MSC_VER return m_UDPSenderSocket->send((const char *)message, NETWORK_PACKET_SIZE); #else return m_UDPSenderSocket->send((const void *)message, NETWORK_PACKET_SIZE); #endif - + CSP_LOG(APP, DEBUG, "MessageSocketDuplex::sendto(message,addr,port) - exiting"); + printf("MessageSocketDuplex::sendto(message,addr,port) - exiting"); } int MessageSocketDuplex::recvfrom(NetworkMessage ** message) { -// CSP_LOG(NETWORK, DEBUG, "Receving Network Packet"); + CSP_LOG(APP, DEBUG, "MessageSocketDuplex()::recvfrom() - Receving Network Packet"); if (m_UDPReceiverSocket->isPending(ost::Socket::pendingInput, 0)) { @@ -104,7 +115,7 @@ int MessageSocketDuplex::sendto(NetworkMessage * message, NetworkNode * node) { -// CSP_LOG(NETWORK, DEBUG, "Sending Network Packet"); + CSP_LOG(APP, DEBUG, "MessageSocketDuplex::sendto(message,node) - Sending Network Packet"); ost::InetHostAddress address = node->getAddress(); Port port = node->getPort(); return sendto(message, &address, &port); @@ -112,3 +123,43 @@ } +int MessageSocketDuplex::sendto(std::vector<RoutedMessage> * sendArray, int count) +{ + +} + +int MessageSocketDuplex::recvfrom(std::vector<RoutedMessage> * receiveArray, int * count) +{ + CSP_LOG(NETWORK, DEBUG, "Receving Network Packet"); + + if (m_UDPReceiverSocket->isPending(ost::Socket::pendingInput, 0)) + { + // 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()); + + // peek at packet to verify this is a valid CSP packet. and if so get the packet type. + + int headerlen = 6; + uint16 headerBuffer[6]; + int numHeaderBytes = m_UDPReceiverSocket->peek(headerBuffer, headerlen); + + + // TODO validation of header + +// NetworkMessage * message = NetworkMessagePool::getPool()->getMessageFromPool(); + NetworkMessage * message = (NetworkMessage*)(new simdata::uint8[512]); + int maxBufLen = 512; + + // get the packet + int numPacketBytes = m_UDPReceiverSocket->receive((void*)message, maxBufLen); +// *message = (NetworkMessage*)buffer; + + return numPacketBytes; + + } + return 0; + +} Modified: trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/Networking/NetworkMessage.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -69,6 +69,11 @@ } +void NetworkMessage::dumpMessageHeader() +{ + m_header.dump(); +} + /** * getBufferLen() * Modified: trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/Networking/NetworkMessenger.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -28,71 +28,148 @@ NetworkMessenger::NetworkMessenger() { - m_messageSocketDuplex = new MessageSocketDuplex(); - m_orginatorNode = new NetworkNode(); - m_messageArrayMax = 200; - m_messageArrayCount = 0; - m_messageArray.reserve(m_messageArrayMax); + CSP_LOG(APP, DEBUG, "NetworkMessenger.NetworkMessenger()"); + + m_UDPReceiverSocket = new ost::UDPSocket(); + m_UDPSenderSocket = new ost::UDPSocket(); + m_receiverAddr = NULL; + m_receiverPort = 0; + + //m_messageSocketDuplex = new MessageSocketDuplex(); + m_originatorNode = new NetworkNode(); + + m_messageSendArrayMax = 200; + m_messageSendArrayCount = 0; + m_messageSendArray.reserve(m_messageSendArrayMax); + + m_messageReceiveArrayMax = 200; + m_messageReceiveArrayCount = 0; + m_messageReceiveArray.reserve(m_messageReceiveArrayMax); + + m_ReceiveHandler = NULL; } -NetworkMessenger::NetworkMessenger(NetworkNode * orginatorNode) +NetworkMessenger::NetworkMessenger(NetworkNode * originatorNode) { - m_messageSocketDuplex = new MessageSocketDuplex(orginatorNode->getPort()); - m_orginatorNode = orginatorNode; - m_messageArrayMax = 200; - m_messageArrayCount = 0; - m_messageArray.reserve(m_messageArrayMax); + CSP_LOG(APP, DEBUG, "NetworkMessenger.NetworkMessenger()"); + m_receiverAddr = new ost::InetAddress(); // this should be to INADDR_ANY + m_receiverPort = originatorNode->getPort(); + m_UDPReceiverSocket = new ost::UDPSocket(*m_receiverAddr, originatorNode->getPort()); + m_UDPSenderSocket = new ost::UDPSocket(); + +// m_messageSocketDuplex = new MessageSocketDuplex(originatorNode->getPort()); + m_originatorNode = originatorNode; + + m_messageSendArrayMax = 200; + m_messageSendArrayCount = 0; + m_messageSendArray.reserve(m_messageSendArrayMax); + + m_messageReceiveArrayMax = 200; + m_messageReceiveArrayCount = 0; + m_messageReceiveArray.reserve(m_messageReceiveArrayMax); + + m_ReceiveHandler = NULL; } +//NetworkMessenger::NetworkMessenger(ost::InetAddress & addr, Port port) +//{ +// m_receiverAddr = &addr; +// m_receiverPort = port; +// m_UDPReceiverSocket = new ost::UDPSocket(addr, port); +// m_UDPSenderSocket = new ost::UDPSocket(); +// +// m_originatorNode = new NetworkNode(addr, port); +// +// m_messageSendArrayMax = 200; +// m_messageSendArrayCount = 0; +// m_messageSendArray.reserve(m_messageSendArrayMax); +// +// m_messageReceiveArrayMax = 200; +// m_messageReceiveArrayCount = 0; +// m_messageReceiveArray.reserve(m_messageReceiveArrayMax); +// +// m_ReceiveHandler = NULL; + +//} + void NetworkMessenger::queueMessage(NetworkNode * node, NetworkMessage * message) { - CSP_LOG(APP, DEBUG, "NetworkMessenger::queueMessage()"); - if (m_messageArrayCount >= m_messageArrayMax) + CSP_LOG(APP, DEBUG, "NetworkMessenger::queueMessage() - targetHost " << node->getHostname() + << ", targetPort " << node->getPort()); + printf("NetworkMessenger.queueMessage()"); + message->dumpMessageHeader(); + if (m_messageSendArrayCount >= m_messageSendArrayMax) { - m_messageArrayMax += m_messageArrayGrow; - m_messageArray.resize(m_messageArrayMax); + m_messageSendArrayMax += m_messageSendArrayGrow; + m_messageSendArray.resize(m_messageSendArrayMax); } - m_messageArray[m_messageArrayCount].m_destinationNode = node; - m_messageArray[m_messageArrayCount].m_message = message; - m_messageArrayCount++; + m_messageSendArray[m_messageSendArrayCount].m_destinationNode = node; + m_messageSendArray[m_messageSendArrayCount].m_message = message; + m_messageSendArrayCount++; } -void NetworkMessenger::sendMessages() +void NetworkMessenger::sendQueuedMessages() { - CSP_LOG(APP, DEBUG, "NetworkMessenger::sendMessages()"); + CSP_LOG(APP, DEBUG, "NetworkMessenger::sendQueuedMessages()"); - for(int i=0;i<m_messageArrayCount;i++) { - m_messageSocketDuplex->sendto(m_messageArray[i].m_message, - m_messageArray[i].m_destinationNode); - returnMessageToPool(m_messageArray[i].m_message); - m_messageArray[i].m_message = NULL; + for(int i=0;i<m_messageSendArrayCount;i++) { + + CSP_LOG(APP, DEBUG, "NetworkMessenger::sendQueuedMessage() - Sending Message [" << i << "]"); +// m_messageSocketDuplex->sendto(m_messageSendArray[i].m_message, +// m_messageSendArray[i].m_destinationNode); + sendto(m_messageSendArray[i].m_message, + m_messageSendArray[i].m_destinationNode); + freeMessageBuffer(m_messageSendArray[i].m_message); + m_messageSendArray[i].m_message = NULL; } - m_messageArrayCount = 0; + m_messageSendArrayCount = 0; } void NetworkMessenger::receiveMessages() { CSP_LOG(APP, DEBUG, "NetworkMessenger::ReceiveMessage()"); - NetworkMessage * networkMessageHandle; - m_messageSocketDuplex->recvfrom(&networkMessageHandle); +// NetworkMessage * networkMessageHandle; +// m_messageSocketDuplex->recvfrom(&networkMessageHandle); + + // receive up to a maximum messages or return if no + // available messages. + for (int i=0;i<1000;i++) { + + NetworkMessage * networkMessage = receiveMessage(); + if ( networkMessage ) { + if ( m_ReceiveHandler ) + m_ReceiveHandler->process(networkMessage); + } + else + return; + } } -NetworkNode * NetworkMessenger::getOrginatorNode() +NetworkNode * NetworkMessenger::getOriginatorNode() { - return m_orginatorNode; + return m_originatorNode; } -void NetworkMessenger::setOrginatorNode(NetworkNode * orginatorNode) +void NetworkMessenger::setOriginatorNode(NetworkNode * originatorNode) { - m_orginatorNode = orginatorNode; + m_originatorNode = originatorNode; } +void NetworkMessenger::registerReceiveHandler(NetworkMessageHandler * handler) +{ + m_ReceiveHandler = handler; +} + + // don't create NetworkMessage Objects directly. Instead create a fixed length binary // buffer then cast it to a NetworkMessage pointer. -NetworkMessage * NetworkMessenger::getMessageFromPool(int messageType, int payloadLen) +// Returns a initialized message buffer. +NetworkMessage * NetworkMessenger::allocMessageBuffer(int messageType, int payloadLen) { - //printf("NetworkMessenger::getMessageFromPool() - CurrentPoolSize: %d\n", m_messagePool.size()); + CSP_LOG(APP, DEBUG, "NetworkMessenger::allocMessageBuffer() - CurrentPoolSize " << + m_messagePool.size()); + if (m_messagePool.empty()) { for(int i=0;i<100;i++) @@ -105,15 +182,183 @@ NetworkMessage * message = m_messagePool.front(); m_messagePool.pop_front(); memset(message, 0x00, NETWORK_PACKET_SIZE); - message->initialize( messageType, payloadLen, m_orginatorNode); + message->initialize( messageType, payloadLen, m_originatorNode); return message; } +// return a zeroed message buffer. Noninitialized +NetworkMessage * NetworkMessenger::allocMessageBuffer() +{ + CSP_LOG(APP, DEBUG, "NetworkMessenger::allocMessageBuffer() - CurrentPoolSize " << + 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(); + memset(message, 0x00, NETWORK_PACKET_SIZE); + return message; + +} + // cast the NetworkMessage pointer back to a binary buffer then free the buffer. -void NetworkMessenger::returnMessageToPool(NetworkMessage * message) +void NetworkMessenger::freeMessageBuffer(NetworkMessage * message) { + CSP_LOG(APP, DEBUG, "NetworkMessenger::freeMessageBuffer()"); + // printf("NetworkMessenger::returnMessageToPool() - CurrentPoolSize: %d\n", m_messagePool.size()); + memset(message, 0xFF, NETWORK_PACKET_SIZE); m_messagePool.push_back(message); } +int NetworkMessenger::sendto(NetworkMessage * message, ost::InetHostAddress * remoteAddress, Port * remotePort) +{ + CSP_LOG(APP, DEBUG, "NetworkMessenger::sentto(message,addr,port)"); + printf("NetworkMessenger::sentto(message,addr,port)"); + message->dumpMessageHeader(); + + CSP_LOG(APP, DEBUG, "NetworkMessenger::sentto(message,addr,port) - Setting Remote Peer"); + m_UDPSenderSocket->setPeer(*remoteAddress, *remotePort); + + CSP_LOG(APP, DEBUG, "NetworkMessenger::sentto(message,addr,port) - Sending Network Packet"); +#ifdef _MSC_VER + return m_UDPSenderSocket->send((const char *)message, NETWORK_PACKET_SIZE); +#else + return m_UDPSenderSocket->send((const void *)message, NETWORK_PACKET_SIZE); +#endif + + CSP_LOG(APP, DEBUG, "NetworkMessenger::sendto(message,addr,port) - exiting"); + printf("NetworkMessenger::sendto(message,addr,port) - exiting"); +} + +NetworkMessage * NetworkMessenger::receiveMessage() +{ + CSP_LOG(APP, DEBUG, "NetworkMessenger::recvfrom() - Receving Network Packet"); + + if (m_UDPReceiverSocket->isPending(ost::Socket::pendingInput, 0)) + { + // 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()); + + // peek at packet to verify this is a valid CSP packet. and if so get the packet type. + + int headerlen = 6; + uint16 headerBuffer[6]; + int numHeaderBytes = m_UDPReceiverSocket->peek(headerBuffer, headerlen); + + + // TODO validation of header + +// simdata::uint8 * buffer = new simdata::uint8[512]; + int maxBufLen = 512; +// + NetworkMessage * message = allocMessageBuffer(); + + // get the packet + int numPacketBytes = m_UDPReceiverSocket->receive((void*)message, maxBufLen); + + return message; + + } + return 0; + + +} + +int NetworkMessenger::recvfrom(NetworkMessage ** message) +{ + CSP_LOG(APP, DEBUG, "NetworkMessenger::recvfrom() - Receving Network Packet"); + + if (m_UDPReceiverSocket->isPending(ost::Socket::pendingInput, 0)) + { + // 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()); + + // peek at packet to verify this is a valid CSP packet. and if so get the packet type. + + int headerlen = 6; + uint16 headerBuffer[6]; + int numHeaderBytes = m_UDPReceiverSocket->peek(headerBuffer, headerlen); + + + // TODO validation of header + + simdata::uint8 * buffer = new simdata::uint8[512]; + int maxBufLen = 512; + + // get the packet + int numPacketBytes = m_UDPReceiverSocket->receive((void*)buffer, maxBufLen); + *message = (NetworkMessage*)buffer; + + return numPacketBytes; + + } + return 0; + +} + + +int NetworkMessenger::sendto(NetworkMessage * message, NetworkNode * node) +{ + + CSP_LOG(APP, DEBUG, "NetworkMessenger::sendto(message,node) - Sending Network Packet"); + ost::InetHostAddress address = node->getAddress(); + Port port = node->getPort(); + return sendto(message, &address, &port); +// return 0; +} + + +int NetworkMessenger::sendto(std::vector<RoutedMessage> * sendArray, int count) +{ + +} + +int NetworkMessenger::recvfrom(std::vector<RoutedMessage> * receiveArray, int * count) +{ + CSP_LOG(NETWORK, DEBUG, "Receving Network Packet"); + + if (m_UDPReceiverSocket->isPending(ost::Socket::pendingInput, 0)) + { + // 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()); + + // peek at packet to verify this is a valid CSP packet. and if so get the packet type. + + int headerlen = 6; + uint16 headerBuffer[6]; + int numHeaderBytes = m_UDPReceiverSocket->peek(headerBuffer, headerlen); + + + // TODO validation of header + +// NetworkMessage * message = NetworkMessagePool::getPool()->getMessageFromPool(); + NetworkMessage * message = (NetworkMessage*)(new simdata::uint8[512]); + int maxBufLen = 512; + + // get the packet + int numPacketBytes = m_UDPReceiverSocket->receive((void*)message, maxBufLen); +// *message = (NetworkMessage*)buffer; + + return numPacketBytes; + + } + return 0; +} Modified: trunk/CSP/CSPSim/Source/ServerNode.cpp =================================================================== --- trunk/CSP/CSPSim/Source/ServerNode.cpp 2004-06-11 03:03:13 UTC (rev 1005) +++ trunk/CSP/CSPSim/Source/ServerNode.cpp 2004-06-11 03:03:26 UTC (rev 1006) @@ -6,7 +6,23 @@ #include <unistd.h> #endif #include "Config.h" +#include "Log.h" +#include <SimData/Ref.h> +#include <SimData/Date.h> +#include <SimData/DataManager.h> + +#include <KineticsChannels.h> + +#include <SimData/Types.h> +#include <SimData/ExceptionBase.h> +#include <SimData/DataArchive.h> +#include <SimData/DataManager.h> +#include <SimData/FileUtility.h> +#include <SimData/GeoPos.h> + +using bus::Kinetics; + ServerNode::ServerNode() { @@ -15,7 +31,13 @@ int ServerNode::run() { int count = 0; + + int level = g_Config.getInt("Debug", "LoggingLevel", 0, true); + csplog().setLogLevels(CSP_ALL, level); + csplog().setOutput("ServerNode.log"); + 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); @@ -25,46 +47,22 @@ NetworkNode * remoteNode = new NetworkNode(1, remoteHost.c_str(), remotePort ); NetworkNode * localNode = new NetworkNode(1, localHost.c_str(), localPort); - MessageSocketDuplex * socketDuplex = new MessageSocketDuplex(localPort); + NetworkMessenger * networkMessenger = new NetworkMessenger(localNode); + PrintMessageHandler * printMessageHandler = new PrintMessageHandler(); + printMessageHandler->setFrequency(1); + networkMessenger->registerReceiveHandler(printMessageHandler); + + //MessageSocketDuplex * socketDuplex = new MessageSocketDuplex(localPort); NetworkMessage * message=NULL; + while(1) { - int numreceived = socketDuplex->recvfrom(&message); - if (numreceived > 0) - { - if (count % 100 == 0) - { - NetworkNode * node = message->getOriginatorNode(); - MessageHeader * header = (MessageHeader*)message; - header->dumpOffsets(); - printf("Received Data From Client:\n"); - printf("Client addr: %s\n", node->getHostname()); - printf("Client port: %d\n", node->getPort()); - - printf("MagicNumber: 0x%x\n", header->m_magicNumber); - printf("PayloadLen: %u\n", header->m_payloadLen); - printf("MessageType: %u\n", header->m_messageType); - printf("IPAddr: 0x%x\n", header->m_ipaddr); - printf("Port: %u\n", header->m_port); - printf("ID: %u\n", header->m_id); - - ObjectUpdateMessagePayload * ptrPayload = (ObjectUpdateMessagePayload*)message->getPayloadPtr(); - ptrPayload->dumpOffsets(); - printf("ID: %u\n", ptrPayload->id); - printf("TimeStamp: %f\n", ptrPayload->timeStamp); - printf("PositionX: %f, PositionY: %f, PositionZ: %f\n", - ptrPayload->globalPosition.x, - ptrPayload->globalPosition.y, - ptrPayload->globalPosition.z); - } - count++; - } - else - { + networkMessenger->receiveMessages(); + networkMessenger->sendQueuedMessages(); #ifndef WIN32 - ::sleep(1); + ::sleep(1); #endif - } + } return 0; |
From: <sv...@ww...> - 2004-06-11 03:03:19
|
Author: wolverine Date: 2004-06-10 20:03:13 -0700 (Thu, 10 Jun 2004) New Revision: 1005 Modified: trunk/CSP/CSPSim/CHANGES.current Log: new changelog Modified: trunk/CSP/CSPSim/CHANGES.current =================================================================== --- trunk/CSP/CSPSim/CHANGES.current 2004-06-11 03:01:32 UTC (rev 1004) +++ trunk/CSP/CSPSim/CHANGES.current 2004-06-11 03:03:13 UTC (rev 1005) @@ -1,6 +1,11 @@ Version 0.4.0 (in progress) =========================== +2004-06-10: wolverine + * Merged the networking classes MessageSocketDuplex into + NetworkMessenger. Also added a callback mechanism to handle + received messages. + 2004-05-30: wolverine * 2004-05-30: wolverine * Changed the router queue in NetworkMessagener to be a vector that |
From: <sv...@ww...> - 2004-06-11 03:01:39
|
Author: wolverine Date: 2004-06-10 20:01:32 -0700 (Thu, 10 Jun 2004) New Revision: 1004 Modified: trunk/CSP/CSPSim/Include/Networking.h Log: Did some rearranging of the network code the main result was to merge MessageBufferDuplex into NetworkMessenger. Also added some callback routines for receiving messages. Modified: trunk/CSP/CSPSim/Include/Networking.h =================================================================== --- trunk/CSP/CSPSim/Include/Networking.h 2004-06-08 06:11:05 UTC (rev 1003) +++ trunk/CSP/CSPSim/Include/Networking.h 2004-06-11 03:01:32 UTC (rev 1004) @@ -129,7 +129,8 @@ public: bool initialize(simdata::uint16 type, simdata::uint16 payloadLength, NetworkNode * senderNode); - + void dumpMessageHeader(); + simdata::uint16 getType(); void * getPayloadPtr(); @@ -184,11 +185,46 @@ #pragma pack(pop) //#endif -class NetworkMessagePool + +class NetworkMessageHandler { + public: + virtual void process(NetworkMessage * message) = 0; +}; +class EchoMessageHandler : public NetworkMessageHandler +{ + public: + virtual void process(NetworkMessage * message); + }; + +class PrintMessageHandler : public NetworkMessageHandler +{ + protected: + int m_frequency; + int m_count; + public: + PrintMessageHandler() { m_frequency = 1; m_count = 0;} + virtual void process(NetworkMessage * message); + + void setFrequency(int frequency) { m_frequency = frequency; } + int getFrequency() { return m_frequency; } +}; + +class NetworkMessagePool +{ +// private: +// static NetworkMessage * g_messagePool; +// +// public: +// NetworkMessage * getMessageFromPool(int type, int payloadLen); +// NetworkMessage * getMessageFromPool(); +// void returnMessageToPool(NetworkMessage * message); +// static NetworkMessagePool * getPool(); + +}; class NetworkNode @@ -216,6 +252,13 @@ }; + +struct RoutedMessage +{ + NetworkNode * m_destinationNode; + NetworkMessage * m_message; +}; + class MessageSocketDuplex { ost::UDPSocket * m_UDPReceiverSocket; @@ -233,47 +276,74 @@ int sendto(NetworkMessage * message, NetworkNode * node); int recvfrom(NetworkMessage ** message); + + int sendto(std::vector<RoutedMessage> * sendArray, int count); + int recvfrom(std::vector<RoutedMessage> * receiveArray, int * count); - ost::InetAddress * getReciverAddress() { return m_receiverAddr; } + ost::InetAddress * getReceiverAddress() { return m_receiverAddr; } Port getReceiverPort() { return m_receiverPort; } }; -struct MessageRoute -{ - NetworkNode * m_destinationNode; - NetworkMessage * m_message; -}; - class NetworkMessenger { private: - MessageSocketDuplex * m_messageSocketDuplex; - std::vector<MessageRoute> m_messageArray; - int m_messageArrayMax; - int m_messageArrayCount; - int m_messageArrayGrow; - NetworkNode * m_orginatorNode; - std::list<NetworkMessage*> m_messagePool; +// MessageSocketDuplex * m_messageSocketDuplex; + std::vector<RoutedMessage> m_messageSendArray; + std::vector<RoutedMessage> m_messageReceiveArray; + int m_messageSendArrayMax; + int m_messageSendArrayCount; + int m_messageSendArrayGrow; + int m_messageReceiveArrayMax; + int m_messageReceiveArrayCount; + int m_messageReceiveArrayGrow; + NetworkNode * m_originatorNode; + std::list<NetworkMessage*> m_messagePool; + NetworkMessageHandler * m_ReceiveHandler; + ost::UDPSocket * m_UDPReceiverSocket; + ost::UDPSocket * m_UDPSenderSocket; + + ost::InetAddress * m_receiverAddr; + Port m_receiverPort; public: NetworkMessenger(); NetworkMessenger(NetworkNode * orginatorNode); +// NetworkMessenger(ost::InetAddress & addr, Port port); void queueMessage(NetworkNode * remoteNode, NetworkMessage * message); - void sendMessages(); + void sendQueuedMessages(); void receiveMessages(); - NetworkNode * getOrginatorNode(); - void setOrginatorNode(NetworkNode * orginatorNode); + NetworkNode * getOriginatorNode(); + void setOriginatorNode(NetworkNode * orginatorNode); - NetworkMessage * getMessageFromPool(int type, int payloadLen); - void returnMessageToPool(NetworkMessage * message); + NetworkMessage * allocMessageBuffer(int type, int payloadLen); + NetworkMessage * allocMessageBuffer(); + void freeMessageBuffer(NetworkMessage * message); + void registerReceiveHandler(NetworkMessageHandler * handler); + + int sendto(NetworkMessage * message, ost::InetHostAddress * remoteAddress, Port * remotePort); + int sendto(NetworkMessage * message, NetworkNode * node); + + int recvfrom(NetworkMessage ** message); + + int sendto(std::vector<RoutedMessage> * sendArray, int count); + int recvfrom(std::vector<RoutedMessage> * receiveArray, int * count); + + NetworkMessage * receiveMessage(); + + ost::InetAddress * getReceiverAddress() { return m_receiverAddr; } + Port getReceiverPort() { return m_receiverPort; } + }; + +// not currently using these below + class NetworkBroadcaster { public: |
From: <sv...@ww...> - 2004-06-08 06:11:12
|
Author: mkrose Date: 2004-06-07 23:11:05 -0700 (Mon, 07 Jun 2004) New Revision: 1003 Modified: trunk/CSP/tools/sublib.py trunk/CSP/tools/subset Log: Fix diff path to work from subdirectories. Also ignore whitespace (probably should be optional...) Modified: trunk/CSP/tools/sublib.py =================================================================== --- trunk/CSP/tools/sublib.py 2004-06-06 22:57:19 UTC (rev 1002) +++ trunk/CSP/tools/sublib.py 2004-06-08 06:11:05 UTC (rev 1003) @@ -107,12 +107,12 @@ def svn_savediff(file, target, revision=None, context=100): - path = file.path + path = file.abspath() if revision: revision = '-r %s' % revision else: revision = '' - exit_code, out = runo('svn diff %s --diff-cmd diff -x "-U %d" %s' % (revision, context, path)) + exit_code, out = runo('svn diff %s --diff-cmd diff -x "-U %d -b" %s' % (revision, context, path)) open(target, 'w').write(''.join(out)) return exit_code Modified: trunk/CSP/tools/subset =================================================================== --- trunk/CSP/tools/subset 2004-06-06 22:57:19 UTC (rev 1002) +++ trunk/CSP/tools/subset 2004-06-08 06:11:05 UTC (rev 1003) @@ -577,7 +577,7 @@ for file in cs.files(): path = file.abspath() exit_code, out = sublib.runo('svn --non-interactive --diff-cmd=/usr/bin/diff' - ' --extensions=-U%d diff %s' % (context, path)) + ' --extensions=-U%d diff %s' % (context, path)) if exit_code: return Error('unable to diff %s' % path) |
From: <sv...@ww...> - 2004-06-06 22:57:25
|
Author: mkrose Date: 2004-06-06 15:57:19 -0700 (Sun, 06 Jun 2004) New Revision: 1002 Modified: trunk/CSP/tools/pyrun Log: Fix file ops to be windows compatible (binary/text). Add a common entry module so that the bootstrap stub doesn't have to be customized for each program. Modified: trunk/CSP/tools/pyrun =================================================================== --- trunk/CSP/tools/pyrun 2004-06-06 10:34:20 UTC (rev 1001) +++ trunk/CSP/tools/pyrun 2004-06-06 22:57:19 UTC (rev 1002) @@ -40,17 +40,22 @@ import bootstrap from CSP.base import app + +ENTRY_MODULE = '__pyrun__' + + DEFAULT_STUB = ("python2.3 -c \"" "import sys;" "sys.path.insert(0, '$0');" "sys.argv[0]='$0';" "import %s" "\" ${1+\"$@\"};" - "exit $?") + "exit $?;" % ENTRY_MODULE) -PROGRAM_MODULE = '__main__' +# attempt at using a universal stub; doesn't seem promising (requires that +# the stub script be installed in a fixed location). +#DEFAULT_STUB = '#!/usr/bin/python /usr/lib/python2.3/site-packages/pystub.py' - def main(args): if len(args) != 1: app.usage() @@ -59,7 +64,7 @@ program = os.path.abspath(args[0]) target = app.options.output if not target: - target =os.path.basename(program) + '.run' + target = os.path.basename(program) + '.run' assemble(program, target) @@ -69,7 +74,7 @@ Filter a list of modules, returning only those that are not part of the standard python libraries. """ - re_stdlib = re.compile(r'[/\\][pP]ython[\.0-9]*[/\\]') + re_stdlib = re.compile(r'[/\\][pP](ython|YTHON)[\.0-9]*[/\\]') custom = [] for mod in modules: file = mod.__file__ @@ -121,7 +126,6 @@ """ # PyZipFile automatically precompiles python sources. out = zipfile.PyZipFile(zipname, 'w', compression=zipfile.ZIP_DEFLATED) - main_module = '' uniq_modules = {} # modules may appear multiple times, depending on the use of relative # import statements, but the absolute filenames are unique. @@ -166,24 +170,31 @@ name, basename = uniq_modules[file] # special case for the main program module if file == program: - program_filename = PROGRAM_MODULE + '.py' - f = open(program_filename, 'w') + f = open('__main__.py', 'wt') # big ol' hack. insert some magic to make the main script look like it # was run directly instead of imported. better solutions welcome. note # than setting __name__ to '__main__' is not always sufficient (e.g. # pickle can complain about missing classes when loading). inject = 1 - for line in open(program): + for line in open(program, 'rt'): if (inject and (line.startswith('app.start(') or line.startswith('if __name__ =='))): inject = 0 print >>f, "import sys; sys.modules['__main__'] = sys.modules[__name__]; __name__ = '__main__';" print >>f, line, f.close() - out.writepy(program_filename, basename) - main_module = '.'.join(basename.split(os.sep) + [PROGRAM_MODULE]) + out.writepy('__main__.py', basename) for ext in ('.py', '.pyc', '.pyo'): - prog_name = PROGRAM_MODULE + ext + prog_name = '__main__' + ext if os.path.exists(prog_name): os.unlink(prog_name) + main_module = '.'.join(basename.split(os.sep) + ['__main__']) + # add a stub so that the entry point is always import <ENTRY_MODULE> + f = open(ENTRY_MODULE+'.py', 'wt') + f.write('import %s\n' % main_module) + f.close() + out.writepy(ENTRY_MODULE+'.py', '') + for ext in ('.py', '.pyc', '.pyo'): + prog_name = ENTRY_MODULE + ext + if os.path.exists(prog_name): os.unlink(prog_name) elif file.endswith('.py'): out.writepy(file, basename) else: @@ -194,19 +205,18 @@ if not app.options.quiet: print '.. Added %s (%s)' % (name, file) out.close() - assert main_module - return main_module -def addStub(stub, main_module, tmpname, target): +def addStub(stub, tmpname, target): """ Add a stub to the start of the zipfile to bootstrap the main program. The stub puts the zipfile at the start of sys.path, and tweaks sys.argv before importing the main module. """ - zip = open(tmpname, 'r') - out = open(target, 'w') - out.write((stub % main_module) + '\n') + zip = open(tmpname, 'rb') + out = open(target, 'wt') + out.write(stub + '\n') + out = open(target, 'ab') out.write(zip.read()) zip.close() out.close() @@ -238,7 +248,7 @@ if not os.path.exists(stub): print 'Stub file %s not found, aborting' % stub sys.exit(1) - stub = open(stub).read() + stub = open(stub, 'rt').read() else: stub = DEFAULT_STUB @@ -255,8 +265,8 @@ print 'Creating executable %s' % target tmpname = target + "~" - main_module = makeZip(tmpname, program, modules, path) - addStub(stub, main_module, tmpname, target) + makeZip(tmpname, program, modules, path) + addStub(stub, tmpname, target) os.unlink(tmpname) os.chmod(target, 0755) |
From: <sv...@ww...> - 2004-06-06 10:34:26
|
Author: mkrose Date: 2004-06-06 03:34:20 -0700 (Sun, 06 Jun 2004) New Revision: 1001 Modified: trunk/CSP/tools/subset Log: Add a few more svn commands to subset. Most are pass-throughs; revert also removes files from changesets. Modified: trunk/CSP/tools/subset =================================================================== --- trunk/CSP/tools/subset 2004-06-06 08:52:15 UTC (rev 1000) +++ trunk/CSP/tools/subset 2004-06-06 10:34:20 UTC (rev 1001) @@ -253,15 +253,18 @@ index[file.abspath()] = file return index - def removeFile(self, file): + def removeFileByPath(self, abspath): index = self._fileIndex() - abspath = file.abspath() file = index.get(abspath, None) if not file: return Error('file not found in changeset %s' % self._name) self._files.remove(file) return Result(file) + def removeFile(self, file): + abspath = file.abspath() + return self.removeFileByPath(abspath) + def addFile(self, file): index = self._fileIndex() abspath = file.abspath() @@ -300,6 +303,7 @@ self._files = {} if not rootsvn: rootsvn = sublib.svn_rootsvn() self._load(rootsvn) + self.cleanup() def _load(self, rootsvn): ws = os.path.join(rootsvn, '.workspace') @@ -329,6 +333,20 @@ abspath = file.abspath() return not self._files.has_key(abspath) + def cleanup(self): + filemap = {} + for file in sublib.svn_st(): + filemap[file.abspath()] = file + items = self._files.items() + changed = 0 + for path, set in items: + if not filemap.has_key(path): + result = set.removeFileByPath(path) + assert result.ok + del self._files[path] + changed = 1 + if changed: self.save() + def assign(self, name, files): if name == 'default': dest = None @@ -340,10 +358,14 @@ if not files: return Error('no files found') for file in files: - set = self._files.get(file.abspath(), None) + abspath = file.abspath() + set = self._files.get(abspath, None) if set: set.removeFile(file) - if dest: dest.addFile(file) + del self._files[abspath] + if dest: + dest.addFile(file) + self._files[abspath] = dest self.save() return Result(0) @@ -664,13 +686,24 @@ class SVNCommand(Command): + def _svn(self, command, args): + paths = os.environ.get('PATH', '') + for path in paths.split(os.pathsep): + path = os.path.join(path, 'svn') + if os.path.exists(path): break + path = '' + if not path: return Error('svn not found') + code = os.spawnv(os.P_WAIT, path, ['svn', command] + args) + if code: return Error('svn failed') + return Result(0) + def _start(self, args): command = self._keys[0] - os.execvp('svn', ['svn', command] + args) + return self._svn(command, args) def help(self): command = self._keys[0] - os.execvp('svn', ['svn', 'help', command]) + return self._svn(command, 'help', (command,)) class Blame(SVNCommand): @@ -709,6 +742,49 @@ self._short = 'output the content of specified files or URLs' +class Add(SVNCommand): + def _define(self): + self._addKeys('add') + self._short = 'put files and directories under version control' + + +class Delete(SVNCommand): + def _define(self): + self._addKeys('delete', 'remove', 'rm') + self._short = 'remove files and directories from version control' + + +class Mkdir(SVNCommand): + def _define(self): + self._addKeys('mkdir') + self._short = 'create a new directory under version control' + + +class Copy(SVNCommand): + def _define(self): + self._addKeys('copy', 'cp') + self._short = 'duplicate something in working copy or repos, with history' + + +class Update(SVNCommand): + def _define(self): + self._addKeys('update', 'up', 'sync') + self._short = 'bring changes from the repository into the working copy' + + +class Revert(SVNCommand): + + def _define(self): + self._addKeys('revert') + self._short = 'restore pristine working copy file' + + def _start(self, args): + result = SVNCommand._start(self, args) + if result.ok: + return run('cleanup') + return result + + class Opened(Command): def _define(self): @@ -946,12 +1022,18 @@ Submit() # svn subcommands +Add() Blame() Cat() +Copy() +Delete() Info() List() Log() +Mkdir() +Revert() Status() +Update() def main(args): |
From: <sv...@ww...> - 2004-06-06 08:52:21
|
Author: mkrose Date: 2004-06-06 01:52:15 -0700 (Sun, 06 Jun 2004) New Revision: 1000 Modified: trunk/CSP/tools/subset Log: Clean up error handling, and allow submits directly from the default changelist (must specify '-d'). Modified: trunk/CSP/tools/subset =================================================================== --- trunk/CSP/tools/subset 2004-06-06 08:19:52 UTC (rev 999) +++ trunk/CSP/tools/subset 2004-06-06 08:52:15 UTC (rev 1000) @@ -161,8 +161,7 @@ def submit(self): files = map(lambda x: x.abspath(), self._files) description = '\n'.join(self._description).replace("'", "'\"'\"'") - exitcode = os.system('svn ci -m \'%s\' %s' % - (description, ' '.join(files))) + exitcode = os.system('svn ci -m \'%s\' %s' % (description, ' '.join(files))) if exitcode != 0: return Error('error submitting changeset') self._pending = 0 @@ -465,7 +464,9 @@ print '%s (%s)' % (file, name) return Result(0) - def change(self, name): + def change(self, name, allow_default=0): + if not allow_default and name == 'default': + return Error('"default" is reserved; please choose another name.') cs = self._sets.get(name, None) if cs: result = cs.edit() @@ -518,18 +519,23 @@ return cs.describe() def submit(self, name): - cs = self.getChangeset(name) - if not cs: - result = self.create(name) + if not name: + name = 'default' + result = self.change(name, allow_default=1) if not result.ok: return result - cs = result.value + cs = self.getChangeset(name) else: + cs = self.getChangeset(name) + if not cs: + return Error('Unknown changeset "%s"' % name) result = self.change(name) if not result.ok: return result result = cs.submit() if result.ok: del self._sets[name] self.save() + elif self._sets.has_key('default'): + del self._sets['default'] return result def review(self, name, @@ -609,10 +615,7 @@ def run(method, *args, **kw): ws = Workspace() method = getattr(ws, method) - result = method(*args, **kw) - if result.ok: return 0 - print result.error - return 1 + return method(*args, **kw) class Command: @@ -646,14 +649,15 @@ def _start(self, args): opt = self._makeOpt() options, args = opt.parse_args(args) - self._run(options, args) + result = self._run(options, args) + if not result.ok: + print result.error def run(command, options): handler = Command.Index.get(command, None) if handler is None: - print 'unknown command "%s"' % command app.usage() - return 1 + return Error('unknown command "%s"' % command) return handler._start(options) run = staticmethod(run) @@ -749,7 +753,7 @@ def _run(self, options, args): if len(args) < 2: self.help() - return 1 + return Result(1) name = args[0] files = args[1:] return run('assign', name, files) @@ -768,7 +772,7 @@ def _run(self, options, args): if len(args) != 1: self.help() - return 1 + return Result(1) name = args[0] if options.delete: return run('abandon', name) @@ -797,7 +801,7 @@ def _run(self, options, args): if len(args) != 1: self.help() - return 1 + return Result(1) name = args[0] mail = [] sender = getattr(options, 'from') @@ -806,15 +810,13 @@ if not sender: sender = os.environ.get('SVN_FROM', '') if not sender: - print 'could not determine your email address; set SVN_FROM or the --from option' - return 1 + return Error('could not determine your email address; set SVN_FROM or the --from option') try: context = int(options.context) except ValueError: context = 0 if context < 1: - print 'invalid value (%s) for --context option' % options.context - return 1 + return Error('invalid value (%s) for --context option' % options.context) interactive = not options.noedit save = options.save return run('review', name, mail=mail, save=save, sender=sender, interactive=interactive, context=context) @@ -828,12 +830,18 @@ 'usage: %prog submit changeset') self._short = 'submit a changeset to the repository' self._addKeys('submit') + self._addOption('-d', '--default', default=False, action='store_true', help='submit directly from default changeset') def _run(self, options, args): - if len(args) != 1: + if len(args) > 1: self.help() - return 1 - name = args[0] + return Result(1) + if not args: + name = '' + if not options.default: + return Error('Must specify "-d" to submit directly from the default changeset') + else: + name = args[0] return run('submit', name) @@ -850,7 +858,7 @@ def _run(self, options, args): if len(args) != 1: self.help() - return 1 + return Result(1) name = args[0] return run('abandon', name) @@ -867,7 +875,7 @@ def _run(self, options, args): if len(args) != 1: self.help() - return 1 + return Result(1) name = args[0] return run('describe', name) @@ -903,12 +911,11 @@ key = args[0] command = Command.Index.get(key, None) if command is None: - print 'unknown subcommand "%s"' % key - return 1 + return Error('unknown subcommand "%s"' % key) command.help() - return 0 + return Result(0) self.help() - return 0 + return Result(0) def help(self): print __doc__ % {'prog': app.programName()} |
From: <sv...@ww...> - 2004-06-06 08:19:57
|
Author: mkrose Date: 2004-06-06 01:19:52 -0700 (Sun, 06 Jun 2004) New Revision: 999 Modified: trunk/CSP/tools/pyrun Log: Fix typo Modified: trunk/CSP/tools/pyrun =================================================================== --- trunk/CSP/tools/pyrun 2004-06-06 08:18:37 UTC (rev 998) +++ trunk/CSP/tools/pyrun 2004-06-06 08:19:52 UTC (rev 999) @@ -128,7 +128,7 @@ for module in modules: name = module.__name__ file = module.__file__ - if uniq.has_key(file): continue + if uniq_modules.has_key(file): continue # determine the full module path relative to sys.path basename = '' # loop through all the paths in sys.path, finding the first one that |