OpenTTD Source: src/network/core/tcp_content_type.h Source File

OpenTTD Source 15.3

tcp_content_type.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
12#ifndef NETWORK_CORE_TCP_CONTENT_TYPE_H
13#define NETWORK_CORE_TCP_CONTENT_TYPE_H
14
15#include "../../3rdparty/md5/md5.h"
16
17#include "../../string_type.h"
18#include "../../textfile_type.h"
19
21 enum ContentType : uint8_t {
22 CONTENT_TYPE_BEGIN = 1,
23 CONTENT_TYPE_BASE_GRAPHICS = 1,
24 CONTENT_TYPE_NEWGRF = 2,
25 CONTENT_TYPE_AI = 3,
26 CONTENT_TYPE_AI_LIBRARY = 4,
27 CONTENT_TYPE_SCENARIO = 5,
28 CONTENT_TYPE_HEIGHTMAP = 6,
29 CONTENT_TYPE_BASE_SOUNDS = 7,
30 CONTENT_TYPE_BASE_MUSIC = 8,
31 CONTENT_TYPE_GAME = 9,
32 CONTENT_TYPE_GAME_LIBRARY = 10,
33 CONTENT_TYPE_END,
34 INVALID_CONTENT_TYPE = 0xFF,
35};
36using ContentTypes = EnumBitSet<ContentType, uint16_t, CONTENT_TYPE_END>;
37
39 enum PacketContentType : uint8_t {
40 PACKET_CONTENT_CLIENT_INFO_LIST,
41 PACKET_CONTENT_CLIENT_INFO_ID,
42 PACKET_CONTENT_CLIENT_INFO_EXTID,
43 PACKET_CONTENT_CLIENT_INFO_EXTID_MD5,
44 PACKET_CONTENT_SERVER_INFO,
45 PACKET_CONTENT_CLIENT_CONTENT,
46 PACKET_CONTENT_SERVER_CONTENT,
47 PACKET_CONTENT_END,
48};
49
51 using ContentID = uint32_t;
52
53 static constexpr ContentID INVALID_CONTENT_ID = UINT32_MAX;
54
56 struct ContentInfo {
58 enum class State : uint8_t {
59 Unselected,
60 Selected,
61 Autoselected,
62 AlreadyHere,
63 DoesNotExist,
64 Invalid,
65 };
66
67 ContentType type = INVALID_CONTENT_TYPE;
68 ContentID id = INVALID_CONTENT_ID;
69 uint32_t filesize = 0;
70 std::string filename;
71 std::string name;
72 std::string version;
73 std::string url;
74 std::string description;
75 uint32_t unique_id = 0;
76 MD5Hash md5sum;
77 std::vector<ContentID> dependencies;
78 StringList tags;
79 State state = State::Unselected;
80 bool upgrade = false;
81
82 bool IsSelected() const;
83 bool IsValid() const;
84 std::optional<std::string> GetTextfile(TextfileType type) const;
85};
86
87#endif /* NETWORK_CORE_TCP_CONTENT_TYPE_H */
EnumBitSet< ContentType, uint16_t, CONTENT_TYPE_END >
StringList
std::vector< std::string > StringList
Type for a list of strings.
Definition string_type.h:60
ContentInfo
Container for all important information about a piece of content.
Definition tcp_content_type.h:56
ContentInfo::unique_id
uint32_t unique_id
Unique ID; either GRF ID or shortname.
Definition tcp_content_type.h:75
ContentInfo::IsValid
bool IsValid() const
Is the information from this content info valid?
Definition tcp_content.cpp:49
ContentInfo::filesize
uint32_t filesize
Size of the file.
Definition tcp_content_type.h:69
ContentInfo::md5sum
MD5Hash md5sum
The MD5 checksum.
Definition tcp_content_type.h:76
ContentInfo::url
std::string url
URL related to the content.
Definition tcp_content_type.h:73
ContentInfo::state
State state
Whether the content info is selected (for download)
Definition tcp_content_type.h:79
ContentInfo::name
std::string name
Name of the content.
Definition tcp_content_type.h:71
ContentInfo::description
std::string description
Description of the content.
Definition tcp_content_type.h:74
ContentInfo::GetTextfile
std::optional< std::string > GetTextfile(TextfileType type) const
Search a textfile file next to this file in the content list.
Definition tcp_content.cpp:59
ContentInfo::version
std::string version
Version of the content.
Definition tcp_content_type.h:72
ContentInfo::filename
std::string filename
Filename (for the .tar.gz; only valid on download)
Definition tcp_content_type.h:70
ContentInfo::IsSelected
bool IsSelected() const
Is the state either selected or autoselected?
Definition tcp_content.cpp:32
ContentInfo::type
ContentType type
Type of content.
Definition tcp_content_type.h:67
ContentInfo::dependencies
std::vector< ContentID > dependencies
The dependencies (unique server side ids)
Definition tcp_content_type.h:77
ContentInfo::State
State
The state the content can be in.
Definition tcp_content_type.h:58
ContentInfo::State::Invalid
@ Invalid
The content's invalid.
ContentInfo::State::Unselected
@ Unselected
The content has not been selected.
ContentInfo::State::AlreadyHere
@ AlreadyHere
The content is already at the client side.
ContentInfo::State::Selected
@ Selected
The content has been manually selected.
ContentInfo::State::Autoselected
@ Autoselected
The content has been selected as dependency.
ContentInfo::State::DoesNotExist
@ DoesNotExist
The content does not exist in the content system.
ContentInfo::tags
StringList tags
Tags associated with the content.
Definition tcp_content_type.h:78
ContentInfo::upgrade
bool upgrade
This item is an upgrade.
Definition tcp_content_type.h:80
ContentID
uint32_t ContentID
Unique identifier for the content.
Definition tcp_content_type.h:51
ContentType
ContentType
The values in the enum are important; they are used as database 'keys'.
Definition tcp_content_type.h:21
CONTENT_TYPE_AI_LIBRARY
@ CONTENT_TYPE_AI_LIBRARY
The content consists of an AI library.
Definition tcp_content_type.h:26
CONTENT_TYPE_BASE_SOUNDS
@ CONTENT_TYPE_BASE_SOUNDS
The content consists of base sounds.
Definition tcp_content_type.h:29
CONTENT_TYPE_GAME_LIBRARY
@ CONTENT_TYPE_GAME_LIBRARY
The content consists of a GS library.
Definition tcp_content_type.h:32
CONTENT_TYPE_BASE_GRAPHICS
@ CONTENT_TYPE_BASE_GRAPHICS
The content consists of base graphics.
Definition tcp_content_type.h:23
CONTENT_TYPE_AI
@ CONTENT_TYPE_AI
The content consists of an AI.
Definition tcp_content_type.h:25
CONTENT_TYPE_SCENARIO
@ CONTENT_TYPE_SCENARIO
The content consists of a scenario.
Definition tcp_content_type.h:27
CONTENT_TYPE_NEWGRF
@ CONTENT_TYPE_NEWGRF
The content consists of a NewGRF.
Definition tcp_content_type.h:24
CONTENT_TYPE_BEGIN
@ CONTENT_TYPE_BEGIN
Helper to mark the begin of the types.
Definition tcp_content_type.h:22
CONTENT_TYPE_BASE_MUSIC
@ CONTENT_TYPE_BASE_MUSIC
The content consists of base music.
Definition tcp_content_type.h:30
CONTENT_TYPE_GAME
@ CONTENT_TYPE_GAME
The content consists of a game script.
Definition tcp_content_type.h:31
INVALID_CONTENT_TYPE
@ INVALID_CONTENT_TYPE
Invalid/uninitialized content.
Definition tcp_content_type.h:34
CONTENT_TYPE_END
@ CONTENT_TYPE_END
Helper to mark the end of the types.
Definition tcp_content_type.h:33
CONTENT_TYPE_HEIGHTMAP
@ CONTENT_TYPE_HEIGHTMAP
The content consists of a heightmap.
Definition tcp_content_type.h:28
INVALID_CONTENT_ID
static constexpr ContentID INVALID_CONTENT_ID
Sentinel for invalid content.
Definition tcp_content_type.h:53
PacketContentType
PacketContentType
Enum with all types of TCP content packets.
Definition tcp_content_type.h:39
PACKET_CONTENT_CLIENT_CONTENT
@ PACKET_CONTENT_CLIENT_CONTENT
Request a content file given an internal ID.
Definition tcp_content_type.h:45
PACKET_CONTENT_END
@ PACKET_CONTENT_END
Must ALWAYS be on the end of this list!! (period)
Definition tcp_content_type.h:47
PACKET_CONTENT_CLIENT_INFO_LIST
@ PACKET_CONTENT_CLIENT_INFO_LIST
Queries the content server for a list of info of a given content type.
Definition tcp_content_type.h:40
PACKET_CONTENT_CLIENT_INFO_EXTID_MD5
@ PACKET_CONTENT_CLIENT_INFO_EXTID_MD5
Queries the content server for information about a list of external IDs and MD5.
Definition tcp_content_type.h:43
PACKET_CONTENT_SERVER_INFO
@ PACKET_CONTENT_SERVER_INFO
Reply of content server with information about content.
Definition tcp_content_type.h:44
PACKET_CONTENT_SERVER_CONTENT
@ PACKET_CONTENT_SERVER_CONTENT
Reply with the content of the given ID.
Definition tcp_content_type.h:46
PACKET_CONTENT_CLIENT_INFO_ID
@ PACKET_CONTENT_CLIENT_INFO_ID
Queries the content server for information about a list of internal IDs.
Definition tcp_content_type.h:41
PACKET_CONTENT_CLIENT_INFO_EXTID
@ PACKET_CONTENT_CLIENT_INFO_EXTID
Queries the content server for information about a list of external IDs.
Definition tcp_content_type.h:42
TextfileType
TextfileType
Additional text files accompanying Tar archives.
Definition textfile_type.h:14