@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.
Files changed (79) hide show
  1. package/build/index.d.ts +14 -0
  2. package/build/raknet.node +0 -0
  3. package/package.json +10 -2
  4. package/.github/workflows/publish.yml +0 -41
  5. package/Cargo.toml +0 -16
  6. package/build.rs +0 -3
  7. package/src/binarystream/binarystream.rs +0 -313
  8. package/src/binarystream/endianess.rs +0 -5
  9. package/src/binarystream/mod.rs +0 -6
  10. package/src/client/client.rs +0 -201
  11. package/src/client/framer.rs +0 -391
  12. package/src/client/mod.rs +0 -5
  13. package/src/lib.rs +0 -68
  14. package/src/main.rs +0 -46
  15. package/src/packets/ack.rs +0 -82
  16. package/src/packets/connected_ping.rs +0 -27
  17. package/src/packets/connected_pong.rs +0 -29
  18. package/src/packets/connection_request.rs +0 -34
  19. package/src/packets/connection_request_accepted.rs +0 -55
  20. package/src/packets/frameset.rs +0 -40
  21. package/src/packets/mod.rs +0 -34
  22. package/src/packets/nack.rs +0 -82
  23. package/src/packets/new_incomming_connection.rs +0 -49
  24. package/src/packets/open_connection_reply_one.rs +0 -48
  25. package/src/packets/open_connection_reply_two.rs +0 -43
  26. package/src/packets/open_connection_request_one.rs +0 -56
  27. package/src/packets/open_connection_request_two.rs +0 -34
  28. package/src/packets/packet.rs +0 -45
  29. package/src/packets/packet_types.rs +0 -62
  30. package/src/packets/types/address.rs +0 -75
  31. package/src/packets/types/data_type.rs +0 -6
  32. package/src/packets/types/flags.rs +0 -6
  33. package/src/packets/types/frame.rs +0 -74
  34. package/src/packets/types/mod.rs +0 -14
  35. package/src/packets/types/priority.rs +0 -5
  36. package/src/packets/types/reliability.rs +0 -45
  37. package/src/packets/unconnected_ping.rs +0 -41
  38. package/src/socket/mod.rs +0 -3
  39. package/src/socket/socket.rs +0 -60
  40. package/src_client/client/client-events.ts +0 -38
  41. package/src_client/client/client.ts +0 -146
  42. package/src_client/client/client_options.ts +0 -17
  43. package/src_client/client/index.ts +0 -3
  44. package/src_client/index.ts +0 -4
  45. package/src_client/proto/decorators/create.ts +0 -87
  46. package/src_client/proto/decorators/index.ts +0 -2
  47. package/src_client/proto/decorators/serialize.ts +0 -17
  48. package/src_client/proto/enums/flags.ts +0 -6
  49. package/src_client/proto/enums/index.ts +0 -4
  50. package/src_client/proto/enums/packet.ts +0 -121
  51. package/src_client/proto/enums/priority.ts +0 -4
  52. package/src_client/proto/enums/reliability.ts +0 -10
  53. package/src_client/proto/index.ts +0 -4
  54. package/src_client/proto/packets/ack.ts +0 -82
  55. package/src_client/proto/packets/base-packet.ts +0 -38
  56. package/src_client/proto/packets/connected-ping.ts +0 -9
  57. package/src_client/proto/packets/connected-pong.ts +0 -10
  58. package/src_client/proto/packets/connection-request-accepted.ts +0 -14
  59. package/src_client/proto/packets/connection-request.ts +0 -11
  60. package/src_client/proto/packets/frameset.ts +0 -15
  61. package/src_client/proto/packets/index.ts +0 -16
  62. package/src_client/proto/packets/nack.ts +0 -84
  63. package/src_client/proto/packets/new-incoming-connection.ts +0 -14
  64. package/src_client/proto/packets/open-connection-reply-one.ts +0 -22
  65. package/src_client/proto/packets/open-connection-reply-two.ts +0 -14
  66. package/src_client/proto/packets/open-connection-request-one.ts +0 -12
  67. package/src_client/proto/packets/open-connection-request-two.ts +0 -13
  68. package/src_client/proto/packets/types/address.ts +0 -106
  69. package/src_client/proto/packets/types/data-type.ts +0 -38
  70. package/src_client/proto/packets/types/frame.ts +0 -114
  71. package/src_client/proto/packets/types/index.ts +0 -6
  72. package/src_client/proto/packets/types/magic.ts +0 -14
  73. package/src_client/proto/packets/types/mtu.ts +0 -19
  74. package/src_client/proto/packets/types/sys-address.ts +0 -35
  75. package/src_client/proto/packets/unconnected-ping.ts +0 -12
  76. package/src_client/proto/packets/unconnected-pong.ts +0 -13
  77. package/src_client/proto/types/advertisement.ts +0 -40
  78. package/src_client/proto/types/index.ts +0 -2
  79. package/src_client/proto/types/valid.ts +0 -58
@@ -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.2",
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 --platform --release 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
@@ -1,16 +0,0 @@
1
- [package]
2
- name = "raknet"
3
- version = "0.1.0"
4
- edition = "2021"
5
-
6
- [lib]
7
- crate-type = ["cdylib"]
8
-
9
- [dependencies]
10
- chrono = "0.4.38"
11
- rand = "0.8.5"
12
- napi = "2"
13
- napi-derive = "2"
14
-
15
- [build-dependencies]
16
- napi-build = "2.1.3"
package/build.rs DELETED
@@ -1,3 +0,0 @@
1
- fn main() {
2
- napi_build::setup();
3
- }
@@ -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
- }
@@ -1,5 +0,0 @@
1
- #[derive(Debug)]
2
- pub enum Endianness {
3
- Big,
4
- Little,
5
- }
@@ -1,6 +0,0 @@
1
- pub mod binarystream;
2
- pub mod endianess;
3
-
4
- pub use binarystream::BinaryStream;
5
- pub use binarystream::BinaryStreamError;
6
- pub use endianess::Endianness;
@@ -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
- }