data
Utilities to read and write EO data types.
CHAR_MAX = 253
module-attribute
The maximum value of an EO char (1-byte encoded integer type).
SHORT_MAX = CHAR_MAX * CHAR_MAX
module-attribute
The maximum value of an EO short (2-byte encoded integer type).
THREE_MAX = CHAR_MAX * CHAR_MAX * CHAR_MAX
module-attribute
The maximum value of an EO three (3-byte encoded integer type).
INT_MAX = CHAR_MAX * CHAR_MAX * CHAR_MAX * CHAR_MAX
module-attribute
The maximum value of an EO int (4-byte encoded integer type).
EoReader
Bases: object
A class for reading EO data from a sequence of bytes.
EoReader
features a chunked reading mode, which is important for accurate emulation of
the official game client.
See documentation for chunked reading: https://github.com/Cirras/eo-protocol/blob/master/docs/chunks.md
Source code in src/eolib/data/eo_reader.py
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 |
|
chunked_reading_mode: bool
property
writable
bool: Gets or sets the chunked reading mode for the reader.
In chunked reading mode:
- The reader will treat 0xFF
bytes as the end of the current chunk.
- next_chunk()
can be called to move to the next chunk.
remaining: int
property
If chunked reading mode is enabled, gets the number of bytes remaining in the current
chunk. Otherwise, gets the total number of bytes remaining in the input data.
position: int
property
int: Gets the current position in the input data.
__init__(data)
Creates a new EoReader
instance for the specified data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
data |
bytes
|
The byte array containing the input data. |
required |
Source code in src/eolib/data/eo_reader.py
23 24 25 26 27 28 29 30 31 32 33 34 |
|
slice(index=None, length=None)
Creates a new EoReader
whose input data is a shared subsequence of this reader's
data.
The input data of the new reader will start at position index
in this reader and contain
up to length
bytes. The two reader's position and chunked reading mode will be
independent.
The new reader's position will be zero, and its chunked reading mode will be false.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
index |
int
|
The position in this reader at which the data of the new reader will start; must be non-negative. Defaults to the current reader position. |
None
|
length |
int
|
The length of the shared subsequence of data to supply to the
new reader; must be non-negative. Defaults to the length of the remaining data
starting from |
None
|
Returns:
Name | Type | Description |
---|---|---|
EoReader |
EoReader
|
The new reader. |
Raises:
Type | Description |
---|---|
ValueError
|
If |
Source code in src/eolib/data/eo_reader.py
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
|
get_byte()
Reads a raw byte from the input data.
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
A raw byte. |
Source code in src/eolib/data/eo_reader.py
76 77 78 79 80 81 82 83 |
|
get_bytes(length)
Reads an array of raw bytes from the input data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
length |
int
|
The number of bytes to read. |
required |
Returns:
Name | Type | Description |
---|---|---|
bytearray |
bytearray
|
An array of raw bytes. |
Source code in src/eolib/data/eo_reader.py
85 86 87 88 89 90 91 92 93 94 95 |
|
get_char()
Reads an encoded 1-byte integer from the input data.
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
A decoded 1-byte integer. |
Source code in src/eolib/data/eo_reader.py
97 98 99 100 101 102 103 104 |
|
get_short()
Reads an encoded 2-byte integer from the input data.
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
A decoded 2-byte integer. |
Source code in src/eolib/data/eo_reader.py
106 107 108 109 110 111 112 113 |
|
get_three()
Reads an encoded 3-byte integer from the input data.
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
A decoded 3-byte integer. |
Source code in src/eolib/data/eo_reader.py
115 116 117 118 119 120 121 122 |
|
get_int()
Reads an encoded 4-byte integer from the input data.
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
A decoded 4-byte integer. |
Source code in src/eolib/data/eo_reader.py
124 125 126 127 128 129 130 131 |
|
get_string()
Reads a string from the input data.
Returns:
Name | Type | Description |
---|---|---|
str |
str
|
A string. |
Source code in src/eolib/data/eo_reader.py
133 134 135 136 137 138 139 140 141 |
|
get_fixed_string(length, padded=False)
Reads a string with a fixed length from the input data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
length |
int
|
The length of the string. |
required |
padded |
bool
|
True if the string is padded with trailing |
False
|
Returns:
Name | Type | Description |
---|---|---|
str |
str
|
A decoded string. |
Raises:
Type | Description |
---|---|
ValueError
|
If the length is negative. |
Source code in src/eolib/data/eo_reader.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
|
get_encoded_string()
Reads an encoded string from the input data.
Returns:
Name | Type | Description |
---|---|---|
str |
str
|
A decoded string. |
Source code in src/eolib/data/eo_reader.py
164 165 166 167 168 169 170 171 172 173 |
|
get_fixed_encoded_string(length, padded=False)
Reads an encoded string with a fixed length from the input data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
length |
int
|
The length of the string. |
required |
padded |
bool
|
True if the string is padded with trailing |
False
|
Returns:
Name | Type | Description |
---|---|---|
str |
str
|
A decoded string. |
Raises:
Type | Description |
---|---|
ValueError
|
If the length is negative. |
Source code in src/eolib/data/eo_reader.py
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
|
next_chunk()
Moves the reader position to the start of the next chunk in the input data.
Raises:
Type | Description |
---|---|
RuntimeError
|
If not in chunked reading mode. |
Source code in src/eolib/data/eo_reader.py
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
|
EoWriter
Source code in src/eolib/data/eo_writer.py
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
|
data = bytearray()
instance-attribute
string_sanitization_mode: bool
property
writable
Gets the string sanitization mode for the writer.
Returns:
Name | Type | Description |
---|---|---|
bool |
bool
|
True if string sanitization is enabled. |
__init__()
Source code in src/eolib/data/eo_writer.py
7 8 9 |
|
add_byte(value)
Adds a raw byte to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
value |
int
|
The byte to add. |
required |
Raises:
Type | Description |
---|---|
ValueError
|
If the value is above |
Source code in src/eolib/data/eo_writer.py
11 12 13 14 15 16 17 18 19 20 21 22 |
|
add_bytes(bytes)
Adds raw bytes to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
bytes |
bytes
|
The bytes to add. |
required |
Source code in src/eolib/data/eo_writer.py
24 25 26 27 28 29 30 31 |
|
add_char(number)
Adds an encoded 1-byte integer to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
number |
int
|
The number to encode and add. |
required |
Raises:
Type | Description |
---|---|
ValueError
|
If the value is not below |
Source code in src/eolib/data/eo_writer.py
33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
add_short(number)
Adds an encoded 2-byte integer to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
number |
int
|
The number to encode and add. |
required |
Raises:
Type | Description |
---|---|
ValueError
|
If the value is not below |
Source code in src/eolib/data/eo_writer.py
47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
add_three(number)
Adds an encoded 3-byte integer to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
number |
int
|
The number to encode and add. |
required |
Raises:
Type | Description |
---|---|
ValueError
|
If the value is not below |
Source code in src/eolib/data/eo_writer.py
61 62 63 64 65 66 67 68 69 70 71 72 73 |
|
add_int(number)
Adds an encoded 4-byte integer to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
number |
int
|
The number to encode and add. |
required |
Raises:
Type | Description |
---|---|
ValueError
|
If the value is not below |
Source code in src/eolib/data/eo_writer.py
75 76 77 78 79 80 81 82 83 84 85 86 87 |
|
add_string(string)
Adds a string to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
string |
str
|
The string to be added. |
required |
Source code in src/eolib/data/eo_writer.py
89 90 91 92 93 94 95 96 97 98 |
|
add_fixed_string(string, length, padded=False)
Adds a fixed-length string to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
string |
str
|
The string to be added. |
required |
length |
int
|
The expected length of the string. |
required |
padded |
bool
|
True if the string should be padded to the length with
trailing |
False
|
Source code in src/eolib/data/eo_writer.py
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
|
add_encoded_string(string)
Adds an encoded string to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
string |
str
|
The string to be encoded and added. |
required |
Source code in src/eolib/data/eo_writer.py
117 118 119 120 121 122 123 124 125 126 127 |
|
add_fixed_encoded_string(string, length, padded=False)
Adds a fixed-length encoded string to the writer data.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
string |
str
|
The string to be encoded and added. |
required |
length |
int
|
The expected length of the string. |
required |
padded |
bool
|
True if the string should be padded to the length with
trailing |
False
|
Source code in src/eolib/data/eo_writer.py
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
|
to_bytearray()
Gets the writer data as a byte array.
Returns:
Name | Type | Description |
---|---|---|
bytearray |
bytearray
|
A copy of the writer data as a byte array. |
Source code in src/eolib/data/eo_writer.py
161 162 163 164 165 166 167 168 |
|
__len__()
Gets the length of the writer data.
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
The length of the writer data. |
Source code in src/eolib/data/eo_writer.py
170 171 172 173 174 175 176 177 |
|
decode_number(encoded_number)
Decodes a number from a sequence of bytes.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
encoded_number |
bytes
|
The sequence of bytes to decode. |
required |
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
The decoded number. |
Source code in src/eolib/data/number_encoding_utils.py
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
decode_string(bytes)
Decodes a string by reversing the bytes and then inverting them.
This is an in-place operation.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
bytes |
bytearray
|
The byte array to decode. |
required |
Source code in src/eolib/data/string_encoding_utils.py
14 15 16 17 18 19 20 21 22 23 24 |
|
encode_number(number)
Encodes a number to a sequence of bytes.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
number |
int
|
The number to encode. |
required |
Returns:
Name | Type | Description |
---|---|---|
bytes |
bytes
|
The encoded sequence of bytes. |
Source code in src/eolib/data/number_encoding_utils.py
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
encode_string(bytes)
Encodes a string by inverting the bytes and then reversing them.
This is an in-place operation.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
bytes |
bytearray
|
The byte array to encode. |
required |
Source code in src/eolib/data/string_encoding_utils.py
1 2 3 4 5 6 7 8 9 10 11 |
|