From 45a0aa62495fca093f1ca4d256994d27fab708d5 Mon Sep 17 00:00:00 2001 From: wancat Date: Sat, 15 Jul 2023 15:43:13 +0800 Subject: [PATCH] Move server back to index.js --- server/client.js | 2 +- server/docker.js | 6 ++++-- server/index.js | 8 ++++++-- server/socket.js | 27 +++++++++++++++++++++++++++ server/websocket.js | 33 --------------------------------- 5 files changed, 38 insertions(+), 38 deletions(-) create mode 100644 server/socket.js delete mode 100644 server/websocket.js diff --git a/server/client.js b/server/client.js index 9ff6c57..cdbf7b8 100644 --- a/server/client.js +++ b/server/client.js @@ -5,7 +5,7 @@ stdin.setRawMode(true) stdin.resume() stdin.setEncoding('utf8') -const socket = io('ws://localhost:8080') +const socket = io('ws://localhost:3000') socket.on('open', function open() { console.log('Connected to the server.') diff --git a/server/docker.js b/server/docker.js index 05704fd..1095d38 100644 --- a/server/docker.js +++ b/server/docker.js @@ -16,7 +16,9 @@ const containerOptions = { export async function getOrCreateContainer(name) { try { const container = engine.getContainer(name) - await container.inspect() + if (!(await container.inspect()).State.Running) { + await container.start() + } return container } catch (error) { const container = await engine.createContainer({ @@ -29,7 +31,7 @@ export async function getOrCreateContainer(name) { } } -export async function attachContainer(container) { +export function attachContainer(container) { // Create an exec instance with bash shell return container.attach({ stream: true, diff --git a/server/index.js b/server/index.js index 7986b17..00ea4e3 100644 --- a/server/index.js +++ b/server/index.js @@ -1,12 +1,16 @@ import express from 'express' +import http from 'http' +import socketServer from './socket.js' -const app = express() const port = 3000 +const app = express() +const server = http.createServer(app) +socketServer(server) app.get('/', (req, res) => { res.send('Hello World!') }) -app.listen(port, () => { +server.listen(port, () => { console.log(`Server listening at http://localhost:${port}`) }) diff --git a/server/socket.js b/server/socket.js new file mode 100644 index 0000000..b02209c --- /dev/null +++ b/server/socket.js @@ -0,0 +1,27 @@ +import { Server } from 'socket.io' +import { getOrCreateContainer, attachContainer } from './docker.js' + +export default (server) => { + const io = new Server(server) + + io.on('connection', async (socket) => { + console.log('Connected to the client.') + const container = await getOrCreateContainer('odyssey-test') + const stream = await attachContainer(container) + + stream.on('data', (chunk) => { + socket.send(chunk) + }) + + socket.on('message', function incoming(message) { + console.log(`From client: ${message}`) + stream.write(message) + }) + + socket.on('close', () => { + console.log('Disconnected from the client.') + }) + + socket.send('Hello from server!') + }) +} diff --git a/server/websocket.js b/server/websocket.js deleted file mode 100644 index 9e321c9..0000000 --- a/server/websocket.js +++ /dev/null @@ -1,33 +0,0 @@ -import express from 'express' -import http from 'http' -import { Server } from 'socket.io' -import { getOrCreateContainer, attachContainer } from './docker.js' - -const app = express() -const server = http.createServer(app) -const io = new Server(server) - -io.on('connection', async (socket) => { - console.log('Connected to the client.') - const container = await getOrCreateContainer('odyssey-test') - const stream = await attachContainer(container) - - stream.on('data', (chunk) => { - socket.send(chunk) - }) - - socket.on('message', function incoming(message) { - console.log(`From client: ${message}`) - stream.write(message) - }) - - socket.on('close', () => { - console.log('Disconnected from the client.') - }) - - socket.send('Hello from server!') -}) - -server.listen(8080, () => { - console.log(`Server listening at http://localhost:8080`) -})