Original Post
In client/server multiplayer games (and no different in the game I am developing), there are usually a number of end-user applications, mainly the client app, and some sort of gateway application. Typically, the gateway application might be responsible for patching the client, launching the client, and managing locally-stored account info. I thought it would be a fantastic (e.g. bandwidth-saving, which means cost-saving) idea to implement a bittorrent client inside the gateway application, and have each player's computer become a seed for the entire game application. Benefits: - Lowered cost for bandwidth for me. - Increased transfer rate depending on the number of seeds. - Mirror redundancy, since potentially every player could become a mirror. Setbacks: - Users may not appreciate bandwidth usage while they are not playing the game, but while the gateway is idle. Fix: permit users to set a bandwidth throttle. Further setback, not all users are savvy enough to understand concepts of bandwidth. Fix: automatically set to lowest-impacting setting? Not sure... - Some users' ISPs will implement a monthly transfer cap, after which they are billed (mine does!). Fix: user must be given the option to 'not' seed media files. Even so, player traffic overage WILL occur, which will cause me headaches, the likes of which no "I Agree" waiver can fix... - Gameplay will suffer if the gateway/patcher is seeding files, while the game itself is active. Fix: Gateway goes into sleep mode (i.e. no seeding) while client application is active (multiple methods of achieving this). - Some users' files might become out-of-date, which has a ripple effect: seed must cease seeding (or else propagate out-of-date files), which lowers overall available bandwidth. Fix: each gateway would need to do checksumming against a master media file list (i.e. from me) at launch-time, and update local files before beginning to seed. Some Questions: - Is coding this feasable in a short (e.g. 3-4 months) period of time? - Which bittorrent library should be used, given the requirements of, "GPL or similar licensing", "written in C++" and "available cross-platform"? Libtorrent/Rakshasa looks to be the only candidate... Any discussion, questions, opinions or comments would be appreciated!