diff --git a/direct/src/showbase/DirectObject.py b/direct/src/showbase/DirectObject.py index b73f9a53fa..af1dcacb82 100644 --- a/direct/src/showbase/DirectObject.py +++ b/direct/src/showbase/DirectObject.py @@ -9,8 +9,7 @@ class DirectObject: # Event Handling # object.accept('mouse', object.handleMouse) - # object.accept('mouse', 'handleMouse') - # object.accept('mouse', 'handleMouse', [1,2]) + # object.accept('mouse', object.handleMouse, [1,2]) def accept(self, event, method, extraArgs=[]): messenger.accept(event, self, method, extraArgs, 1) diff --git a/direct/src/showbase/Messenger.py b/direct/src/showbase/Messenger.py index 313ec756e0..52d026649b 100644 --- a/direct/src/showbase/Messenger.py +++ b/direct/src/showbase/Messenger.py @@ -16,7 +16,7 @@ class Messenger: object2: [method, extraArgs, persistent]}} Or, for an example with more real data: - {'mouseDown' : {avatar : [avatar.jump, (2.0), 1]}} + {'mouseDown' : {avatar : [avatar.jump, [2.0], 1]}} """ self.dict = {} diff --git a/panda/src/downloader/downloadDb.I b/panda/src/downloader/downloadDb.I index 68dc47fcfa..3401f6b3d1 100644 --- a/panda/src/downloader/downloadDb.I +++ b/panda/src/downloader/downloadDb.I @@ -145,6 +145,18 @@ get_server_multifile_size(string mfname) const { return (_server_db.get_multifile_record_named(mfname))->_size; } + +//////////////////////////////////////////////////////////////////// +// Function: DownloadDb:: +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE void DownloadDb:: +set_server_multifile_size(string mfname, int size) { + (_server_db.get_multifile_record_named(mfname))->_size = size; +} + + //////////////////////////////////////////////////////////////////// // Function: DownloadDb:: // Access: Public @@ -249,3 +261,25 @@ set_client_file_version(string mfname, string fname, Version version) { write_db(_client_db._filename, _client_db); } + + + +//////////////////////////////////////////////////////////////////// +// Function: DownloadDb:: +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE Hash DownloadDb:: +get_client_file_hash(string mfname, string fname) const { + return ((_client_db.get_multifile_record_named(mfname))->get_file_record_named(fname))->_hash; +} + +//////////////////////////////////////////////////////////////////// +// Function: DownloadDb:: +// Access: Public +// Description: +//////////////////////////////////////////////////////////////////// +INLINE Hash DownloadDb:: +get_server_file_hash(string mfname, string fname) const { + return ((_server_db.get_multifile_record_named(mfname))->get_file_record_named(fname))->_hash; +} diff --git a/panda/src/downloader/downloadDb.cxx b/panda/src/downloader/downloadDb.cxx index c7572641cb..6255eae773 100644 --- a/panda/src/downloader/downloadDb.cxx +++ b/panda/src/downloader/downloadDb.cxx @@ -177,8 +177,10 @@ client_file_version_correct(string mfname, string filename) const { // Description: //////////////////////////////////////////////////////////////////// bool DownloadDb:: -client_file_crc_correct(string mfname, string filename) const { - return true; +client_file_hash_correct(string mfname, string filename) const { + Hash client_hash = get_client_file_hash(mfname, filename); + Hash server_hash = get_server_file_hash(mfname, filename); + return (client_hash == server_hash); } // Operations on multifiles @@ -303,9 +305,9 @@ server_add_multifile(string mfname, Phase phase, Version version, int size, int // Description: //////////////////////////////////////////////////////////////////// void DownloadDb:: -server_add_file(string mfname, string fname, Version version) { +server_add_file(string mfname, string fname, Version version, Hash hash) { // Make the new file record - PT(FileRecord) fr = new FileRecord(fname, version); + PT(FileRecord) fr = new FileRecord(fname, version, hash); // Find the multifile with mfname vector::iterator i = _server_db._mfile_records.begin(); @@ -656,9 +658,12 @@ parse_fr(uchar *start, int size) { PN_int32 fr_name_length = di.get_int32(); fr->_name = di.extract_bytes(fr_name_length); fr->_version = di.get_int32(); + fr->_hash = di.get_int32(); downloader_cat.debug() - << "Parsed file record: " << fr->_name << " version: " << fr->_version << endl; + << "Parsed file record: " << fr->_name + << " version: " << fr->_version + << " hash: " << fr->_hash << endl; // Return the new MultifileRecord return fr; @@ -888,6 +893,7 @@ DownloadDb::FileRecord:: FileRecord(void) { _name = ""; _version = 0; + _hash = 0; } @@ -897,9 +903,10 @@ FileRecord(void) { // Description: //////////////////////////////////////////////////////////////////// DownloadDb::FileRecord:: -FileRecord(string name, Version version) { +FileRecord(string name, Version version, Hash hash) { _name = name; _version = version; + _hash = hash; } //////////////////////////////////////////////////////////////////// @@ -909,7 +916,9 @@ FileRecord(string name, Version version) { //////////////////////////////////////////////////////////////////// void DownloadDb::FileRecord:: output(ostream &out) const { - out << " FileRecord: " << _name << " version: " << _version << endl; + out << " FileRecord: " << _name + << " version: " << _version + << " hash: " << _hash << endl; } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/downloader/downloadDb.h b/panda/src/downloader/downloadDb.h index d9502840d9..605dd5014c 100644 --- a/panda/src/downloader/downloadDb.h +++ b/panda/src/downloader/downloadDb.h @@ -27,20 +27,24 @@ magic_number number_of_multifiles header_length multifile_name phase version size status num_files - header_length file_name version - header_length file_name version + header_length file_name version hash + header_length file_name version hash header_length multifile_name phase version size status num_files - header_length file_name version - header_length file_name version + header_length file_name version hash + header_length file_name version hash ... ... +Note: the has value will not be valid on the client db. Only +the server db will have the hash value stored + A Db is a Vector MultifileRecord is a Vector */ typedef int Version; +typedef ulong Hash; typedef int Phase; class EXPCL_PANDAEXPRESS DownloadDb { @@ -81,6 +85,7 @@ public: INLINE void set_client_multifile_size(string mfname, int size); INLINE void set_client_multifile_delta_size(string mfname, int size); INLINE int get_server_multifile_size(string mfname) const; + INLINE void set_server_multifile_size(string mfname, int size); INLINE int get_client_multifile_phase(string mfname) const; INLINE int get_server_multifile_phase(string mfname) const; @@ -99,6 +104,9 @@ public: INLINE Version get_server_file_version(string mfname, string fname) const; INLINE void set_client_file_version(string mfname, string fname, Version version); + INLINE Hash get_client_file_hash(string mfname, string fname) const; + INLINE Hash get_server_file_hash(string mfname, string fname) const; + // Check client db against server db bool client_db_current_version(void) const; @@ -109,7 +117,7 @@ public: bool client_multifile_expanded(string mfname) const; bool client_multifile_version_correct(string mfname) const; bool client_file_version_correct(string mfname, string filename) const; - bool client_file_crc_correct(string mfname, string filename) const; + bool client_file_hash_correct(string mfname, string filename) const; // Operations on multifiles void delete_client_multifile(string mfname); @@ -119,17 +127,18 @@ public: // Server side operations to create multifile records void create_new_server_db(); void server_add_multifile(string mfname, Phase phase, Version version, int size, int status); - void server_add_file(string mfname, string fname, Version version); + void server_add_file(string mfname, string fname, Version version, Hash hash); public: class EXPCL_PANDAEXPRESS FileRecord : public ReferenceCount { public: FileRecord(void); - FileRecord(string name, Version version); + FileRecord(string name, Version version, Hash hash); void output(ostream &out) const; string _name; Version _version; + Hash _hash; }; typedef vector FileRecords;