Uzzaa... well, now I'm beginning to like hydranode too ... ok fine, I liked it before too, but if something you'v worked on for ... 7 months now ... is actually doing something and not crashing over every problem, you just have to love it :)
I'll get right to the point so I can get to sleep:
- Fixed Socket<->SocketWatcher relationships, socket removals and so on.
- Color codes (and other escaped sequences) are now filtered before writing to log file.
- New events emitted from PartData: PD_VERIFYING, PD_MOVING and PD_COMPLETE.
- Clients now properly detect when their requested file gets completed, killed or whatever. [Note]
- Fixed temp file format (on disk). Downloads restarting (after app restart) is now possible.
- In case of fallback ports usage, send the right ports to server too (not the original ones). Should fix the problems found by sfabris.
- LowID callbacks re-enabled, seems fully working now.
- Erase the huge amounts of empty lines from the end of server messages.
- Added bold versions of all color codes.
- Full MetaData recodset is also stored now in PartData reference file (as trailing data) as a fallback option in case we lose MetaDb.
- PartData is now capable of rehashing completed parts if neccesery (e.g. crashes) (experimental code).
- Major cleanup in Client/ClientList logging output.
- Request sources from server every 20 minutes. Ping server with empty OfferFiles packet every 20 mins (latter is recommended by lugdunummaster).
- Replaced (most) asserts with CHECK_THROW macros. This is a C++ application afterall.
[Note]:
Actually I had to disable the Event Subsystem side of multi-handler calling (that is required by this feature). Multiple handlers for events from same source were in original Event Subsystem design, however somehow got forgotten during implementation. And when I attempted to enable them in current implementation, all hell broke loose, so I had to disable them for now. While it would be possible to work around the hell via temporary lists (similar as is done in SocketWatcher - but there it's really needed), I don't think it's worth the effort anymore since Event Subsystem is scheduler for complete internal reimplementation (which also results in several API changes) in short term (win32 port requires new Event Subsystem implementation as we all know).There has been a lot more activity on CVS than the above ofcourse, but I omitted the less-important, and/or partial changes from the above list. You probably don't know, but there's RSS feed available for CVS updates also. I registred hydranode CVS with
CIA Open Source Notification System few days ago, and it also provides RSS feed (in addition to the cool CIA-bot on our IRC channel which provides real-time updates on CVS changes). The XML feed, as well as bunch of CVS statistics, are available at
http://cia.navi.cx/stats/project/hydranode. So if you'r into RSS and want to get real-time updates on CVS updates - that's the way to fly.
In theory it's possible to really download stuff with hydranode now, altough it still needs more work. Those wishing to test the stuff, here's what you do (in hydranode shell, available at port 9999 by default):
hnsh$ search [string]
... search results come in, all numbered ...
hnsh$ download [resultnum]
HydraNode starts downloading the file. Temp files are stored in $(HOME)/.hydranode/temp, incoming files are put to $(HOME)/.hydranode/incoming. Note that both
search and
download commands may be abbrevated to minimum of
s and
d to save typing. The abbrevation code is experimental and probably not final, but it works to some extent in simpler cases as this.
Madcat, ZzZz
PS: We just exceeded 29'000 source code lines today. Just 1000 more ... uuuzaa... :D