From 5f5e57362e2dce5a60ff2bed3f77090261aa8f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Wed, 24 Apr 2024 14:20:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +++++ src/extension.ts | 10 ++++++++++ src/networkServer.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/networkServer.ts diff --git a/package.json b/package.json index dd6e6bc..6093511 100644 --- a/package.json +++ b/package.json @@ -245,6 +245,11 @@ "title": "复制名称", "enablement": "viewItem == 玩家属性", "category": "Y3开发助手" + }, + { + "command": "y3-helper.networkServer", + "title": "启动网络服务器(用于测试`network`库)", + "category": "Y3开发助手" } ], "configuration": { diff --git a/src/extension.ts b/src/extension.ts index c416485..9016216 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -10,6 +10,7 @@ import { GameLauncher } from './launchGame'; import { EXCELimporter } from './editorTable/EXCEL/EXCELimporter'; import { TemplateGenerator } from './editorTable/templateGenerator'; import { englishPathToChinese } from './constants'; +import { NetworkServer } from './networkServer'; import { CSVimporter, EditorTableDataProvider, GoEditorTableSymbolProvider, GoEditorTableDocumentSymbolProvider, FileNode, @@ -52,6 +53,14 @@ class Helper { }); } + private registerCommandOfNetworkServer() { + let server: NetworkServer | undefined; + vscode.commands.registerCommand('y3-helper.networkServer', async () => { + server?.dispose(); + server = new NetworkServer('127.0.0.1', 25895); + }); + } + private registerCommandOfInitProject() { let running = false; vscode.commands.registerCommand('y3-helper.initProject', async () => { @@ -696,6 +705,7 @@ class Helper { this.checkNewProject(); this.reloadEnvWhenConfigChange(); + this.registerCommandOfNetworkServer(); this.registerCommonCommands(); this.registerCommandOfCSVeditor(); diff --git a/src/networkServer.ts b/src/networkServer.ts new file mode 100644 index 0000000..d405ee6 --- /dev/null +++ b/src/networkServer.ts @@ -0,0 +1,44 @@ +import * as net from "net"; +import * as vscode from "vscode"; + +export class NetworkServer extends vscode.Disposable { + private server: net.Server; + constructor(public ip: string, public port: number) { + super(() => { + this.server.close(); + }); + let channel = vscode.window.createOutputChannel('Y3-网络服务器'); + channel.show(); + + this.server = net.createServer() + .on('connection', (socket) => { + socket.write('欢迎,你已连接到服务器'); + channel.appendLine(`有客户端连接`); + + socket.on('data', (data) => { + channel.appendLine(`收到来自客户端的消息:${data}`); + socket.write(`你发送了:${data}`); + + if (data.toString().trim() === '再见!') { + socket.end('马达捏~'); + } + }); + + socket.on('close', () => { + channel.appendLine(`客户端已断开`); + }); + + socket.on('error', (err) => { + channel.appendLine(`客户端错误:${err}`); + }); + }) + .on('error', (err) => { + channel.appendLine(`服务器错误:${err}`); + }) + .listen(port, ip, () => { + channel.appendLine(`服务器已启动:${ip}:${port}`); + channel.appendLine(`客户端发送消息后,会回复“你发送了:<收到的消息>”`); + channel.appendLine(`客户端发送“再见!”会断开连接`); + }); + } +}