@sanctumterra/raknet 1.0.10 → 1.0.12
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/dist/src/client/FrameHandler.d.ts +4 -0
- package/dist/src/client/FrameHandler.js +104 -66
- package/dist/src/client/PacketHandler.d.ts +1 -0
- package/dist/src/client/PacketHandler.js +16 -22
- package/dist/src/client/Queue.d.ts +1 -2
- package/dist/src/client/Queue.js +1 -2
- package/dist/src/client/RaknetClient.js +1 -1
- package/dist/src/packets/raknet/OhMyConnectionRequestAccepted.d.ts +20 -0
- package/dist/src/packets/raknet/OhMyConnectionRequestAccepted.js +32 -0
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Frame } from "@serenityjs/raknet";
|
|
2
2
|
import { RakNetClient } from "./RaknetClient";
|
|
3
|
+
import { OhMyNewIncommingConnection } from "../packets/raknet/OhMyNewIncommingConnection";
|
|
3
4
|
export declare class FrameHandler {
|
|
4
5
|
private lastInputSequence;
|
|
5
6
|
private receivedFrameSequences;
|
|
@@ -16,8 +17,11 @@ export declare class FrameHandler {
|
|
|
16
17
|
private handleFrame;
|
|
17
18
|
private processFrame;
|
|
18
19
|
private handleFragment;
|
|
20
|
+
private reassembleAndProcessFragment;
|
|
19
21
|
private handleSequenced;
|
|
20
22
|
private handleOrdered;
|
|
23
|
+
private processOrderedFrames;
|
|
21
24
|
private handleConnectedPing;
|
|
25
|
+
handleConnectionRequestAcceptedTwo(frame: Frame): OhMyNewIncommingConnection;
|
|
22
26
|
private handleConnectionRequestAccepted;
|
|
23
27
|
}
|
|
@@ -12,6 +12,7 @@ const _raknet = require("@serenityjs/raknet");
|
|
|
12
12
|
const _OhMyNewIncommingConnection = require("../packets/raknet/OhMyNewIncommingConnection");
|
|
13
13
|
const _binarystream = require("@serenityjs/binarystream");
|
|
14
14
|
const _Logger = require("../utils/Logger");
|
|
15
|
+
const _OhMyConnectionRequestAccepted = require("../packets/raknet/OhMyConnectionRequestAccepted");
|
|
15
16
|
class FrameHandler {
|
|
16
17
|
tick() {
|
|
17
18
|
if (this.receivedFrameSequences.size > 0) {
|
|
@@ -59,10 +60,16 @@ class FrameHandler {
|
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
handleFrame(frame) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
else
|
|
63
|
+
_Logger.Logger.debug(`Handling frame: reliability=${frame.reliability}, orderIndex=${frame.orderIndex}, sequenceIndex=${frame.sequenceIndex}`);
|
|
64
|
+
if (frame.isSplit()) {
|
|
65
|
+
this.handleFragment(frame);
|
|
66
|
+
} else if (frame.isSequenced()) {
|
|
67
|
+
this.handleSequenced(frame);
|
|
68
|
+
} else if (frame.isOrdered()) {
|
|
69
|
+
this.handleOrdered(frame);
|
|
70
|
+
} else {
|
|
71
|
+
this.processFrame(frame);
|
|
72
|
+
}
|
|
66
73
|
}
|
|
67
74
|
processFrame(frame) {
|
|
68
75
|
const header = frame.payload[0];
|
|
@@ -79,63 +86,75 @@ class FrameHandler {
|
|
|
79
86
|
}
|
|
80
87
|
}
|
|
81
88
|
handleFragment(frame) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
89
|
+
_Logger.Logger.debug(`Handling fragment: splitId=${frame.splitId}, splitIndex=${frame.splitIndex}, splitSize=${frame.splitSize}`);
|
|
90
|
+
if (!this.fragmentsQueue.has(frame.splitId)) {
|
|
91
|
+
this.fragmentsQueue.set(frame.splitId, new Map());
|
|
92
|
+
}
|
|
93
|
+
const fragment = this.fragmentsQueue.get(frame.splitId);
|
|
94
|
+
if (!fragment) return;
|
|
95
|
+
fragment.set(frame.splitIndex, frame);
|
|
96
|
+
if (fragment.size === frame.splitSize) {
|
|
97
|
+
_Logger.Logger.debug(`Reassembling complete frame from fragments: splitId=${frame.splitId}`);
|
|
98
|
+
this.reassembleAndProcessFragment(frame, fragment);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
reassembleAndProcessFragment(frame, fragment) {
|
|
102
|
+
const stream = new _binarystream.BinaryStream();
|
|
103
|
+
for(let index = 0; index < fragment.size; index++){
|
|
104
|
+
const sframe = fragment.get(index);
|
|
105
|
+
if (sframe) {
|
|
106
|
+
stream.writeBuffer(sframe.payload);
|
|
107
|
+
} else {
|
|
108
|
+
_Logger.Logger.error(`Missing fragment at index ${index} for splitId=${frame.splitId}`);
|
|
109
|
+
return;
|
|
101
110
|
}
|
|
102
|
-
} else {
|
|
103
|
-
this.fragmentsQueue.set(frame.splitId, new Map([
|
|
104
|
-
[
|
|
105
|
-
frame.splitIndex,
|
|
106
|
-
frame
|
|
107
|
-
]
|
|
108
|
-
]));
|
|
109
111
|
}
|
|
112
|
+
const reassembledFrame = new _raknet.Frame();
|
|
113
|
+
reassembledFrame.reliability = frame.reliability;
|
|
114
|
+
reassembledFrame.reliableIndex = frame.reliableIndex;
|
|
115
|
+
reassembledFrame.sequenceIndex = frame.sequenceIndex;
|
|
116
|
+
reassembledFrame.orderIndex = frame.orderIndex;
|
|
117
|
+
reassembledFrame.orderChannel = frame.orderChannel;
|
|
118
|
+
reassembledFrame.payload = stream.getBuffer();
|
|
119
|
+
this.fragmentsQueue.delete(frame.splitId);
|
|
120
|
+
this.handleFrame(reassembledFrame);
|
|
110
121
|
}
|
|
111
122
|
handleSequenced(frame) {
|
|
112
|
-
|
|
113
|
-
|
|
123
|
+
const currentHighestSequence = this.inputHighestSequenceIndex[frame.orderChannel];
|
|
124
|
+
_Logger.Logger.debug(`Handling sequenced frame: sequenceIndex=${frame.sequenceIndex}, currentHighest=${currentHighestSequence}`);
|
|
125
|
+
if (frame.sequenceIndex > currentHighestSequence) {
|
|
126
|
+
this.inputHighestSequenceIndex[frame.orderChannel] = frame.sequenceIndex;
|
|
127
|
+
this.processFrame(frame);
|
|
128
|
+
} else {
|
|
129
|
+
_Logger.Logger.debug(`Discarding old sequenced frame: ${frame.sequenceIndex}`);
|
|
114
130
|
}
|
|
115
|
-
this.inputHighestSequenceIndex[frame.orderChannel] = frame.sequenceIndex + 1;
|
|
116
|
-
return this.processFrame(frame);
|
|
117
131
|
}
|
|
118
132
|
handleOrdered(frame) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (!frame) break;
|
|
128
|
-
this.processFrame(frame);
|
|
129
|
-
outOfOrderQueue.delete(index);
|
|
130
|
-
}
|
|
131
|
-
this.inputOrderingQueue.set(frame.orderChannel, outOfOrderQueue);
|
|
132
|
-
this.inputOrderIndex[frame.orderChannel] = index;
|
|
133
|
-
} else if (frame.orderIndex > this.inputOrderIndex[frame.orderChannel]) {
|
|
134
|
-
const unordered = this.inputOrderingQueue.get(frame.orderChannel);
|
|
135
|
-
if (!unordered) return;
|
|
136
|
-
unordered.set(frame.orderIndex, frame);
|
|
133
|
+
_Logger.Logger.debug(`Handling ordered frame: orderIndex=${frame.orderIndex}, channel=${frame.orderChannel}`);
|
|
134
|
+
const expectedOrderIndex = this.inputOrderIndex[frame.orderChannel];
|
|
135
|
+
const outOfOrderQueue = this.inputOrderingQueue.get(frame.orderChannel);
|
|
136
|
+
if (frame.orderIndex === expectedOrderIndex) {
|
|
137
|
+
this.processOrderedFrames(frame, outOfOrderQueue);
|
|
138
|
+
} else if (frame.orderIndex > expectedOrderIndex) {
|
|
139
|
+
_Logger.Logger.debug(`Queuing out-of-order frame: ${frame.orderIndex}`);
|
|
140
|
+
outOfOrderQueue.set(frame.orderIndex, frame);
|
|
137
141
|
} else {
|
|
138
|
-
|
|
142
|
+
_Logger.Logger.debug(`Discarding old frame: ${frame.orderIndex}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
processOrderedFrames(frame, outOfOrderQueue) {
|
|
146
|
+
this.processFrame(frame);
|
|
147
|
+
this.inputOrderIndex[frame.orderChannel]++;
|
|
148
|
+
let nextOrderIndex = this.inputOrderIndex[frame.orderChannel];
|
|
149
|
+
while(outOfOrderQueue.has(nextOrderIndex)){
|
|
150
|
+
const nextFrame = outOfOrderQueue.get(nextOrderIndex);
|
|
151
|
+
if (nextFrame) {
|
|
152
|
+
_Logger.Logger.debug(`Processing queued frame: ${nextOrderIndex}`);
|
|
153
|
+
this.processFrame(nextFrame);
|
|
154
|
+
outOfOrderQueue.delete(nextOrderIndex);
|
|
155
|
+
this.inputOrderIndex[frame.orderChannel]++;
|
|
156
|
+
nextOrderIndex++;
|
|
157
|
+
}
|
|
139
158
|
}
|
|
140
159
|
}
|
|
141
160
|
handleConnectedPing(buffer) {
|
|
@@ -150,21 +169,40 @@ class FrameHandler {
|
|
|
150
169
|
frame.payload = pong.serialize();
|
|
151
170
|
this.raknet.queue.sendFrame(frame, _raknet.Priority.Immediate);
|
|
152
171
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (!des) {
|
|
157
|
-
console.error('Failed to deserialize IncomingPacket!');
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
const packet = new _OhMyNewIncommingConnection.OhMyNewIncommingConnection();
|
|
172
|
+
handleConnectionRequestAcceptedTwo(frame) {
|
|
173
|
+
let des = new _OhMyConnectionRequestAccepted.OhMyConnectionRequestAccepted(frame.payload).deserialize();
|
|
174
|
+
let packet = new _OhMyNewIncommingConnection.OhMyNewIncommingConnection();
|
|
161
175
|
packet.internalAddress = new Array();
|
|
162
176
|
for(let i = 0; i < 10; i++){
|
|
163
177
|
packet.internalAddress[i] = new _raknet.Address('0.0.0.0', 0, 4);
|
|
164
178
|
}
|
|
165
|
-
packet.serverAddress =
|
|
179
|
+
packet.serverAddress = des.serverAddress;
|
|
166
180
|
packet.incomingTimestamp = BigInt(Date.now());
|
|
167
|
-
packet.serverTimestamp = des.
|
|
181
|
+
packet.serverTimestamp = des.serverTimestamp;
|
|
182
|
+
return packet;
|
|
183
|
+
}
|
|
184
|
+
handleConnectionRequestAccepted(frame) {
|
|
185
|
+
let des;
|
|
186
|
+
let packet;
|
|
187
|
+
try {
|
|
188
|
+
const IncomingPacket = new _raknet.ConnectionRequestAccepted(frame.payload);
|
|
189
|
+
des = IncomingPacket.deserialize();
|
|
190
|
+
packet = new _OhMyNewIncommingConnection.OhMyNewIncommingConnection();
|
|
191
|
+
packet.internalAddress = new Array();
|
|
192
|
+
for(let i = 0; i < 10; i++){
|
|
193
|
+
packet.internalAddress[i] = new _raknet.Address('0.0.0.0', 0, 4);
|
|
194
|
+
}
|
|
195
|
+
packet.serverAddress = new _raknet.Address(des.address.address, des.address.port, 4);
|
|
196
|
+
packet.incomingTimestamp = BigInt(Date.now());
|
|
197
|
+
packet.serverTimestamp = des.timestamp;
|
|
198
|
+
} catch (error) {
|
|
199
|
+
packet = this.handleConnectionRequestAcceptedTwo(frame);
|
|
200
|
+
}
|
|
201
|
+
if (!packet) {
|
|
202
|
+
console.error('Failed to deserialize IncomingPacket!');
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
console.log('packet ', packet);
|
|
168
206
|
const sendFrame = new _raknet.Frame();
|
|
169
207
|
sendFrame.reliability = _raknet.Reliability.ReliableOrdered;
|
|
170
208
|
sendFrame.orderChannel = 0;
|
|
@@ -181,12 +219,12 @@ class FrameHandler {
|
|
|
181
219
|
this.lastInputSequence = -1;
|
|
182
220
|
this.receivedFrameSequences = new Set();
|
|
183
221
|
this.lostFrameSequences = new Set();
|
|
184
|
-
this.inputHighestSequenceIndex = new Array(
|
|
185
|
-
this.inputOrderIndex = new Array(
|
|
222
|
+
this.inputHighestSequenceIndex = new Array(64).fill(0);
|
|
223
|
+
this.inputOrderIndex = new Array(64).fill(0);
|
|
186
224
|
this.inputOrderingQueue = new Map();
|
|
187
225
|
this.fragmentsQueue = new Map();
|
|
188
226
|
this.raknet = raknet;
|
|
189
|
-
for(let index = 0; index <
|
|
227
|
+
for(let index = 0; index < 64; index++){
|
|
190
228
|
this.inputOrderingQueue.set(index, new Map());
|
|
191
229
|
}
|
|
192
230
|
this.raknet.on("tick", ()=>{
|
|
@@ -5,6 +5,7 @@ export declare class PacketHandler {
|
|
|
5
5
|
framehandler: FrameHandler;
|
|
6
6
|
constructor(client: RakNetClient);
|
|
7
7
|
handleIncoming(buffer: Buffer): void;
|
|
8
|
+
otherPackets(buffer: Buffer): void;
|
|
8
9
|
handleOpenConnectionRequest2(buffer: Buffer): void;
|
|
9
10
|
handleOpenConnectionRequest(): void;
|
|
10
11
|
sendConnectionPacket(): void;
|
|
@@ -23,8 +23,8 @@ class PacketHandler {
|
|
|
23
23
|
];
|
|
24
24
|
if (!ignore.includes(packetId)) _Logger.Logger.debug("Received Packet ID " + packetId);
|
|
25
25
|
switch(packetId){
|
|
26
|
-
case
|
|
27
|
-
|
|
26
|
+
case _raknet.Bitflags.Valid + 44:
|
|
27
|
+
this.framehandler.handleFrameSet(buffer);
|
|
28
28
|
break;
|
|
29
29
|
case _raknet.Packet.OpenConnectionReply1:
|
|
30
30
|
this.handleOpenConnectionRequest2(buffer);
|
|
@@ -32,35 +32,29 @@ class PacketHandler {
|
|
|
32
32
|
case _raknet.Packet.OpenConnectionReply2:
|
|
33
33
|
this.handleOpenConnectionRequest();
|
|
34
34
|
break;
|
|
35
|
+
default:
|
|
36
|
+
this.otherPackets(buffer);
|
|
37
|
+
_Logger.Logger.debug('Received unknown packet ' + packetId);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
otherPackets(buffer) {
|
|
41
|
+
const packetId = buffer.readUint8() & 0xf0;
|
|
42
|
+
switch(packetId){
|
|
43
|
+
case _raknet.Bitflags.Valid:
|
|
44
|
+
this.framehandler.handleFrameSet(buffer);
|
|
45
|
+
break;
|
|
35
46
|
case _raknet.Packet.Ack:
|
|
36
|
-
_Logger.Logger.debug(new _raknet.Ack(buffer).deserialize());
|
|
37
47
|
break;
|
|
38
48
|
case _raknet.Packet.Nack:
|
|
39
|
-
_Logger.Logger.debug(new _raknet.Nack(buffer).deserialize());
|
|
40
|
-
break;
|
|
41
|
-
case 128:
|
|
42
|
-
case 129:
|
|
43
|
-
case 130:
|
|
44
|
-
case 131:
|
|
45
|
-
case 132:
|
|
46
|
-
case 134:
|
|
47
|
-
case 135:
|
|
48
|
-
case 136:
|
|
49
|
-
case 137:
|
|
50
|
-
case 138:
|
|
51
|
-
case 139:
|
|
52
|
-
case 140:
|
|
53
|
-
case 141:
|
|
54
|
-
this.framehandler.handleFrameSet(buffer);
|
|
55
49
|
break;
|
|
56
50
|
default:
|
|
57
|
-
|
|
51
|
+
break;
|
|
58
52
|
}
|
|
59
53
|
}
|
|
60
54
|
handleOpenConnectionRequest2(buffer) {
|
|
61
55
|
const reply2 = new _raknet.OpenConnectionReply1(buffer).deserialize();
|
|
62
56
|
const pak = new _raknet.OpenConnectionRequest2();
|
|
63
|
-
pak.mtu =
|
|
57
|
+
pak.mtu = 1024;
|
|
64
58
|
pak.client = this.client.id;
|
|
65
59
|
pak.magic = reply2.magic;
|
|
66
60
|
pak.address = new _raknet.Address(this.client.socket.address().address, this.client.socket.address().port, 4);
|
|
@@ -81,7 +75,7 @@ class PacketHandler {
|
|
|
81
75
|
const packet = new _raknet.OpenConnectionRequest1();
|
|
82
76
|
packet.magic = Buffer.from("\0\xFF\xFF\0\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD4Vx", "binary");
|
|
83
77
|
packet.protocol = this.client.protocol;
|
|
84
|
-
packet.mtu =
|
|
78
|
+
packet.mtu = 1024 - _raknet.DGRAM_MTU_OVERHEAD;
|
|
85
79
|
const serializedPacket = packet.serialize();
|
|
86
80
|
this.client.send(serializedPacket);
|
|
87
81
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Frame, FrameSet, Priority } from '@serenityjs/raknet';
|
|
2
2
|
import { RakNetClient } from './RaknetClient';
|
|
3
3
|
export declare class Queue {
|
|
4
|
-
outputBackupQueue: Map<number, Frame[]>;
|
|
5
4
|
outputOrderIndex: Array<number>;
|
|
6
5
|
outputSequenceIndex: Array<number>;
|
|
7
6
|
outputFrameQueue: FrameSet;
|
|
@@ -10,7 +9,7 @@ export declare class Queue {
|
|
|
10
9
|
protected outputsplitIndex: number;
|
|
11
10
|
protected outputReliableIndex: number;
|
|
12
11
|
protected outputFrames: Set<Frame>;
|
|
13
|
-
|
|
12
|
+
outputBackup: Map<number, Frame[]>;
|
|
14
13
|
protected client: RakNetClient;
|
|
15
14
|
constructor(client: RakNetClient);
|
|
16
15
|
onTick(): void;
|
package/dist/src/client/Queue.js
CHANGED
|
@@ -68,8 +68,7 @@ class Queue {
|
|
|
68
68
|
return this.client.send(frameset.serialize());
|
|
69
69
|
}
|
|
70
70
|
constructor(client){
|
|
71
|
-
this.
|
|
72
|
-
this.mtu = 1492;
|
|
71
|
+
this.mtu = 1024;
|
|
73
72
|
this.outputSequence = 0;
|
|
74
73
|
this.outputsplitIndex = 0;
|
|
75
74
|
this.outputReliableIndex = 0;
|
|
@@ -87,7 +87,7 @@ class RakNetClient extends _events.EventEmitter {
|
|
|
87
87
|
this.id = BigInt(Array.from({
|
|
88
88
|
length: 20
|
|
89
89
|
}, ()=>Math.floor(Math.random() * 10)).join(''));
|
|
90
|
-
this.status = _raknet.Status.
|
|
90
|
+
this.status = _raknet.Status.Connecting;
|
|
91
91
|
this.packetHandler = new _PacketHandler.PacketHandler(this);
|
|
92
92
|
this.queue = new _Queue.Queue(this);
|
|
93
93
|
setInterval(()=>{
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Address, BasePacket } from "@serenityjs/raknet";
|
|
2
|
+
declare class OhMyConnectionRequestAccepted extends BasePacket {
|
|
3
|
+
/**
|
|
4
|
+
* the server adress of the reply.
|
|
5
|
+
*/
|
|
6
|
+
serverAddress: Address;
|
|
7
|
+
/**
|
|
8
|
+
* unknown what this is used for.
|
|
9
|
+
*/
|
|
10
|
+
internalAddress: Address;
|
|
11
|
+
/**
|
|
12
|
+
* The incoming timestamp of the reply.
|
|
13
|
+
*/
|
|
14
|
+
incomingTimestamp: bigint;
|
|
15
|
+
/**
|
|
16
|
+
* The server timestamp of the reply.
|
|
17
|
+
*/
|
|
18
|
+
serverTimestamp: bigint;
|
|
19
|
+
}
|
|
20
|
+
export { OhMyConnectionRequestAccepted };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "OhMyConnectionRequestAccepted", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return OhMyConnectionRequestAccepted;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ts_decorate = require("@swc/helpers/_/_ts_decorate");
|
|
12
|
+
const _proto = require("../proto");
|
|
13
|
+
const _serialize = require("../serialize");
|
|
14
|
+
const _raknet = require("@serenityjs/raknet");
|
|
15
|
+
const _binarystream = require("@serenityjs/binarystream");
|
|
16
|
+
class OhMyConnectionRequestAccepted extends _raknet.BasePacket {
|
|
17
|
+
}
|
|
18
|
+
_ts_decorate._([
|
|
19
|
+
(0, _serialize.Serialize)(_raknet.Address)
|
|
20
|
+
], OhMyConnectionRequestAccepted.prototype, "serverAddress", void 0);
|
|
21
|
+
_ts_decorate._([
|
|
22
|
+
(0, _serialize.Serialize)(_raknet.Address)
|
|
23
|
+
], OhMyConnectionRequestAccepted.prototype, "internalAddress", void 0);
|
|
24
|
+
_ts_decorate._([
|
|
25
|
+
(0, _serialize.Serialize)(_binarystream.Long)
|
|
26
|
+
], OhMyConnectionRequestAccepted.prototype, "incomingTimestamp", void 0);
|
|
27
|
+
_ts_decorate._([
|
|
28
|
+
(0, _serialize.Serialize)(_binarystream.Long)
|
|
29
|
+
], OhMyConnectionRequestAccepted.prototype, "serverTimestamp", void 0);
|
|
30
|
+
OhMyConnectionRequestAccepted = _ts_decorate._([
|
|
31
|
+
(0, _proto.Proto)(_raknet.Packet.ConnectionRequestAccepted)
|
|
32
|
+
], OhMyConnectionRequestAccepted);
|