let's to tcp as well
This commit is contained in:
parent
32a622e2a6
commit
720ffdb8a1
4 changed files with 29 additions and 22 deletions
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"remoteAddress": "ws://localhost:18472",
|
"remoteHost": "localhost",
|
||||||
|
"remotePort": 18472,
|
||||||
"localPort": 25566,
|
"localPort": 25566,
|
||||||
"authKey": "default"
|
"authKey": "default"
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import { AuthState } from "./enum/AuthState";
|
import { AuthState } from "./enum/AuthState";
|
||||||
import { Endian, createReader, createWriter } from "bufferstuff";
|
import { Endian, createReader, createWriter } from "bufferstuff";
|
||||||
import { existsSync, readFileSync } from "fs";
|
import { existsSync, readFileSync } from "fs";
|
||||||
import { createServer } from "net";
|
import { createServer, Socket } from "net";
|
||||||
import { Packet } from "./enum/Packet";
|
import { Packet } from "./enum/Packet";
|
||||||
import { WebSocket } from "ws";
|
import { WebSocket } from "ws";
|
||||||
import IClientConfig from "./interface/IClientConfig";
|
import IClientConfig from "./interface/IClientConfig";
|
||||||
|
@ -27,10 +27,10 @@ export default class Client {
|
||||||
txBytes = rxBytes = 0;
|
txBytes = rxBytes = 0;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
const client = new WebSocket(config.remoteAddress);
|
const client = new Socket();
|
||||||
client.on("open", () => {
|
client.on("open", () => {
|
||||||
// Send off auth as soon as we connect
|
// Send off auth as soon as we connect
|
||||||
client.send(createWriter(Endian.LE, 2 + config.authKey.length).writeUByte(Packet.Auth).writeShortString(config.authKey).toBuffer());
|
client.write(createWriter(Endian.LE, 2 + config.authKey.length).writeUByte(Packet.Auth).writeShortString(config.authKey).toBuffer());
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on("message", (data) => {
|
client.on("message", (data) => {
|
||||||
|
@ -42,7 +42,7 @@ export default class Client {
|
||||||
|
|
||||||
switch (packetId) {
|
switch (packetId) {
|
||||||
case Packet.KeepAlive:
|
case Packet.KeepAlive:
|
||||||
client.send(Constants.KEEPALIVE_PACKET);
|
client.write(Constants.KEEPALIVE_PACKET);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Packet.Auth:
|
case Packet.Auth:
|
||||||
|
@ -53,7 +53,7 @@ export default class Client {
|
||||||
authed = packetData.readUByte() === AuthState.Good;
|
authed = packetData.readUByte() === AuthState.Good;
|
||||||
if (authed && queuedMessages.length > 0) {
|
if (authed && queuedMessages.length > 0) {
|
||||||
for (const message of queuedMessages) {
|
for (const message of queuedMessages) {
|
||||||
client.send(message);
|
client.write(message);
|
||||||
}
|
}
|
||||||
queuedMessages.length = 0;
|
queuedMessages.length = 0;
|
||||||
}
|
}
|
||||||
|
@ -79,19 +79,24 @@ export default class Client {
|
||||||
const bufferData = createWriter(Endian.LE, 5).writeUByte(Packet.Data).writeUInt(chunk.length).writeBuffer(chunk).toBuffer();
|
const bufferData = createWriter(Endian.LE, 5).writeUByte(Packet.Data).writeUInt(chunk.length).writeBuffer(chunk).toBuffer();
|
||||||
txBytes += chunk.length;
|
txBytes += chunk.length;
|
||||||
if (authed) {
|
if (authed) {
|
||||||
client.send(bufferData);
|
client.write(bufferData);
|
||||||
} else {
|
} else {
|
||||||
queuedMessages.push(bufferData);
|
queuedMessages.push(bufferData);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function serverCloseOrError() {
|
function serverCloseOrError() {
|
||||||
client.close();
|
client.end();
|
||||||
clearInterval(txrxInterval);
|
clearInterval(txrxInterval);
|
||||||
console.log(`[LOCAL CLIENT ${thisClientId}] Disconnected`);
|
console.log(`[LOCAL CLIENT ${thisClientId}] Disconnected`);
|
||||||
}
|
}
|
||||||
socket.on("close", serverCloseOrError);
|
socket.on("close", serverCloseOrError);
|
||||||
socket.on("error", serverCloseOrError);
|
socket.on("error", serverCloseOrError);
|
||||||
|
|
||||||
|
client.connect({
|
||||||
|
host: config.remoteHost,
|
||||||
|
port: config.remotePort
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
server.listen(config.localPort, () => console.log(`Local server listening at ${config.localPort}`));
|
server.listen(config.localPort, () => console.log(`Local server listening at ${config.localPort}`));
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { AuthState } from "./enum/AuthState";
|
import { AuthState } from "./enum/AuthState";
|
||||||
import { Endian, createReader, createWriter } from "bufferstuff";
|
import { Endian, createReader, createWriter } from "bufferstuff";
|
||||||
import { existsSync, readFileSync } from "fs";
|
import { existsSync, readFileSync } from "fs";
|
||||||
import { Socket } from "net";
|
import { Socket, createServer } from "net";
|
||||||
import { Packet } from "./enum/Packet";
|
import { Packet } from "./enum/Packet";
|
||||||
import { WebSocketServer } from "ws";
|
//import { WebSocketServer } from "ws";
|
||||||
import IServerConfig from "./interface/IServerConfig";
|
import IServerConfig from "./interface/IServerConfig";
|
||||||
import Constants from "./Constants";
|
import Constants from "./Constants";
|
||||||
|
|
||||||
|
@ -14,9 +14,7 @@ export default class Server {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
const config:IServerConfig = JSON.parse(readFileSync("./config/server-config.json").toString());
|
const config:IServerConfig = JSON.parse(readFileSync("./config/server-config.json").toString());
|
||||||
const server = new WebSocketServer({ port: config.port }, () => console.log(`Server started at ${config.port}`));
|
const server = createServer((socket) => {
|
||||||
|
|
||||||
server.on("connection", (socket) => {
|
|
||||||
console.log("Connection");
|
console.log("Connection");
|
||||||
let queuedMessages = new Array<Buffer>();
|
let queuedMessages = new Array<Buffer>();
|
||||||
let connectedToServer = false;
|
let connectedToServer = false;
|
||||||
|
@ -24,7 +22,7 @@ export default class Server {
|
||||||
let authed = false;
|
let authed = false;
|
||||||
let client:Socket | null = null;
|
let client:Socket | null = null;
|
||||||
const clientKeepAlive = setInterval(() => {
|
const clientKeepAlive = setInterval(() => {
|
||||||
socket.send(Constants.KEEPALIVE_PACKET);
|
socket.end(Constants.KEEPALIVE_PACKET);
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
socket.on("message", (data, isBinary) => {
|
socket.on("message", (data, isBinary) => {
|
||||||
|
@ -43,11 +41,11 @@ export default class Server {
|
||||||
case Packet.Auth:
|
case Packet.Auth:
|
||||||
try {
|
try {
|
||||||
if (packetData.readShortString() !== config.authKey) {
|
if (packetData.readShortString() !== config.authKey) {
|
||||||
socket.send(createWriter(Endian.LE, 2).writeUByte(Packet.Auth).writeUByte(AuthState.Bad).toBuffer());
|
socket.write(createWriter(Endian.LE, 2).writeUByte(Packet.Auth).writeUByte(AuthState.Bad).toBuffer());
|
||||||
socket.close();
|
socket.end();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
socket.send(createWriter(Endian.LE, 2).writeUByte(Packet.Auth).writeUByte(AuthState.Good).toBuffer());
|
socket.write(createWriter(Endian.LE, 2).writeUByte(Packet.Auth).writeUByte(AuthState.Good).toBuffer());
|
||||||
authed = true;
|
authed = true;
|
||||||
|
|
||||||
client = new Socket();
|
client = new Socket();
|
||||||
|
@ -64,7 +62,7 @@ export default class Server {
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on("data", (chunk) => {
|
client.on("data", (chunk) => {
|
||||||
socket.send(createWriter(Endian.LE, 5)
|
socket.write(createWriter(Endian.LE, 5)
|
||||||
.writeUByte(Packet.Data)
|
.writeUByte(Packet.Data)
|
||||||
.writeUInt(chunk.length)
|
.writeUInt(chunk.length)
|
||||||
.writeBuffer(chunk)
|
.writeBuffer(chunk)
|
||||||
|
@ -72,7 +70,7 @@ export default class Server {
|
||||||
});
|
});
|
||||||
|
|
||||||
function clientCloseOrError() {
|
function clientCloseOrError() {
|
||||||
socket.close();
|
socket.end();
|
||||||
}
|
}
|
||||||
client.on("close", clientCloseOrError);
|
client.on("close", clientCloseOrError);
|
||||||
client.on("error", clientCloseOrError);
|
client.on("error", clientCloseOrError);
|
||||||
|
@ -85,7 +83,7 @@ export default class Server {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
client?.end();
|
client?.end();
|
||||||
client = null;
|
client = null;
|
||||||
socket.close();
|
socket.end();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Packet.Data:
|
case Packet.Data:
|
||||||
|
@ -110,6 +108,8 @@ export default class Server {
|
||||||
}
|
}
|
||||||
socket.on("close", closeOrError);
|
socket.on("close", closeOrError);
|
||||||
socket.on("error", closeOrError);
|
socket.on("error", closeOrError);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
server.listen(config.port, () => console.log(`Server started at ${config.port}`));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
export default interface IClientConfig {
|
export default interface IClientConfig {
|
||||||
remoteAddress: string,
|
remoteHost: string,
|
||||||
|
remotePort: number,
|
||||||
localPort: number,
|
localPort: number,
|
||||||
authKey: string
|
authKey: string
|
||||||
}
|
}
|
Loading…
Reference in a new issue