@sanctumterra/raknet 1.3.2 → 1.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.d.ts +14 -0
- package/build/raknet.node +0 -0
- package/package.json +10 -2
- package/.github/workflows/publish.yml +0 -41
- package/Cargo.toml +0 -16
- package/build.rs +0 -3
- package/src/binarystream/binarystream.rs +0 -313
- package/src/binarystream/endianess.rs +0 -5
- package/src/binarystream/mod.rs +0 -6
- package/src/client/client.rs +0 -201
- package/src/client/framer.rs +0 -391
- package/src/client/mod.rs +0 -5
- package/src/lib.rs +0 -68
- package/src/main.rs +0 -46
- package/src/packets/ack.rs +0 -82
- package/src/packets/connected_ping.rs +0 -27
- package/src/packets/connected_pong.rs +0 -29
- package/src/packets/connection_request.rs +0 -34
- package/src/packets/connection_request_accepted.rs +0 -55
- package/src/packets/frameset.rs +0 -40
- package/src/packets/mod.rs +0 -34
- package/src/packets/nack.rs +0 -82
- package/src/packets/new_incomming_connection.rs +0 -49
- package/src/packets/open_connection_reply_one.rs +0 -48
- package/src/packets/open_connection_reply_two.rs +0 -43
- package/src/packets/open_connection_request_one.rs +0 -56
- package/src/packets/open_connection_request_two.rs +0 -34
- package/src/packets/packet.rs +0 -45
- package/src/packets/packet_types.rs +0 -62
- package/src/packets/types/address.rs +0 -75
- package/src/packets/types/data_type.rs +0 -6
- package/src/packets/types/flags.rs +0 -6
- package/src/packets/types/frame.rs +0 -74
- package/src/packets/types/mod.rs +0 -14
- package/src/packets/types/priority.rs +0 -5
- package/src/packets/types/reliability.rs +0 -45
- package/src/packets/unconnected_ping.rs +0 -41
- package/src/socket/mod.rs +0 -3
- package/src/socket/socket.rs +0 -60
- package/src_client/client/client-events.ts +0 -38
- package/src_client/client/client.ts +0 -146
- package/src_client/client/client_options.ts +0 -17
- package/src_client/client/index.ts +0 -3
- package/src_client/index.ts +0 -4
- package/src_client/proto/decorators/create.ts +0 -87
- package/src_client/proto/decorators/index.ts +0 -2
- package/src_client/proto/decorators/serialize.ts +0 -17
- package/src_client/proto/enums/flags.ts +0 -6
- package/src_client/proto/enums/index.ts +0 -4
- package/src_client/proto/enums/packet.ts +0 -121
- package/src_client/proto/enums/priority.ts +0 -4
- package/src_client/proto/enums/reliability.ts +0 -10
- package/src_client/proto/index.ts +0 -4
- package/src_client/proto/packets/ack.ts +0 -82
- package/src_client/proto/packets/base-packet.ts +0 -38
- package/src_client/proto/packets/connected-ping.ts +0 -9
- package/src_client/proto/packets/connected-pong.ts +0 -10
- package/src_client/proto/packets/connection-request-accepted.ts +0 -14
- package/src_client/proto/packets/connection-request.ts +0 -11
- package/src_client/proto/packets/frameset.ts +0 -15
- package/src_client/proto/packets/index.ts +0 -16
- package/src_client/proto/packets/nack.ts +0 -84
- package/src_client/proto/packets/new-incoming-connection.ts +0 -14
- package/src_client/proto/packets/open-connection-reply-one.ts +0 -22
- package/src_client/proto/packets/open-connection-reply-two.ts +0 -14
- package/src_client/proto/packets/open-connection-request-one.ts +0 -12
- package/src_client/proto/packets/open-connection-request-two.ts +0 -13
- package/src_client/proto/packets/types/address.ts +0 -106
- package/src_client/proto/packets/types/data-type.ts +0 -38
- package/src_client/proto/packets/types/frame.ts +0 -114
- package/src_client/proto/packets/types/index.ts +0 -6
- package/src_client/proto/packets/types/magic.ts +0 -14
- package/src_client/proto/packets/types/mtu.ts +0 -19
- package/src_client/proto/packets/types/sys-address.ts +0 -35
- package/src_client/proto/packets/unconnected-ping.ts +0 -12
- package/src_client/proto/packets/unconnected-pong.ts +0 -13
- package/src_client/proto/types/advertisement.ts +0 -40
- package/src_client/proto/types/index.ts +0 -2
- package/src_client/proto/types/valid.ts +0 -58
package/build/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
export declare class RaknetClient {
|
|
7
|
+
constructor(ip?: string | undefined | null, port?: number | undefined | null, mtuSize?: number | undefined | null)
|
|
8
|
+
connect(): void
|
|
9
|
+
tick(): void
|
|
10
|
+
ping(): void
|
|
11
|
+
receive(): Buffer
|
|
12
|
+
frameAndSend(buffer: Buffer): void
|
|
13
|
+
send(buffer: Buffer): void
|
|
14
|
+
}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanctumterra/raknet",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.22",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build:rust": "napi build --
|
|
7
|
+
"build:rust": "napi build --release build",
|
|
8
8
|
"build:ts": "tsc",
|
|
9
9
|
"dev": "npm run build:rust && npm run build:ts",
|
|
10
10
|
"format": "npx @biomejs/biome format ./src_client",
|
|
@@ -35,6 +35,14 @@
|
|
|
35
35
|
]
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
|
+
"files": [
|
|
39
|
+
"RakNet-win.node",
|
|
40
|
+
"RakNet-linux.node",
|
|
41
|
+
"RakNet-osx.node",
|
|
42
|
+
"build",
|
|
43
|
+
"dist",
|
|
44
|
+
"tsconfig.json"
|
|
45
|
+
],
|
|
38
46
|
"devDependencies": {
|
|
39
47
|
"@biomejs/biome": "^1.9.4",
|
|
40
48
|
"@napi-rs/cli": "^2.18.4",
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
name: Publish to NPM
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- develop
|
|
7
|
-
- main # Change this to your default branch if different
|
|
8
|
-
|
|
9
|
-
jobs:
|
|
10
|
-
build:
|
|
11
|
-
runs-on: ubuntu-latest
|
|
12
|
-
|
|
13
|
-
steps:
|
|
14
|
-
- name: Checkout code
|
|
15
|
-
uses: actions/checkout@v4
|
|
16
|
-
|
|
17
|
-
- name: Set up Node.js
|
|
18
|
-
uses: actions/setup-node@v4
|
|
19
|
-
with:
|
|
20
|
-
node-version: '20' # Ensure this matches your engines.node version
|
|
21
|
-
registry-url: 'https://registry.npmjs.org'
|
|
22
|
-
|
|
23
|
-
- name: Install dependencies
|
|
24
|
-
run: npm install
|
|
25
|
-
|
|
26
|
-
- name: Run lint
|
|
27
|
-
run: npm run lint
|
|
28
|
-
|
|
29
|
-
- name: Clean build directory
|
|
30
|
-
run: rm -rf build dist # Clean previous build artifacts
|
|
31
|
-
|
|
32
|
-
- name: Build Rust
|
|
33
|
-
run: npm run build:rust
|
|
34
|
-
|
|
35
|
-
- name: Build TypeScript
|
|
36
|
-
run: npm run build:ts
|
|
37
|
-
|
|
38
|
-
- name: Publish to NPM
|
|
39
|
-
run: npm publish --access=public
|
|
40
|
-
env:
|
|
41
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/Cargo.toml
DELETED
package/build.rs
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
use std::error::Error;
|
|
2
|
-
|
|
3
|
-
use super::Endianness;
|
|
4
|
-
|
|
5
|
-
#[derive(Debug)]
|
|
6
|
-
pub enum BinaryStreamError {
|
|
7
|
-
OutOfBounds,
|
|
8
|
-
InvalidLength,
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
impl std::fmt::Display for BinaryStreamError {
|
|
12
|
-
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
13
|
-
write!(f, "{:?}", self)
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
impl Error for BinaryStreamError {}
|
|
18
|
-
|
|
19
|
-
#[derive(Debug)]
|
|
20
|
-
pub struct BinaryStream {
|
|
21
|
-
pub binary: Vec<u8>,
|
|
22
|
-
offset: u32
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
impl BinaryStream {
|
|
26
|
-
pub fn new(binary: Option<Vec<u8>>, offset: Option<u32>) -> Self {
|
|
27
|
-
let bin = match binary {
|
|
28
|
-
Some(buffer) => buffer,
|
|
29
|
-
None => vec![],
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
let offset = match offset {
|
|
33
|
-
Some(offset) => offset,
|
|
34
|
-
None => 0,
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
BinaryStream {
|
|
38
|
-
binary: bin,
|
|
39
|
-
offset,
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
pub fn from(binary: Vec<u8>, offset: Option<u32>) -> Self {
|
|
44
|
-
let offset = match offset {
|
|
45
|
-
Some(offset) => offset,
|
|
46
|
-
None => 0,
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
BinaryStream {
|
|
50
|
-
binary: binary,
|
|
51
|
-
offset,
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
pub fn read(&mut self, length: u32) -> Result<Vec<u8>, BinaryStreamError> {
|
|
56
|
-
if length > self.binary.len() as u32 {
|
|
57
|
-
return Err(BinaryStreamError::InvalidLength);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if self.offset + length > self.binary.len() as u32 {
|
|
61
|
-
return Err(BinaryStreamError::OutOfBounds);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let start = self.offset as usize;
|
|
65
|
-
let end = (self.offset + length) as usize;
|
|
66
|
-
self.offset += length;
|
|
67
|
-
|
|
68
|
-
Ok(self.binary[start..end].to_vec())
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
pub fn write(&mut self, data: Vec<u8>) {
|
|
72
|
-
self.binary.extend(data);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
pub fn read_remaining(&mut self) -> Vec<u8> {
|
|
76
|
-
let start = self.offset as usize;
|
|
77
|
-
let end = self.binary.len();
|
|
78
|
-
self.offset = end as u32;
|
|
79
|
-
|
|
80
|
-
self.binary[start..end].to_vec()
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
pub fn skip(&mut self, length: u32) {
|
|
84
|
-
self.offset += length;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
pub fn cursor_at_end(&self) -> bool {
|
|
88
|
-
self.offset == self.binary.len() as u32
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
pub fn cursor_at_start(&self) -> bool {
|
|
92
|
-
self.offset == 0
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
pub fn get_offset(&self) -> u32 {
|
|
96
|
-
self.offset
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
pub fn read_bytes(&mut self, length: u32) -> Result<Vec<u8>, BinaryStreamError> {
|
|
100
|
-
Ok(self.read(length)?)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
pub fn write_bytes(&mut self, data: Vec<u8>) {
|
|
104
|
-
self.write(data);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
pub fn read_u8(&mut self) -> Result<u8, BinaryStreamError> {
|
|
108
|
-
let bytes = self.read(1)?;
|
|
109
|
-
Ok(bytes[0])
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
pub fn write_u8(&mut self, value: u8) {
|
|
113
|
-
self.write(vec![value]);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
pub fn read_magic(&mut self) -> Result<Vec<u8>, BinaryStreamError> {
|
|
117
|
-
let magic = self.read(16)?;
|
|
118
|
-
Ok(magic)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
pub fn write_magic(&mut self, magic: Vec<u8>) {
|
|
122
|
-
self.write(magic);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
pub fn read_u16(&mut self, endianness: Option<Endianness>) -> Result<u16, BinaryStreamError> {
|
|
126
|
-
let bytes = self.read(2)?;
|
|
127
|
-
Ok(match endianness.unwrap_or(Endianness::Big) {
|
|
128
|
-
Endianness::Big => u16::from_be_bytes(bytes.try_into().unwrap()),
|
|
129
|
-
Endianness::Little => u16::from_le_bytes(bytes.try_into().unwrap()),
|
|
130
|
-
})
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
pub fn write_u16(&mut self, value: u16, endianness: Option<Endianness>) {
|
|
134
|
-
let bytes = match endianness.unwrap_or(Endianness::Big) {
|
|
135
|
-
Endianness::Big => value.to_be_bytes(),
|
|
136
|
-
Endianness::Little => value.to_le_bytes(),
|
|
137
|
-
};
|
|
138
|
-
self.write(bytes.to_vec());
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
pub fn read_u64(&mut self, endianness: Option<Endianness>) -> Result<u64, BinaryStreamError> {
|
|
142
|
-
let bytes = self.read(8)?;
|
|
143
|
-
let bytes: [u8; 8] = bytes.try_into()
|
|
144
|
-
.map_err(|_| BinaryStreamError::InvalidLength)?;
|
|
145
|
-
|
|
146
|
-
Ok(match endianness.unwrap_or(Endianness::Little) {
|
|
147
|
-
Endianness::Big => u64::from_be_bytes(bytes),
|
|
148
|
-
Endianness::Little => u64::from_le_bytes(bytes),
|
|
149
|
-
})
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
pub fn write_u64(&mut self, value: u64, endianness: Option<Endianness>) {
|
|
153
|
-
let bytes = match endianness.unwrap_or(Endianness::Little) {
|
|
154
|
-
Endianness::Big => value.to_be_bytes(),
|
|
155
|
-
Endianness::Little => value.to_le_bytes(),
|
|
156
|
-
};
|
|
157
|
-
self.write(bytes.to_vec());
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
pub fn read_u32(&mut self, endianness: Option<Endianness>) -> Result<u32, BinaryStreamError> {
|
|
161
|
-
let endian = match endianness {
|
|
162
|
-
Some(endian) => endian,
|
|
163
|
-
None => Endianness::Big,
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
let bytes = match self.read(4) {
|
|
167
|
-
Ok(bytes) => bytes,
|
|
168
|
-
Err(err) => return Err(err)
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
match endian {
|
|
172
|
-
Endianness::Big => Ok(u32::from_be_bytes([bytes[0], bytes[1], bytes[2], bytes[3]])),
|
|
173
|
-
Endianness::Little => Ok(u32::from_le_bytes([bytes[0], bytes[1], bytes[2], bytes[3]])),
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
pub fn write_u32(&mut self, value: u32, endianness: Option<Endianness>) {
|
|
178
|
-
let endian = match endianness {
|
|
179
|
-
Some(endian) => endian,
|
|
180
|
-
None => Endianness::Big,
|
|
181
|
-
};
|
|
182
|
-
match endian {
|
|
183
|
-
Endianness::Big => self.write(value.to_be_bytes().to_vec()),
|
|
184
|
-
Endianness::Little => self.write(value.to_le_bytes().to_vec()),
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
pub fn read_bool(&mut self) -> Result<bool, BinaryStreamError> {
|
|
189
|
-
let value = self.read_u8()?;
|
|
190
|
-
Ok(value != 0)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
pub fn write_bool(&mut self, value: bool) {
|
|
194
|
-
self.write_u8(if value { 1 } else { 0 });
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
pub fn read_u24(&mut self, endianness: Option<Endianness>) -> Result<u32, BinaryStreamError> {
|
|
198
|
-
let endian = match endianness {
|
|
199
|
-
Some(endian) => endian,
|
|
200
|
-
None => Endianness::Big,
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
let bytes = match self.read(3) {
|
|
204
|
-
Ok(bytes) => bytes,
|
|
205
|
-
Err(err) => return Err(err)
|
|
206
|
-
};
|
|
207
|
-
|
|
208
|
-
match endian {
|
|
209
|
-
Endianness::Big => Ok(u32::from_be_bytes([0, bytes[0], bytes[1], bytes[2]])),
|
|
210
|
-
Endianness::Little => Ok(u32::from_le_bytes([bytes[0], bytes[1], bytes[2], 0])),
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
pub fn write_u24(&mut self, value: u32, endianness: Option<Endianness>) {
|
|
215
|
-
let endian = match endianness {
|
|
216
|
-
Some(endian) => endian,
|
|
217
|
-
None => Endianness::Big,
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
match endian {
|
|
221
|
-
Endianness::Big => self.write(value.to_be_bytes()[1..].to_vec()),
|
|
222
|
-
Endianness::Little => self.write(value.to_le_bytes()[..3].to_vec()),
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
pub fn read_i16(&mut self, endianness: Option<Endianness>) -> Result<i16, BinaryStreamError> {
|
|
227
|
-
let endian = match endianness {
|
|
228
|
-
Some(endian) => endian,
|
|
229
|
-
None => Endianness::Big,
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
let bytes = match self.read(2) {
|
|
233
|
-
Ok(bytes) => bytes,
|
|
234
|
-
Err(err) => return Err(err)
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
match endian {
|
|
238
|
-
Endianness::Big => Ok(i16::from_be_bytes([bytes[0], bytes[1]])),
|
|
239
|
-
Endianness::Little => Ok(i16::from_le_bytes([bytes[0], bytes[1]])),
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
pub fn write_i16(&mut self, value: i16, endianness: Option<Endianness>) {
|
|
244
|
-
let endian = match endianness {
|
|
245
|
-
Some(endian) => endian,
|
|
246
|
-
None => Endianness::Big,
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
match endian {
|
|
250
|
-
Endianness::Big => self.write(value.to_be_bytes().to_vec()),
|
|
251
|
-
Endianness::Little => self.write(value.to_le_bytes().to_vec()),
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
pub fn read_i64(&mut self, endianness: Option<Endianness>) -> Result<i64, BinaryStreamError> {
|
|
256
|
-
let bytes = self.read(8)?;
|
|
257
|
-
let bytes: [u8; 8] = bytes.try_into()
|
|
258
|
-
.map_err(|_| BinaryStreamError::InvalidLength)?;
|
|
259
|
-
Ok(match endianness.unwrap_or(Endianness::Big) {
|
|
260
|
-
Endianness::Big => i64::from_be_bytes(bytes),
|
|
261
|
-
Endianness::Little => i64::from_le_bytes(bytes),
|
|
262
|
-
})
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
pub fn write_i64(&mut self, value: i64, endianness: Option<Endianness>) {
|
|
266
|
-
let endian = match endianness {
|
|
267
|
-
Some(endian) => endian,
|
|
268
|
-
None => Endianness::Big,
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
match endian {
|
|
272
|
-
Endianness::Big => self.write(value.to_be_bytes().to_vec()),
|
|
273
|
-
Endianness::Little => self.write(value.to_le_bytes().to_vec()),
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
pub fn read_long(&mut self, endianness: Option<Endianness>) -> Result<i64, BinaryStreamError> {
|
|
278
|
-
Ok(self.read_i64(Some(endianness.unwrap_or(Endianness::Big)))?)
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
pub fn write_long(&mut self, value: i64, endianness: Option<Endianness>) {
|
|
282
|
-
self.write_i64(value, Some(endianness.unwrap_or(Endianness::Big)));
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
pub fn read_short(&mut self, endianness: Option<Endianness>) -> Result<u16, BinaryStreamError> {
|
|
286
|
-
let bytes = self.read(2)?;
|
|
287
|
-
|
|
288
|
-
match endianness.unwrap_or(Endianness::Big) {
|
|
289
|
-
Endianness::Big => Ok((bytes[0] as u16) << 8 | bytes[1] as u16),
|
|
290
|
-
Endianness::Little => Ok((bytes[1] as u16) << 8 | bytes[0] as u16),
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
pub fn write_short(&mut self, value: u16, endianness: Option<Endianness>) {
|
|
295
|
-
match endianness.unwrap_or(Endianness::Big) {
|
|
296
|
-
Endianness::Big => {
|
|
297
|
-
self.write(vec![(value >> 8) as u8, (value & 0xFF) as u8]);
|
|
298
|
-
},
|
|
299
|
-
Endianness::Little => {
|
|
300
|
-
self.write(vec![(value & 0xFF) as u8, (value >> 8) as u8]);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
pub fn read_byte(&mut self) -> Result<u8, BinaryStreamError> {
|
|
306
|
-
let byte = self.read(1)?;
|
|
307
|
-
Ok(byte[0])
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
pub fn write_byte(&mut self, value: u8) {
|
|
311
|
-
self.write(vec![value]);
|
|
312
|
-
}
|
|
313
|
-
}
|
package/src/binarystream/mod.rs
DELETED
package/src/client/client.rs
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
use chrono::Utc;
|
|
2
|
-
use rand::Rng;
|
|
3
|
-
|
|
4
|
-
use crate::{
|
|
5
|
-
packets::{
|
|
6
|
-
open_connection_request_one::OpenConnectionRequestOne, packet::Packet, packet_types::PacketType, Ack, Address, ConnectionRequest, Frame, FrameSet, OpenConnectionReplyOne, OpenConnectionReplyTwo, OpenConnectionRequestTwo, Priority, Reliability, UnconnectedPing
|
|
7
|
-
},
|
|
8
|
-
socket::{Socket, SocketError},
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
use super::Framer;
|
|
12
|
-
|
|
13
|
-
pub struct Client {
|
|
14
|
-
socket: Socket,
|
|
15
|
-
address: String,
|
|
16
|
-
pub mtu_size: u16,
|
|
17
|
-
framer: Framer,
|
|
18
|
-
port: u16,
|
|
19
|
-
guid: i64,
|
|
20
|
-
step: u32
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
impl Client {
|
|
24
|
-
pub fn new(address: Option<String>, port: Option<u16>, mtu_size: Option<u16>) -> Result<Self, SocketError> {
|
|
25
|
-
let socket = Socket::new(None, None)?;
|
|
26
|
-
let address = address.unwrap_or("127.0.0.1".to_string());
|
|
27
|
-
let port = port.unwrap_or(socket.get_local_port());
|
|
28
|
-
let guid = rand::thread_rng().gen_range(0..i64::MAX);
|
|
29
|
-
let mtu_size = mtu_size.unwrap_or(1492);
|
|
30
|
-
|
|
31
|
-
let framer = Framer::new(socket.clone(), mtu_size, address.clone(), port);
|
|
32
|
-
|
|
33
|
-
Ok(Self { socket, address, port, guid, step: 0, mtu_size, framer })
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
pub fn send(&self, buffer: &[u8]) -> Result<usize, SocketError> {
|
|
37
|
-
self.socket.send(buffer, &format!("{}:{}", self.address, self.port))
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
pub fn tick(&mut self) -> Result<(), SocketError> {
|
|
41
|
-
let _ = self.framer.tick();
|
|
42
|
-
Ok(())
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
pub fn ping(&self) -> Result<(), SocketError> {
|
|
46
|
-
let timestamp = Utc::now().timestamp();
|
|
47
|
-
let packet = UnconnectedPing::new(timestamp, self.guid);
|
|
48
|
-
let serialized = packet.serialize().unwrap();
|
|
49
|
-
self.send(&serialized)?;
|
|
50
|
-
Ok(())
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
pub fn frame_and_send(&mut self, buffer: &[u8]) -> Result<(), SocketError> {
|
|
54
|
-
let mut frame = self.pls_frame(buffer)?;
|
|
55
|
-
self.framer.send_frame(&mut frame, Priority::Immediate).unwrap();
|
|
56
|
-
Ok(())
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
pub fn get_timestamp(&self) -> i64 {
|
|
60
|
-
Utc::now().timestamp()
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
pub fn connect(&mut self) -> Result<(), SocketError> {
|
|
64
|
-
let mut mtu_size = self.mtu_size;
|
|
65
|
-
if self.step == 1 {
|
|
66
|
-
mtu_size = 1200;
|
|
67
|
-
}
|
|
68
|
-
if self.step == 2 {
|
|
69
|
-
mtu_size = 576;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
let packet = OpenConnectionRequestOne {
|
|
73
|
-
protocol_version: 11,
|
|
74
|
-
mtu_size: mtu_size as usize,
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
let serialized = packet.serialize().unwrap();
|
|
79
|
-
self.send(&serialized)?;
|
|
80
|
-
Ok(())
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
pub fn receive(&mut self) -> Result<Vec<u8>, SocketError> {
|
|
84
|
-
let mut buffer = [0; 1500];
|
|
85
|
-
let (size, _) = self.socket.receive(&mut buffer).unwrap();
|
|
86
|
-
|
|
87
|
-
if size > 0 {
|
|
88
|
-
let _ = self.handle_packet(&buffer[..size]);
|
|
89
|
-
}
|
|
90
|
-
Ok(buffer[..size].to_vec())
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
fn pls_frame(&mut self, buffer: &[u8]) -> Result<Frame, SocketError> {
|
|
94
|
-
let frame = Frame {
|
|
95
|
-
reliability: Reliability::ReliableOrdered,
|
|
96
|
-
reliable_frame_index: Some(1),
|
|
97
|
-
sequence_frame_index: None,
|
|
98
|
-
ordered_frame_index: Some(0),
|
|
99
|
-
order_channel: Some(0),
|
|
100
|
-
split_frame_index: None,
|
|
101
|
-
split_size: None,
|
|
102
|
-
split_id: None,
|
|
103
|
-
payload: buffer.to_vec()
|
|
104
|
-
};
|
|
105
|
-
Ok(frame)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
fn send_frame(&mut self, buffer: &[u8]) -> Result<(), SocketError> {
|
|
109
|
-
let mut frame = Frame {
|
|
110
|
-
reliability: Reliability::ReliableOrdered,
|
|
111
|
-
reliable_frame_index: Some(1),
|
|
112
|
-
sequence_frame_index: None,
|
|
113
|
-
ordered_frame_index: Some(0),
|
|
114
|
-
order_channel: Some(0),
|
|
115
|
-
split_frame_index: None,
|
|
116
|
-
split_size: None,
|
|
117
|
-
split_id: None,
|
|
118
|
-
payload: buffer.to_vec()
|
|
119
|
-
};
|
|
120
|
-
self.framer.send_frame(&mut frame, Priority::Immediate).unwrap();
|
|
121
|
-
Ok(())
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
fn handle_packet(&mut self, buffer: &[u8]) -> Result<(), SocketError> {
|
|
125
|
-
if buffer.is_empty() {
|
|
126
|
-
return Ok(());
|
|
127
|
-
}
|
|
128
|
-
let mut packet_type = PacketType::from(buffer[0]);
|
|
129
|
-
|
|
130
|
-
if (packet_type.to_u8() & 0xf0) == 0x80 {
|
|
131
|
-
packet_type = PacketType::FrameSet;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
match packet_type {
|
|
135
|
-
PacketType::UnconnectedPong => {
|
|
136
|
-
self.framer.add_received_packet(buffer.to_vec());
|
|
137
|
-
},
|
|
138
|
-
PacketType::OpenConnectionReplyOne => {
|
|
139
|
-
let packet = OpenConnectionReplyOne::deserialize(buffer).unwrap();
|
|
140
|
-
let request_two = OpenConnectionRequestTwo {
|
|
141
|
-
address: Address::new(self.address.clone(), self.port, 4),
|
|
142
|
-
mtu_size: packet.mtu_size,
|
|
143
|
-
guid: self.guid
|
|
144
|
-
};
|
|
145
|
-
let serialized = request_two.serialize().unwrap();
|
|
146
|
-
self.send(&serialized)?;
|
|
147
|
-
if packet.mtu_size > 1500 {
|
|
148
|
-
self.connect()?;
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
PacketType::OpenConnectionReplyTwo => {
|
|
152
|
-
let packet = OpenConnectionReplyTwo::deserialize(buffer).unwrap();
|
|
153
|
-
let conn_request = ConnectionRequest {
|
|
154
|
-
guid: self.guid,
|
|
155
|
-
timestamp: Utc::now().timestamp(),
|
|
156
|
-
security: false,
|
|
157
|
-
};
|
|
158
|
-
let serialized = conn_request.serialize().unwrap();
|
|
159
|
-
self.send_frame(&serialized)?;
|
|
160
|
-
if packet.mtu_size > 1500 {
|
|
161
|
-
self.connect()?;
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
-
PacketType::FrameSet => {
|
|
165
|
-
let _ = self.framer.on_frame_set(&FrameSet::deserialize(buffer).unwrap());
|
|
166
|
-
},
|
|
167
|
-
PacketType::Ack => {
|
|
168
|
-
let frame = Frame {
|
|
169
|
-
reliability: Reliability::ReliableOrdered,
|
|
170
|
-
reliable_frame_index: Some(1),
|
|
171
|
-
sequence_frame_index: None,
|
|
172
|
-
ordered_frame_index: Some(0),
|
|
173
|
-
order_channel: Some(0),
|
|
174
|
-
split_frame_index: None,
|
|
175
|
-
split_size: None,
|
|
176
|
-
split_id: None,
|
|
177
|
-
payload: buffer.to_vec()
|
|
178
|
-
};
|
|
179
|
-
self.framer.process_packet(&frame).unwrap();
|
|
180
|
-
},
|
|
181
|
-
PacketType::Nack => {
|
|
182
|
-
let frame = self.pls_frame(buffer)?;
|
|
183
|
-
self.framer.process_packet(&frame).unwrap();
|
|
184
|
-
},
|
|
185
|
-
_ => {}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
Ok(())
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
pub fn get_received_packets(&mut self) -> Result<Vec<Vec<u8>>, SocketError> {
|
|
192
|
-
let mut buffer = [0; 1500];
|
|
193
|
-
let (size, _) = self.socket.receive(&mut buffer)?;
|
|
194
|
-
|
|
195
|
-
if size > 0 {
|
|
196
|
-
let _ = self.handle_packet(&buffer[..size]);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
Ok(self.framer.get_received_packets())
|
|
200
|
-
}
|
|
201
|
-
}
|