server for my chess game
initial commit
yay
bendn 2022-05-04
commit 4a66c34
-rw-r--r--.gitignore10
-rw-r--r--.prettierrc4
-rw-r--r--package-lock.json21
-rw-r--r--package.json15
-rw-r--r--src/StreamTcp.js18
-rw-r--r--src/index.js33
6 files changed, 101 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1139b88
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+# dependencies
+/node_modules
+
+# misc
+.idea
+.DS_Store
+
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log* \ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..7a28161
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "tabWidth": 2,
+ "useTabs": false
+} \ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..1fb35c1
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,21 @@
+{
+ "name": "gd-com-tcp-basic",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@gd-com/utils": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@gd-com/utils/-/utils-4.1.0.tgz",
+ "integrity": "sha512-YYiMfg9x98KBnKqjLSyvVcvpBE2w64aJYS14CiOtWRQpvBzP30riVoe4CKAvII2WyuUoobS2P4hQ/eMS/kfzeg==",
+ "requires": {
+ "long": "^4.0.0"
+ }
+ },
+ "long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..24f5391
--- /dev/null
+++ b/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "gd-com-tcp-basic",
+ "version": "1.0.0",
+ "description": "",
+ "main": "src/index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "start": "node src/index.js"
+ },
+ "author": "",
+ "license": "MIT",
+ "dependencies": {
+ "@gd-com/utils": "^4.1.0"
+ }
+}
diff --git a/src/StreamTcp.js b/src/StreamTcp.js
new file mode 100644
index 0000000..82306fe
--- /dev/null
+++ b/src/StreamTcp.js
@@ -0,0 +1,18 @@
+const Transform = require('stream').Transform
+
+class StreamTcp extends Transform {
+ _transform (chunk, enc, done) {
+ let buffer = chunk
+ while (buffer.length > 0) {
+ const length = buffer.readUInt16LE(0)
+
+ const bufferSplitted = buffer.slice(4, length + 4) // 4 cause the length bytes is in buffer
+ buffer = buffer.slice(length + 4, buffer.length) // 4 cause the length bytes is in buffer
+
+ this.push(bufferSplitted)
+ }
+ done()
+ }
+}
+
+module.exports = StreamTcp \ No newline at end of file
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..5523449
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,33 @@
+const net = require('net')
+const { putVar, getVar } = require('@gd-com/utils')
+const StreamTcp = require('./StreamTcp')
+
+let server = net.createServer((socket) => {
+ const tcpSplit = new StreamTcp()
+ socket.pipe(tcpSplit).on('data', (data) => {
+ const packet = new Buffer.from(data)
+
+ const decoded = getVar(packet)
+ console.log('receive :', decoded.value)
+
+ const packetToSend = putVar(Math.random())
+
+ // we need to put the packet length on top cause it's tcp
+ const lengthBuffer = Buffer.alloc(4)
+ lengthBuffer.writeUInt32LE(packetToSend.length, 0)
+ const toSend = Buffer.concat([lengthBuffer, packetToSend])
+
+ console.log('send :', toSend)
+ socket.write(toSend)
+ })
+
+ socket.on('error', () => console.log('Bye :('))
+})
+
+server.on('error', (err) => {
+ throw err
+})
+
+server.listen(9090, '127.0.0.1', () => {
+ console.log(`Server launched TCP 127.0.0.1:${9090}`)
+})