Socket handler for the content server connection. More...
#include <network_content.h>
Public Member Functions | |
| ClientNetworkContentSocketHandler () | |
| Create a socket handler to handle the connection. | |
| ~ClientNetworkContentSocketHandler () | |
| Clear up the mess ;). | |
| void | Connect () |
| Connect with the content server. | |
| void | SendReceive () |
| Check whether we received/can send some data from/to the content server and when that's the case handle it appropriately. | |
| void | Close () |
| Disconnect from the content server. | |
| void | RequestContentList (ContentType type) |
| Request the content list for the given type. | |
| void | RequestContentList (uint count, const ContentID *content_ids) |
| Request the content list for a given number of content IDs. | |
| void | RequestContentList (ContentVector *cv, bool send_md5sum=true) |
| Request the content list for a list of content. | |
| void | DownloadSelectedContent (uint &files, uint &bytes, bool fallback=false) |
| Actually begin downloading the content we selected. | |
| void | Select (ContentID cid) |
| Select a specific content id. | |
| void | Unselect (ContentID cid) |
| Unselect a specific content id. | |
| void | SelectAll () |
| Select everything we can select. | |
| void | SelectUpgrade () |
| Select everything that's an update for something we've got. | |
| void | UnselectAll () |
| Unselect everything that we've not downloaded so far. | |
| void | ToggleSelectedState (const ContentInfo *ci) |
| Toggle the state of a content info and check its dependencies. | |
| void | ReverseLookupDependency (ConstContentVector &parents, const ContentInfo *child) const |
| Reverse lookup the dependencies of (direct) parents over a given child. | |
| void | ReverseLookupTreeDependency (ConstContentVector &tree, const ContentInfo *child) const |
| Reverse lookup the dependencies of all parents over a given child. | |
| void | CheckDependencyState (ContentInfo *ci) |
| Check the dependencies (recursively) of this content info. | |
| uint | Length () const |
| Get the number of content items we know locally. | |
| ConstContentIterator | Begin () const |
| Get the begin of the content inf iterator. | |
| ConstContentIterator | Get (uint32 index) const |
| Get the nth position of the content inf iterator. | |
| ConstContentIterator | End () const |
| Get the end of the content inf iterator. | |
| void | Clear () |
| Clear all downloaded content information. | |
| void | AddCallback (ContentCallback *cb) |
| Add a callback to this class. | |
| void | RemoveCallback (ContentCallback *cb) |
| Remove a callback. | |
Static Public Attributes | |
| static const int | IDLE_TIMEOUT = 60 * 1000 |
| The idle timeout; when to close the connection because it's idle. | |
Protected Types | |
| typedef SmallVector< ContentID, 4 > | ContentIDList |
| List of content IDs to (possibly) select. | |
Protected Member Functions | |
| virtual bool | Receive_SERVER_INFO (Packet *p) |
| virtual bool | Receive_SERVER_CONTENT (Packet *p) |
| ContentInfo * | GetContent (ContentID cid) |
| Get the content info based on a ContentID. | |
| void | DownloadContentInfo (ContentID cid) |
| Download information of a given Content ID if not already tried. | |
| void | OnConnect (bool success) |
| void | OnDisconnect () |
| void | OnReceiveContentInfo (const ContentInfo *ci) |
| void | OnDownloadProgress (const ContentInfo *ci, int bytes) |
| void | OnDownloadComplete (ContentID cid) |
| void | OnFailure () |
| An error has occurred and the connection has been closed. | |
| void | OnReceiveData (const char *data, size_t length) |
| We're receiving data. | |
| bool | BeforeDownload () |
| Handle the opening of the file before downloading. | |
| void | AfterDownload () |
| Handle the closing and extracting of a file after downloading it has been done. | |
| void | DownloadSelectedContentHTTP (const ContentIDList &content) |
| Initiate downloading the content over HTTP. | |
| void | DownloadSelectedContentFallback (const ContentIDList &content) |
| Initiate downloading the content over the fallback protocol. | |
Protected Attributes | |
| SmallVector< ContentCallback *, 2 > | callbacks |
| Callbacks to notify "the world". | |
| ContentIDList | requested |
| ContentIDs we already requested (so we don't do it again). | |
| ContentVector | infos |
| All content info we received. | |
| SmallVector< char, 1024 > | http_response |
| The HTTP response to the requests we've been doing. | |
| int | http_response_index |
| Where we are, in the response, with handling it. | |
| FILE * | curFile |
| Currently downloaded file. | |
| ContentInfo * | curInfo |
| Information about the currently downloaded file. | |
| bool | isConnecting |
| Whether we're connecting. | |
| uint32 | lastActivity |
| The last time there was network activity. | |
Friends | |
| class | NetworkContentConnecter |
Socket handler for the content server connection.
Definition at line 69 of file network_content.h.
| bool ClientNetworkContentSocketHandler::BeforeDownload | ( | ) | [protected] |
Handle the opening of the file before downloading.
Definition at line 512 of file network_content.cpp.
References curFile, curInfo, DeleteWindowById(), ContentInfo::filesize, GetFullFilename(), ContentInfo::IsValid(), ShowErrorMessage(), WC_NETWORK_STATUS_WINDOW, WL_ERROR, and WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD.
Referenced by OnReceiveData().
| ConstContentIterator ClientNetworkContentSocketHandler::Begin | ( | ) | const [inline] |
Get the begin of the content inf iterator.
Definition at line 136 of file network_content.h.
References SmallVector< T, S >::Begin(), and infos.
Referenced by NetworkContentListWindow::BuildContentList(), and NetworkContentListWindow::DrawDetails().
| void ClientNetworkContentSocketHandler::CheckDependencyState | ( | ContentInfo * | ci | ) |
Check the dependencies (recursively) of this content info.
| ci | the content info to check the dependencies of |
Definition at line 986 of file network_content.cpp.
References ContentInfo::AUTOSELECTED, SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), ContentInfo::dependencies, ContentInfo::dependency_count, DownloadContentInfo(), SmallVector< T, S >::End(), GetContent(), ContentInfo::id, ContentInfo::IsSelected(), ReverseLookupDependency(), ReverseLookupTreeDependency(), ContentInfo::SELECTED, ContentInfo::state, Unselect(), and ContentInfo::UNSELECTED.
Referenced by Select(), SelectAll(), SelectUpgrade(), and Unselect().
| void ClientNetworkContentSocketHandler::Clear | ( | ) |
Clear all downloaded content information.
Definition at line 1076 of file network_content.cpp.
References SmallVector< T, S >::Begin(), SmallVector< T, S >::Clear(), SmallVector< T, S >::End(), infos, and requested.
Referenced by ShowNetworkContentListWindow().
| void ClientNetworkContentSocketHandler::DownloadContentInfo | ( | ContentID | cid | ) | [protected] |
Download information of a given Content ID if not already tried.
| cid | the ID to try |
Definition at line 837 of file network_content.cpp.
References SmallVector< T, S >::Append(), SmallVector< T, S >::Contains(), RequestContentList(), and requested.
Referenced by CheckDependencyState().
| void ClientNetworkContentSocketHandler::DownloadSelectedContent | ( | uint & | files, | |
| uint & | bytes, | |||
| bool | fallback = false | |||
| ) |
Actually begin downloading the content we selected.
| [out] | files | The number of files we are going to download. |
| [out] | bytes | The number of bytes we are going to download. |
| fallback | Whether to use the fallback or not. |
Definition at line 295 of file network_content.cpp.
References _settings_client, SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), DownloadSelectedContentFallback(), DownloadSelectedContentHTTP(), SmallVector< T, S >::End(), ContentInfo::filesize, ContentInfo::id, infos, ContentInfo::IsSelected(), SmallVector< T, S >::Length(), ClientSettings::network, NetworkSettings::no_http_content_downloads, and ContentInfo::state.
Referenced by BaseNetworkContentDownloadStatusWindow::BaseNetworkContentDownloadStatusWindow(), and OnFailure().
| void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback | ( | const ContentIDList & | content | ) | [protected] |
Initiate downloading the content over the fallback protocol.
| content | The content to download. |
Definition at line 352 of file network_content.cpp.
References SmallVector< T, S >::Begin(), Connect(), SmallVector< T, S >::Length(), min(), PACKET_CONTENT_CLIENT_CONTENT, SEND_MTU, Packet::Send_uint16(), Packet::Send_uint32(), and NetworkTCPSocketHandler::SendPacket().
Referenced by DownloadSelectedContent().
| void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP | ( | const ContentIDList & | content | ) | [protected] |
Initiate downloading the content over HTTP.
| content | The content to download. |
Definition at line 324 of file network_content.cpp.
References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), http_response_index, lastof, SmallVector< T, S >::Length(), NETWORK_CONTENT_MIRROR_HOST, NETWORK_CONTENT_MIRROR_PORT, NETWORK_CONTENT_MIRROR_URL, and seprintf().
Referenced by DownloadSelectedContent().
| ConstContentIterator ClientNetworkContentSocketHandler::End | ( | ) | const [inline] |
Get the end of the content inf iterator.
Definition at line 140 of file network_content.h.
References SmallVector< T, S >::End(), and infos.
Referenced by NetworkContentListWindow::BuildContentList(), and NetworkContentListWindow::DrawDetails().
| ConstContentIterator ClientNetworkContentSocketHandler::Get | ( | uint32 | index | ) | const [inline] |
Get the nth position of the content inf iterator.
Definition at line 138 of file network_content.h.
References SmallVector< T, S >::Get(), and infos.
| ContentInfo * ClientNetworkContentSocketHandler::GetContent | ( | ContentID | cid | ) | [protected] |
Get the content info based on a ContentID.
| cid | the ContentID to search for |
Definition at line 852 of file network_content.cpp.
References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), ContentInfo::id, and infos.
Referenced by CheckDependencyState(), Select(), and Unselect().
| uint ClientNetworkContentSocketHandler::Length | ( | ) | const [inline] |
Get the number of content items we know locally.
Definition at line 134 of file network_content.h.
References infos, and SmallVector< T, S >::Length().
| void ClientNetworkContentSocketHandler::OnFailure | ( | ) | [protected, virtual] |
An error has occurred and the connection has been closed.
Implements HTTPCallback.
Definition at line 599 of file network_content.cpp.
References curFile, curInfo, DownloadSelectedContent(), http_response, http_response_index, and SmallVector< T, S >::Reset().
Referenced by OnReceiveData().
| void ClientNetworkContentSocketHandler::OnReceiveData | ( | const char * | data, | |
| size_t | length | |||
| ) | [protected, virtual] |
We're receiving data.
| data | the received data, NULL when all data has been received. | |
| length | the amount of received data, 0 when all data has been received. |
Check p for not being null and return calling OnFailure if that's not the case.
Check p for not being null and then terminate, or return calling OnFailure.
Implements HTTPCallback.
Definition at line 618 of file network_content.cpp.
References AfterDownload(), SmallVector< T, S >::Append(), BeforeDownload(), SmallVector< T, S >::Begin(), Connect(), curFile, curInfo, ContentInfo::filename, ContentInfo::filesize, http_response, http_response_index, ContentInfo::id, lastof, SmallVector< T, S >::Length(), OnFailure(), strecpy(), and ContentInfo::type.
| void ClientNetworkContentSocketHandler::RequestContentList | ( | ContentVector * | cv, | |
| bool | send_md5sum = true | |||
| ) |
Request the content list for a list of content.
| cv | List with unique IDs and MD5 checksums. | |
| send_md5sum | Whether we want a MD5 checksum matched set of files or not. |
Definition at line 244 of file network_content.cpp.
References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), Connect(), SmallVector< T, S >::End(), infos, SmallVector< T, S >::Length(), ContentInfo::md5sum, PACKET_CONTENT_CLIENT_INFO_EXTID, PACKET_CONTENT_CLIENT_INFO_EXTID_MD5, SEND_MTU, NetworkTCPSocketHandler::SendPacket(), ContentInfo::type, and ContentInfo::unique_id.
| void ClientNetworkContentSocketHandler::RequestContentList | ( | uint | count, | |
| const ContentID * | content_ids | |||
| ) |
Request the content list for a given number of content IDs.
| count | The number of IDs to request. | |
| content_ids | The unique identifiers of the content to request information about. |
Definition at line 214 of file network_content.cpp.
References Connect(), min(), PACKET_CONTENT_CLIENT_INFO_ID, SEND_MTU, Packet::Send_uint16(), Packet::Send_uint32(), and NetworkTCPSocketHandler::SendPacket().
| void ClientNetworkContentSocketHandler::RequestContentList | ( | ContentType | type | ) |
Request the content list for the given type.
| type | The content type to request the list for. |
Definition at line 184 of file network_content.cpp.
References Connect(), CONTENT_TYPE_AI, CONTENT_TYPE_AI_LIBRARY, CONTENT_TYPE_BASE_GRAPHICS, CONTENT_TYPE_BASE_MUSIC, CONTENT_TYPE_BASE_SOUNDS, CONTENT_TYPE_END, CONTENT_TYPE_GAME, CONTENT_TYPE_GAME_LIBRARY, CONTENT_TYPE_HEIGHTMAP, CONTENT_TYPE_NEWGRF, CONTENT_TYPE_SCENARIO, PACKET_CONTENT_CLIENT_INFO_LIST, Packet::Send_uint32(), Packet::Send_uint8(), and NetworkTCPSocketHandler::SendPacket().
Referenced by DownloadContentInfo(), AIConfigWindow::OnClick(), BootstrapAskForDownloadWindow::OnConnect(), and ShowNetworkContentListWindow().
| void ClientNetworkContentSocketHandler::ReverseLookupDependency | ( | ConstContentVector & | parents, | |
| const ContentInfo * | child | |||
| ) | const |
Reverse lookup the dependencies of (direct) parents over a given child.
| parents | list to store all parents in (is not cleared) | |
| child | the child to search the parents' dependencies for |
Definition at line 944 of file network_content.cpp.
References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), ContentInfo::dependencies, ContentInfo::dependency_count, SmallVector< T, S >::End(), ContentInfo::id, and infos.
Referenced by CheckDependencyState(), and ReverseLookupTreeDependency().
| void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency | ( | ConstContentVector & | tree, | |
| const ContentInfo * | child | |||
| ) | const |
Reverse lookup the dependencies of all parents over a given child.
| tree | list to store all parents in (is not cleared) | |
| child | the child to search the parents' dependencies for |
Definition at line 964 of file network_content.cpp.
References SmallVector< T, S >::Append(), SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), SmallVector< T, S >::Include(), SmallVector< T, S >::Length(), and ReverseLookupDependency().
Referenced by CheckDependencyState(), and NetworkContentListWindow::DrawDetails().
| void ClientNetworkContentSocketHandler::Select | ( | ContentID | cid | ) |
Select a specific content id.
| cid | the content ID to select |
Definition at line 866 of file network_content.cpp.
References CheckDependencyState(), GetContent(), ContentInfo::state, and ContentInfo::UNSELECTED.
Referenced by BootstrapAskForDownloadWindow::OnReceiveContentInfo(), and ToggleSelectedState().
| void ClientNetworkContentSocketHandler::Unselect | ( | ContentID | cid | ) |
Unselect a specific content id.
| cid | the content ID to deselect |
Definition at line 879 of file network_content.cpp.
References CheckDependencyState(), GetContent(), ContentInfo::IsSelected(), and ContentInfo::state.
Referenced by CheckDependencyState(), and ToggleSelectedState().
| void ClientNetworkContentSocketHandler::UnselectAll | ( | ) |
Unselect everything that we've not downloaded so far.
Definition at line 913 of file network_content.cpp.
References SmallVector< T, S >::Begin(), SmallVector< T, S >::End(), infos, ContentInfo::IsSelected(), ContentInfo::state, and ContentInfo::UNSELECTED.
const int ClientNetworkContentSocketHandler::IDLE_TIMEOUT = 60 * 1000 [static] |
The idle timeout; when to close the connection because it's idle.
Definition at line 107 of file network_content.h.
Referenced by SendReceive().
1.7.1