*** empty log message ***

This commit is contained in:
Joe Shochet 2000-12-14 21:39:34 +00:00
parent 09915168d3
commit e6abe76f7d
4 changed files with 29 additions and 206 deletions

View File

@ -44,39 +44,6 @@ get_server_multifile_name(int index) const {
return _server_db.get_multifile_name(index); return _server_db.get_multifile_name(index);
} }
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE Version DownloadDb::
get_client_multifile_version(string mfname) const {
return (_client_db.get_multifile_record_named(mfname))->_version;
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE void DownloadDb::
set_client_multifile_version(string mfname, Version version) {
(_client_db.get_multifile_record_named(mfname))->_version = version;
write_db(_client_db._filename, _client_db);
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE Version DownloadDb::
get_server_multifile_version(string mfname) const {
return (_server_db.get_multifile_record_named(mfname))->_version;
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: DownloadDb:: // Function: DownloadDb::
@ -198,8 +165,8 @@ set_client_multifile_decompressed(string mfname) {
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE void DownloadDb:: INLINE void DownloadDb::
set_client_multifile_expanded(string mfname) { set_client_multifile_extracted(string mfname) {
(_client_db.get_multifile_record_named(mfname))->_status = Status_expanded; (_client_db.get_multifile_record_named(mfname))->_status = Status_extracted;
write_db(_client_db._filename, _client_db); write_db(_client_db._filename, _client_db);
} }
@ -242,57 +209,3 @@ INLINE string DownloadDb::
get_server_file_name(string mfname, int index) const { get_server_file_name(string mfname, int index) const {
return (_server_db.get_multifile_record_named(mfname))->get_file_name(index); return (_server_db.get_multifile_record_named(mfname))->get_file_name(index);
} }
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE Version DownloadDb::
get_client_file_version(string mfname, string fname) const {
return ((_client_db.get_multifile_record_named(mfname))->get_file_record_named(fname))->_version;
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE Version DownloadDb::
get_server_file_version(string mfname, string fname) const {
return ((_server_db.get_multifile_record_named(mfname))->get_file_record_named(fname))->_version;
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE void DownloadDb::
set_client_file_version(string mfname, string fname, Version version) {
((_client_db.get_multifile_record_named(mfname))->get_file_record_named(fname))->_version = version;
write_db(_client_db._filename, _client_db);
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE HashVal 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 HashVal DownloadDb::
get_server_file_hash(string mfname, string fname) const {
return ((_server_db.get_multifile_record_named(mfname))->get_file_record_named(fname))->_hash;
}

View File

@ -93,16 +93,6 @@ write_server_db(Filename &file) {
return write_db(file, _server_db); return write_db(file, _server_db);
} }
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
bool DownloadDb::
client_db_current_version(void) const {
return (_client_db._version == _server_db._version);
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: DownloadDb:: // Function: DownloadDb::
// Access: Public // Access: Public
@ -118,7 +108,7 @@ client_multifile_exists(string mfname) const {
// Access: Public // Access: Public
// Description: A multifile is complete when it is completely // Description: A multifile is complete when it is completely
// downloaded. Note: it may already be decompressed // downloaded. Note: it may already be decompressed
// or expanded and it is still complete // or extracted and it is still complete
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
bool DownloadDb:: bool DownloadDb::
client_multifile_complete(string mfname) const { client_multifile_complete(string mfname) const {
@ -143,45 +133,9 @@ client_multifile_decompressed(string mfname) const {
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
bool DownloadDb:: bool DownloadDb::
client_multifile_expanded(string mfname) const { client_multifile_extracted(string mfname) const {
int client_status = _client_db.get_multifile_record_named(mfname)->_status; int client_status = _client_db.get_multifile_record_named(mfname)->_status;
return (client_status >= Status_expanded); return (client_status >= Status_extracted);
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
bool DownloadDb::
client_multifile_version_correct(string mfname) const {
Version client_version = get_client_multifile_version(mfname);
Version server_version = get_server_multifile_version(mfname);
return (client_version == server_version);
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
bool DownloadDb::
client_file_version_correct(string mfname, string filename) const {
Version client_version = get_client_file_version(mfname, filename);
Version server_version = get_server_file_version(mfname, filename);
return (client_version == server_version);
}
////////////////////////////////////////////////////////////////////
// Function: DownloadDb::
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
bool DownloadDb::
client_file_hash_correct(string mfname, string filename) const {
HashVal client_hash = get_client_file_hash(mfname, filename);
HashVal server_hash = get_server_file_hash(mfname, filename);
return (client_hash == server_hash);
} }
// Operations on multifiles // Operations on multifiles
@ -206,7 +160,6 @@ add_client_multifile(string server_mfname) {
PT(MultifileRecord) client_mfr = new MultifileRecord; PT(MultifileRecord) client_mfr = new MultifileRecord;
client_mfr->_name = server_mfr->_name; client_mfr->_name = server_mfr->_name;
client_mfr->_phase = server_mfr->_phase; client_mfr->_phase = server_mfr->_phase;
client_mfr->_version = server_mfr->_version;
_client_db.add_multifile_record(client_mfr); _client_db.add_multifile_record(client_mfr);
} }
@ -300,8 +253,8 @@ create_new_server_db(void) {
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void DownloadDb:: void DownloadDb::
server_add_multifile(string mfname, Phase phase, Version version, int size, int status) { server_add_multifile(string mfname, Phase phase, int size, int status) {
PT(MultifileRecord) mfr = new MultifileRecord(mfname, phase, version, size, status); PT(MultifileRecord) mfr = new MultifileRecord(mfname, phase, size, status);
_server_db.add_multifile_record(mfr); _server_db.add_multifile_record(mfr);
} }
@ -312,9 +265,9 @@ server_add_multifile(string mfname, Phase phase, Version version, int size, int
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void DownloadDb:: void DownloadDb::
server_add_file(string mfname, string fname, Version version, HashVal hash) { server_add_file(string mfname, string fname) {
// Make the new file record // Make the new file record
PT(FileRecord) fr = new FileRecord(fname, version, hash); PT(FileRecord) fr = new FileRecord(fname);
// Find the multifile with mfname // Find the multifile with mfname
vector<PT(MultifileRecord)>::iterator i = _server_db._mfile_records.begin(); vector<PT(MultifileRecord)>::iterator i = _server_db._mfile_records.begin();
@ -346,7 +299,6 @@ DownloadDb::MultifileRecord::
MultifileRecord(void) { MultifileRecord(void) {
_name = ""; _name = "";
_phase = 0; _phase = 0;
_version = 0;
_size = 0; _size = 0;
_status = Status_incomplete; _status = Status_incomplete;
} }
@ -358,10 +310,9 @@ MultifileRecord(void) {
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
DownloadDb::MultifileRecord:: DownloadDb::MultifileRecord::
MultifileRecord(string name, Phase phase, Version version, int size, int status) { MultifileRecord(string name, Phase phase, int size, int status) {
_name = name; _name = name;
_phase = phase; _phase = phase;
_version = version;
_size = size; _size = size;
_status = status; _status = status;
} }
@ -377,7 +328,6 @@ output(ostream &out) const {
out << "==================================================" << endl; out << "==================================================" << endl;
out << "MultifileRecord: " << _name << endl out << "MultifileRecord: " << _name << endl
<< " phase: " << _phase << endl << " phase: " << _phase << endl
<< " version: " << _version << endl
<< " size: " << _size << endl << " size: " << _size << endl
<< " status: " << _status << endl; << " status: " << _status << endl;
out << "--------------------------------------------------" << endl; out << "--------------------------------------------------" << endl;
@ -631,14 +581,13 @@ parse_mfr(uchar *start, int size) {
PN_int32 mfr_name_length = di.get_int32(); PN_int32 mfr_name_length = di.get_int32();
mfr->_name = di.extract_bytes(mfr_name_length); mfr->_name = di.extract_bytes(mfr_name_length);
mfr->_phase = di.get_int32(); mfr->_phase = di.get_int32();
mfr->_version = di.get_int32();
mfr->_size = di.get_int32(); mfr->_size = di.get_int32();
mfr->_status = di.get_int32(); mfr->_status = di.get_int32();
mfr->_num_files = di.get_int32(); mfr->_num_files = di.get_int32();
downloader_cat.debug() downloader_cat.debug()
<< "Parsed multifile record: " << mfr->_name << " phase: " << mfr->_phase << "Parsed multifile record: " << mfr->_name << " phase: " << mfr->_phase
<< " version: " << mfr->_version << " size: " << mfr->_size << " size: " << mfr->_size
<< " status: " << mfr->_status << " num_files: " << mfr->_num_files << endl; << " status: " << mfr->_status << " num_files: " << mfr->_num_files << endl;
// Return the new MultifileRecord // Return the new MultifileRecord
@ -664,13 +613,9 @@ parse_fr(uchar *start, int size) {
DatagramIterator di(_datagram); DatagramIterator di(_datagram);
PN_int32 fr_name_length = di.get_int32(); PN_int32 fr_name_length = di.get_int32();
fr->_name = di.extract_bytes(fr_name_length); fr->_name = di.extract_bytes(fr_name_length);
fr->_version = di.get_int32();
downloader_cat.spam() downloader_cat.spam()
<< "Parsed file record: " << fr->_name << "Parsed file record: " << fr->_name << endl;
<< " version: " << fr->_version
<< " hash: " << fr->_hash
<< endl;
// Return the new MultifileRecord // Return the new MultifileRecord
return fr; return fr;
@ -782,7 +727,6 @@ write(ofstream &write_stream) {
// Declare these outside the loop so we do not keep creating // Declare these outside the loop so we do not keep creating
// and deleting them // and deleting them
PN_int32 phase; PN_int32 phase;
PN_int32 version;
PN_int32 size; PN_int32 size;
PN_int32 status; PN_int32 status;
PN_int32 num_files; PN_int32 num_files;
@ -796,7 +740,6 @@ write(ofstream &write_stream) {
// Cache some properties so we do not have to keep asking for them // Cache some properties so we do not have to keep asking for them
phase = (*i)->_phase; phase = (*i)->_phase;
version = (*i)->_version;
size = (*i)->_size; size = (*i)->_size;
status = (*i)->_status; status = (*i)->_status;
num_files = (*i)->get_num_files(); num_files = (*i)->get_num_files();
@ -807,7 +750,7 @@ write(ofstream &write_stream) {
sizeof(header_length) + // Size of this header length sizeof(header_length) + // Size of this header length
sizeof(name_length) + // Size of the size of the name string sizeof(name_length) + // Size of the size of the name string
(*i)->_name.length() + // Size of the name string (*i)->_name.length() + // Size of the name string
sizeof(phase) + sizeof(version) + sizeof(size) + sizeof(phase) + sizeof(size) +
sizeof(status) + sizeof(num_files); sizeof(status) + sizeof(num_files);
// Add the length of this entire datagram // Add the length of this entire datagram
@ -820,7 +763,6 @@ write(ofstream &write_stream) {
// Add all the properties // Add all the properties
_datagram.add_int32(phase); _datagram.add_int32(phase);
_datagram.add_int32(version);
_datagram.add_int32(size); _datagram.add_int32(size);
_datagram.add_int32(status); _datagram.add_int32(status);
_datagram.add_int32(num_files); _datagram.add_int32(num_files);
@ -836,15 +778,13 @@ write(ofstream &write_stream) {
// Clear the datagram before we jam a bunch of stuff on it // Clear the datagram before we jam a bunch of stuff on it
_datagram.clear(); _datagram.clear();
version = (*j)->_version;
name_length = (*j)->_name.length(); name_length = (*j)->_name.length();
// Compute the length of this datagram // Compute the length of this datagram
header_length = header_length =
sizeof(header_length) + // Size of this header length sizeof(header_length) + // Size of this header length
sizeof(name_length) + // Size of the size of the name string sizeof(name_length) + // Size of the size of the name string
(*j)->_name.length() + // Size of the name string (*j)->_name.length(); // Size of the name string
sizeof(version);
// Add the length of this entire datagram // Add the length of this entire datagram
_datagram.add_int32(header_length); _datagram.add_int32(header_length);
@ -854,9 +794,6 @@ write(ofstream &write_stream) {
// Add the name // Add the name
_datagram.append_data((*j)->_name.c_str(), (*j)->_name.length()); _datagram.append_data((*j)->_name.c_str(), (*j)->_name.length());
// Add all the properties
_datagram.add_int32(version);
// Now put this datagram on the write stream // Now put this datagram on the write stream
string msg = _datagram.get_message(); string msg = _datagram.get_message();
write_stream.write(msg.data(), msg.length()); write_stream.write(msg.data(), msg.length());
@ -907,8 +844,6 @@ write_header(ofstream &write_stream) {
DownloadDb::FileRecord:: DownloadDb::FileRecord::
FileRecord(void) { FileRecord(void) {
_name = ""; _name = "";
_version = 0;
_hash = HashVal();
} }
@ -918,10 +853,8 @@ FileRecord(void) {
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
DownloadDb::FileRecord:: DownloadDb::FileRecord::
FileRecord(string name, Version version, HashVal hash) { FileRecord(string name) {
_name = name; _name = name;
_version = version;
_hash = hash;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -931,10 +864,7 @@ FileRecord(string name, Version version, HashVal hash) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void DownloadDb::FileRecord:: void DownloadDb::FileRecord::
output(ostream &out) const { output(ostream &out) const {
out << " FileRecord: " << _name out << " FileRecord: " << _name << endl;
<< " version: " << _version
<< " hash: " << _hash
<< endl;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -954,9 +884,10 @@ add_version(const Filename &name, HashVal hash, Version version) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void DownloadDb:: void DownloadDb::
add_version(const string &name, HashVal hash, Version version) { add_version(const string &name, HashVal hash, Version version) {
nassertv(version >= 1);
// Try to find this name in the map // Try to find this name in the map
VersionMap::iterator i = _versions.find(name); VersionMap::iterator i = _versions.find(name);
nassertv(version >= 1);
// If we did not find it, put a new vectorHash at this name_code // If we did not find it, put a new vectorHash at this name_code
if (i == _versions.end()) { if (i == _versions.end()) {
@ -967,8 +898,8 @@ add_version(const string &name, HashVal hash, Version version) {
} else { } else {
int size = (*i).second.size(); int size = (*i).second.size();
// Assert that this version is the next version in the list // Assert that this version is less than or equal to next version in the list
nassertv(version<=size); nassertv(version<=size+1);
// If you are overwriting an old hash value, just insert the new value // If you are overwriting an old hash value, just insert the new value
if (version-1 < size) { if (version-1 < size) {

View File

@ -49,12 +49,12 @@ PUBLISHED:
// Status of a multifile is stored in this enum // Status of a multifile is stored in this enum
// Note these values are in increasing order of "doneness" // Note these values are in increasing order of "doneness"
// So if you are decompressed, you are complete // So if you are decompressed, you are complete
// If you are expanded, you are decompressed and complete // If you are extracted, you are decompressed and complete
enum Status { enum Status {
Status_incomplete = 0, Status_incomplete = 0,
Status_complete = 1, Status_complete = 1,
Status_decompressed = 2, Status_decompressed = 2,
Status_expanded = 3 Status_extracted = 3
}; };
DownloadDb(void); DownloadDb(void);
@ -74,10 +74,6 @@ PUBLISHED:
INLINE string get_client_multifile_name(int index) const; INLINE string get_client_multifile_name(int index) const;
INLINE string get_server_multifile_name(int index) const; INLINE string get_server_multifile_name(int index) const;
INLINE Version get_client_multifile_version(string mfname) const;
INLINE void set_client_multifile_version(string mfname, Version version);
INLINE Version get_server_multifile_version(string mfname) const;
INLINE int get_client_multifile_size(string mfname) const; INLINE int get_client_multifile_size(string mfname) const;
INLINE void set_client_multifile_size(string mfname, int size); INLINE void set_client_multifile_size(string mfname, int size);
INLINE int set_client_multifile_delta_size(string mfname, int size); INLINE int set_client_multifile_delta_size(string mfname, int size);
@ -90,32 +86,19 @@ PUBLISHED:
INLINE void set_client_multifile_incomplete(string mfname); INLINE void set_client_multifile_incomplete(string mfname);
INLINE void set_client_multifile_complete(string mfname); INLINE void set_client_multifile_complete(string mfname);
INLINE void set_client_multifile_decompressed(string mfname); INLINE void set_client_multifile_decompressed(string mfname);
INLINE void set_client_multifile_expanded(string mfname); INLINE void set_client_multifile_extracted(string mfname);
INLINE int get_client_num_files(string mfname) const; INLINE int get_client_num_files(string mfname) const;
INLINE int get_server_num_files(string mfname) const; INLINE int get_server_num_files(string mfname) const;
INLINE HashVal get_client_file_hash(string mfname, string fname) const;
INLINE HashVal get_server_file_hash(string mfname, string fname) const;
INLINE string get_client_file_name(string mfname, int index) const; INLINE string get_client_file_name(string mfname, int index) const;
INLINE string get_server_file_name(string mfname, int index) const; INLINE string get_server_file_name(string mfname, int index) const;
INLINE Version get_client_file_version(string mfname, string fname) const;
INLINE Version get_server_file_version(string mfname, string fname) const;
INLINE void set_client_file_version(string mfname, string fname, Version version);
// Check client db against server db
bool client_db_current_version(void) const;
// Queries from the Launcher // Queries from the Launcher
bool client_multifile_exists(string mfname) const; bool client_multifile_exists(string mfname) const;
bool client_multifile_complete(string mfname) const; bool client_multifile_complete(string mfname) const;
bool client_multifile_decompressed(string mfname) const; bool client_multifile_decompressed(string mfname) const;
bool client_multifile_expanded(string mfname) const; bool client_multifile_extracted(string mfname) const;
bool client_multifile_version_correct(string mfname) const;
bool client_file_version_correct(string mfname, string filename) const;
bool client_file_hash_correct(string mfname, string filename) const;
// Operations on multifiles // Operations on multifiles
void delete_client_multifile(string mfname); void delete_client_multifile(string mfname);
@ -124,19 +107,17 @@ PUBLISHED:
// Server side operations to create multifile records // Server side operations to create multifile records
void create_new_server_db(); void create_new_server_db();
void server_add_multifile(string mfname, Phase phase, Version version, int size, int status); void server_add_multifile(string mfname, Phase phase, int size, int status);
void server_add_file(string mfname, string fname, Version version, HashVal hash); void server_add_file(string mfname, string fname);
public: public:
class EXPCL_PANDAEXPRESS FileRecord : public ReferenceCount { class EXPCL_PANDAEXPRESS FileRecord : public ReferenceCount {
public: public:
FileRecord(void); FileRecord(void);
FileRecord(string name, Version version, HashVal hash); FileRecord(string name);
void output(ostream &out) const; void output(ostream &out) const;
string _name; string _name;
Version _version;
HashVal _hash;
}; };
typedef vector<PT(FileRecord)> FileRecords; typedef vector<PT(FileRecord)> FileRecords;
@ -144,7 +125,7 @@ public:
class EXPCL_PANDAEXPRESS MultifileRecord : public ReferenceCount { class EXPCL_PANDAEXPRESS MultifileRecord : public ReferenceCount {
public: public:
MultifileRecord(void); MultifileRecord(void);
MultifileRecord(string name, Phase phase, Version version, int size, int status); MultifileRecord(string name, Phase phase, int size, int status);
void output(ostream &out) const; void output(ostream &out) const;
int get_num_files(void) const; int get_num_files(void) const;
string get_file_name(int index) const; string get_file_name(int index) const;
@ -153,7 +134,6 @@ public:
void add_file_record(PT(FileRecord) fr); void add_file_record(PT(FileRecord) fr);
string _name; string _name;
Phase _phase; Phase _phase;
Version _version;
int _size; int _size;
int _status; int _status;
PN_int32 _num_files; PN_int32 _num_files;
@ -177,7 +157,6 @@ public:
PT(FileRecord) parse_fr(uchar *start, int size); PT(FileRecord) parse_fr(uchar *start, int size);
bool read(ifstream &read_stream); bool read(ifstream &read_stream);
bool write(ofstream &write_stream); bool write(ofstream &write_stream);
Version _version;
Filename _filename; Filename _filename;
MultifileRecords _mfile_records; MultifileRecords _mfile_records;
private: private:

View File

@ -638,6 +638,7 @@ DownloadStatus(char *buffer, int first_byte, int last_byte,
_first_byte = first_byte; _first_byte = first_byte;
_last_byte = last_byte; _last_byte = last_byte;
_total_bytes = total_bytes; _total_bytes = total_bytes;
_total_bytes_written = 0;
_partial_content = partial_content; _partial_content = partial_content;
reset(); reset();
} }
@ -653,5 +654,4 @@ reset(void) {
_start = _buffer; _start = _buffer;
_next_in = _start; _next_in = _start;
_bytes_in_buffer = 0; _bytes_in_buffer = 0;
_total_bytes_written = 0;
} }