[add] slot系列API Class化
This commit is contained in:
		
							
								
								
									
										22
									
								
								src/api/slot/SlotFgSpinBase.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/api/slot/SlotFgSpinBase.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					import { INetRequest } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetRequest";
 | 
				
			||||||
 | 
					import { INetResponse } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetResponse";
 | 
				
			||||||
 | 
					import { ClientData } from "../../shared/protocols/define/interface";
 | 
				
			||||||
 | 
					import { RpcSlot1SpinRequest, RpcSlot1SpinResponse } from "../../shared/protocols/Slot1Request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default abstract class SlotFgSpinBase {
 | 
				
			||||||
 | 
						public *fgspin(clientData: ClientData, req: INetRequest<RpcSlot1SpinRequest>): IterableIterator<any> {
 | 
				
			||||||
 | 
							const data: RpcSlot1SpinRequest = req.Data
 | 
				
			||||||
 | 
							const { count, freeData } = clientData.free;
 | 
				
			||||||
 | 
							const slotData: any = freeData[count];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							const response: INetResponse<RpcSlot1SpinResponse> = {
 | 
				
			||||||
 | 
								Status: 0,
 | 
				
			||||||
 | 
								Method: req.Method,
 | 
				
			||||||
 | 
								Data: slotData,
 | 
				
			||||||
 | 
								IsValid: true
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							clientData.free.count++;
 | 
				
			||||||
 | 
							return response;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								src/api/slot/SlotInBase.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/api/slot/SlotInBase.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					import { INetRequest } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetRequest";
 | 
				
			||||||
 | 
					import { INetResponse } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetResponse";
 | 
				
			||||||
 | 
					import { ClientData } from "../../shared/protocols/define/interface";
 | 
				
			||||||
 | 
					import { RpcSlotInRequest, RpcSlotInResponse } from "../../shared/protocols/SlotRequest";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default abstract class SlotInBase {
 | 
				
			||||||
 | 
						protected ver: string = "";
 | 
				
			||||||
 | 
						protected abstract db: number;
 | 
				
			||||||
 | 
						protected abstract br: number[];
 | 
				
			||||||
 | 
						protected abstract jp: { [key: string]: number; };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public *in(clientData: ClientData, req: INetRequest<RpcSlotInRequest>): IterableIterator<any> {
 | 
				
			||||||
 | 
							const data: RpcSlotInRequest = req.Data;
 | 
				
			||||||
 | 
							const { id } = data;
 | 
				
			||||||
 | 
							const { ver, db, br, jp } = this;
 | 
				
			||||||
 | 
							const response: INetResponse<RpcSlotInResponse> = {
 | 
				
			||||||
 | 
								Status: 0,
 | 
				
			||||||
 | 
								Method: req.Method,
 | 
				
			||||||
 | 
								Data: { ver, db, br, jp },
 | 
				
			||||||
 | 
								IsValid: true
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							return response;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,15 +2,21 @@ import { INetRequest } from "../../script/Engine/CatanEngine/NetManagerV2/Core/I
 | 
				
			|||||||
import { INetResponse } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetResponse";
 | 
					import { INetResponse } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetResponse";
 | 
				
			||||||
import { ClientData } from "../../shared/protocols/define/interface";
 | 
					import { ClientData } from "../../shared/protocols/define/interface";
 | 
				
			||||||
import { RpcSlotInRequest, RpcSlotInResponse } from "../../shared/protocols/SlotRequest";
 | 
					import { RpcSlotInRequest, RpcSlotInResponse } from "../../shared/protocols/SlotRequest";
 | 
				
			||||||
 | 
					import SlotIn1 from "../slot1/in";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function* (clientData: ClientData, req: INetRequest<RpcSlotInRequest>): IterableIterator<any> {
 | 
					export default function* (clientData: ClientData, req: INetRequest<RpcSlotInRequest>): IterableIterator<any> {
 | 
				
			||||||
	const data: RpcSlotInRequest = req.Data
 | 
						const data: RpcSlotInRequest = req.Data;
 | 
				
			||||||
 | 
						const { id } = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const response: INetResponse<RpcSlotInResponse> = {
 | 
						let moduleClass: SlotIn1;
 | 
				
			||||||
		Status: 0,
 | 
						let AsyncFunction = async function () {
 | 
				
			||||||
		Method: req.Method,
 | 
							const module = await import(`../slot${id}/in`);
 | 
				
			||||||
		Data: { ver: "", db: 4, br: [4, 10, 20, 40, 80, 100, 120, 160, 200, 400, 600, 800, 1000, 1200, 1600, 2000, 4000, 10000, 20000, 30000], jp: { "1": 1500000, "3": 3000000, "5": 30000000 } },
 | 
							moduleClass = new module.default();
 | 
				
			||||||
		IsValid: true
 | 
					 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
						AsyncFunction();
 | 
				
			||||||
 | 
						while (!moduleClass) {
 | 
				
			||||||
 | 
							yield;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						const response: INetResponse<RpcSlotInResponse> = yield* moduleClass.in(clientData, req);
 | 
				
			||||||
	return response;
 | 
						return response;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -5,15 +5,20 @@ import { RpcSlot1SpinRequest, RpcSlot1SpinResponse } from "../../shared/protocol
 | 
				
			|||||||
import { RandomEx } from "../../Utils/Number/RandomEx";
 | 
					import { RandomEx } from "../../Utils/Number/RandomEx";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class SlotBase {
 | 
					export default abstract class SlotSpinBase {
 | 
				
			||||||
	protected temps: string[];
 | 
						protected abstract ID: number;
 | 
				
			||||||
	protected freeTemps: string[];
 | 
						protected IsHaveFreeSpin: boolean = false;
 | 
				
			||||||
 | 
						protected IsHaveReSpin: boolean = false;
 | 
				
			||||||
 | 
						protected IsHaveRetriggerFreeSpin: boolean = false;
 | 
				
			||||||
 | 
						protected FreeMax: number = 50;
 | 
				
			||||||
 | 
						protected abstract Temps: string[];
 | 
				
			||||||
 | 
						protected abstract FreeTemps: string[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public *spin(clientData: ClientData, req: INetRequest<RpcSlot1SpinRequest>): IterableIterator<any> {
 | 
						public *spin(clientData: ClientData, req: INetRequest<RpcSlot1SpinRequest>): IterableIterator<any> {
 | 
				
			||||||
		const data: RpcSlot1SpinRequest = req.Data
 | 
							const data: RpcSlot1SpinRequest = req.Data
 | 
				
			||||||
		clientData.free = null;
 | 
							clientData.free = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const slotData: any = JSON.parse(this.temps[RandomEx.GetInt(0, this.temps.length)]);
 | 
							const slotData: any = JSON.parse(this.Temps[RandomEx.GetInt(0, this.Temps.length)]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		let totalGet: number = 0;
 | 
							let totalGet: number = 0;
 | 
				
			||||||
		if (slotData.line) {
 | 
							if (slotData.line) {
 | 
				
			||||||
@@ -22,7 +27,7 @@ export default class SlotBase {
 | 
				
			|||||||
		if (slotData.scatter) {
 | 
							if (slotData.scatter) {
 | 
				
			||||||
			totalGet += this.getScatterGet(slotData.scatter);
 | 
								totalGet += this.getScatterGet(slotData.scatter);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (slotData.free) {
 | 
							if (this.IsHaveFreeSpin && slotData.free) {
 | 
				
			||||||
			const count = slotData.free[1];
 | 
								const count = slotData.free[1];
 | 
				
			||||||
			const { freeData, totalFreeGet } = this.getFree(count);
 | 
								const { freeData, totalFreeGet } = this.getFree(count);
 | 
				
			||||||
			totalGet += totalFreeGet;
 | 
								totalGet += totalFreeGet;
 | 
				
			||||||
@@ -49,14 +54,25 @@ export default class SlotBase {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected getFree(count: number) {
 | 
						protected getFree(count: number) {
 | 
				
			||||||
		const freeData = [];
 | 
							let freeData = [];
 | 
				
			||||||
		let totalFreeGet = 0;
 | 
							let totalFreeGet = 0;
 | 
				
			||||||
		for (let i: number = 0; i < count; i++) {
 | 
							for (let i: number = 0; i < count; i++) {
 | 
				
			||||||
			const slotData: any = JSON.parse(this.freeTemps[RandomEx.GetInt(0, this.freeTemps.length)]);
 | 
								const slotData: any = JSON.parse(this.FreeTemps[RandomEx.GetInt(0, this.FreeTemps.length)]);
 | 
				
			||||||
			freeData.push(slotData);
 | 
								freeData.push(slotData);
 | 
				
			||||||
			if (slotData.line) {
 | 
								if (slotData.line) {
 | 
				
			||||||
				totalFreeGet += this.getLineGet(slotData.line);
 | 
									totalFreeGet += this.getLineGet(slotData.line);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if (slotData.scatter) {
 | 
				
			||||||
 | 
									totalFreeGet += this.getScatterGet(slotData.scatter);
 | 
				
			||||||
 | 
									if (this.IsHaveRetriggerFreeSpin && slotData.free && freeData.length < this.FreeMax) {
 | 
				
			||||||
 | 
										const count = slotData.free[1] + freeData.length > this.FreeMax
 | 
				
			||||||
 | 
											? slotData.free[1] + freeData.length - this.FreeMax
 | 
				
			||||||
 | 
											: slotData.free[1];
 | 
				
			||||||
 | 
										const { freeData: reFreeData, totalFreeGet: reTotalFreeGet } = this.getFree(count);
 | 
				
			||||||
 | 
										freeData = freeData.concat(reFreeData);
 | 
				
			||||||
 | 
										totalFreeGet += reTotalFreeGet;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return { freeData, totalFreeGet }
 | 
							return { freeData, totalFreeGet }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,33 +1,4 @@
 | 
				
			|||||||
import { INetRequest } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetRequest";
 | 
					import SlotFgSpinBase from "../slot/SlotFgSpinBase";
 | 
				
			||||||
import { INetResponse } from "../../script/Engine/CatanEngine/NetManagerV2/Core/INetResponse";
 | 
					 | 
				
			||||||
import { ClientData } from "../../shared/protocols/define/interface";
 | 
					 | 
				
			||||||
import { RpcSlot1SpinRequest, RpcSlot1SpinResponse } from "../../shared/protocols/Slot1Request";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function* (clientData: ClientData, req: INetRequest<RpcSlot1SpinRequest>): IterableIterator<any> {
 | 
					 | 
				
			||||||
	const data: RpcSlot1SpinRequest = req.Data
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// const freeTemps: string[] = [
 | 
					export default class SlotFgSpin1 extends SlotFgSpinBase { }
 | 
				
			||||||
	// 	`{"slot":[13,9,5,14,4,9,4,12,12,11,4,14,8,7,6],"line":[[[10,6],195,300],[[10,6],213,300]]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[9,9,10,13,4,5,4,3,4,11,10,14,14,14,5]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[12,6,8,12,11,7,12,11,5,5,11,5,3,10,9]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[4,6,11,13,8,12,12,3,4,10,7,5,14,14,4]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[5,9,9,3,11,10,4,5,12,5,4,14,12,5,9],"line":[[[10,6],195,300],[[10,6],213,300]]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[14,4,10,3,11,5,14,3,12,6,10,6,14,5,12],"line":[[[0,6,12],49,750]],"scatter":[[[3,7],3000]]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[9,14,13,4,11,4,7,6,14,6,12,13,9,12,12]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[10,3,12,13,5,6,4,8,4,9,13,14,11,14,4]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[10,14,13,9,8,6,6,6,4,13,13,12,9,14,4],"line":[[[5,6,7],122,3000]]}`,
 | 
					 | 
				
			||||||
	// 	`{"slot":[11,13,9,8,5,8,5,5,13,9,14,9,12,4,7]}`,
 | 
					 | 
				
			||||||
	// ];
 | 
					 | 
				
			||||||
	// const Data: any = JSON.parse(freeTemps[RandomEx.GetInt(0, freeTemps.length)]);
 | 
					 | 
				
			||||||
	const { count, freeData } = clientData.free;
 | 
					 | 
				
			||||||
	const slotData: any = freeData[count];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const response: INetResponse<RpcSlot1SpinResponse> = {
 | 
					 | 
				
			||||||
		Status: 0,
 | 
					 | 
				
			||||||
		Method: req.Method,
 | 
					 | 
				
			||||||
		Data: slotData,
 | 
					 | 
				
			||||||
		IsValid: true
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	clientData.free.count++;
 | 
					 | 
				
			||||||
	return response;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										7
									
								
								src/api/slot1/in.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/api/slot1/in.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					import SlotInBase from "../slot/SlotInBase";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default class SlotIn1 extends SlotInBase {
 | 
				
			||||||
 | 
						protected db: number = 4;
 | 
				
			||||||
 | 
						protected br: number[] = [4, 10, 20, 40, 80, 100, 120, 160, 200, 400, 600, 800, 1000, 1200, 1600, 2000, 4000, 10000, 20000, 30000];
 | 
				
			||||||
 | 
						protected jp: { [key: string]: number; } = { "1": 1500000, "3": 3000000, "5": 30000000 };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,24 +1,32 @@
 | 
				
			|||||||
import SlotBase from "../slot/spin";
 | 
					import SlotSpinBase from "../slot/spin";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class Slot1 extends SlotBase {
 | 
					export default class SlotSpin1 extends SlotSpinBase {
 | 
				
			||||||
	protected temps: string[] = [
 | 
						protected ID: number = 1;
 | 
				
			||||||
		`{"slot":[11,4,8,9,5,2,13,10,7,9,10,6,6,12,4],"line":[[[5,11,12],161,2000]]}`,
 | 
						protected IsHaveFreeSpin: boolean = true;
 | 
				
			||||||
 | 
						protected IsHaveRetriggerFreeSpin: boolean = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						protected Temps: string[] = [
 | 
				
			||||||
 | 
							`{"slot":[11,4,8,9,5,2,13,10,7,9,10,6,6,12,4],"line":[[[5,11,12],161,200]]}`,
 | 
				
			||||||
		`{"slot":[9,6,2,5,4,14,10,9,13,10,4,5,5,2,2]}`,
 | 
							`{"slot":[9,6,2,5,4,14,10,9,13,10,4,5,5,2,2]}`,
 | 
				
			||||||
 | 
							`{"slot":[4,3,3,3,9,10,14,14,9,4,7,8,8,5,10],"free":[[1,2,3],3],"scatter":[[[1,2,3],300]]}`,
 | 
				
			||||||
		`{"slot":[4,3,3,3,9,10,14,14,9,4,7,8,8,5,10],"free":[[1,2,3],3],"scatter":[[[1,2,3],3000]]}`,
 | 
							`{"slot":[1,2,4,5,6,7,3,3,3,8,9,10,11,12,13],"free":[[6,7,8],10],"scatter":[[[6,7,8],300]]}`,
 | 
				
			||||||
	];
 | 
						];
 | 
				
			||||||
	protected freeTemps: string[] = [
 | 
						protected FreeTemps: string[] = [
 | 
				
			||||||
		`{"slot":[13,9,5,14,4,9,4,12,12,11,4,14,8,7,6],"line":[[[10,6],195,300],[[10,6],213,300]]}`,
 | 
					 | 
				
			||||||
		`{"slot":[9,9,10,13,4,5,4,3,4,11,10,14,14,14,5]}`,
 | 
							`{"slot":[9,9,10,13,4,5,4,3,4,11,10,14,14,14,5]}`,
 | 
				
			||||||
		`{"slot":[12,6,8,12,11,7,12,11,5,5,11,5,3,10,9]}`,
 | 
							`{"slot":[12,6,8,12,11,7,12,11,5,5,11,5,3,10,9]}`,
 | 
				
			||||||
		`{"slot":[4,6,11,13,8,12,12,3,4,10,7,5,14,14,4]}`,
 | 
							`{"slot":[4,6,11,13,8,12,12,3,4,10,7,5,14,14,4]}`,
 | 
				
			||||||
		`{"slot":[5,9,9,3,11,10,4,5,12,5,4,14,12,5,9],"line":[[[10,6],195,300],[[10,6],213,300]]}`,
 | 
							`{"slot":[12,11,9,14,6,7,2,3,8,8,11,10,10,7,14]}`,
 | 
				
			||||||
		`{"slot":[14,4,10,3,11,5,14,3,12,6,10,6,14,5,12],"line":[[[0,6,12],49,750]],"scatter":[[[3,7],3000]]}`,
 | 
					 | 
				
			||||||
		`{"slot":[9,14,13,4,11,4,7,6,14,6,12,13,9,12,12]}`,
 | 
							`{"slot":[9,14,13,4,11,4,7,6,14,6,12,13,9,12,12]}`,
 | 
				
			||||||
		`{"slot":[10,3,12,13,5,6,4,8,4,9,13,14,11,14,4]}`,
 | 
							`{"slot":[10,3,12,13,5,6,4,8,4,9,13,14,11,14,4]}`,
 | 
				
			||||||
		`{"slot":[10,14,13,9,8,6,6,6,4,13,13,12,9,14,4],"line":[[[5,6,7],122,3000]]}`,
 | 
					 | 
				
			||||||
		`{"slot":[11,13,9,8,5,8,5,5,13,9,14,9,12,4,7]}`,
 | 
							`{"slot":[11,13,9,8,5,8,5,5,13,9,14,9,12,4,7]}`,
 | 
				
			||||||
 | 
							// `{"slot":[10,14,13,9,8,6,6,6,4,13,13,12,9,14,4],"line":[[[5,6,7],122,300]]}`,
 | 
				
			||||||
 | 
							// `{"slot":[13,9,5,14,4,9,4,12,12,11,4,14,8,7,6],"line":[[[10,6],195,300],[[10,6],213,300]]}`,
 | 
				
			||||||
 | 
							// `{"slot":[5,9,9,3,11,10,4,5,12,5,4,14,12,5,9],"line":[[[10,6],195,300],[[10,6],213,300]]}`,
 | 
				
			||||||
 | 
							// `{"slot":[2,8,13,2,10,9,12,5,11,4,5,2,12,5,8],"line":[[[0,6,12],49,150],[[0,11,2],61,150],[[0,11,7,13],70,3000],[[0,11,12],79,150],[[10,11,7,13],234,3000]]}`,
 | 
				
			||||||
 | 
							// `{"slot":[5,12,13,3,4,10,2,5,8,8,2,9,12,10,9],"line":[[[10,1,12],183,150],[[10,6,2],195,150],[[10,6,12],213,150]]}`,
 | 
				
			||||||
 | 
							`{"slot":[14,4,10,3,11,5,14,3,12,6,10,6,14,5,12],"line":[[[0,6,12],49,750]],"scatter":[[[3,7],300]]}`,
 | 
				
			||||||
 | 
							`{"slot":[6,3,12,4,8,14,10,3,7,9,10,4,10,6,7],"line":[[[10,6,12],213,75]],"scatter":[[[1,7],300]]}`,
 | 
				
			||||||
 | 
							`{"slot":[9,12,3,7,2,6,13,11,3,11,13,3,8,6,6],"free":[[2,8,11],10],"scatter":[[[2,8,11],900]]}`,
 | 
				
			||||||
	];
 | 
						];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -5,7 +5,8 @@ import "module-alias/register";
 | 
				
			|||||||
// // 必載入
 | 
					// // 必載入
 | 
				
			||||||
// import "../Utils/catan.ts";
 | 
					// import "../Utils/catan.ts";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import WebSocket, { WebSocketServer } from 'ws';
 | 
					import { WebSocketServer } from 'ws';
 | 
				
			||||||
 | 
					import { NetConnector } from "../script/Engine/CatanEngine/NetManagerV2/NetConnector";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
http://119.77.165.60/MyWeb/SD2/slot1/index.html?token=test&slotid=1&v=1724652287&host=127.0.0.1&language=zh-tw&logo=2&pl=1
 | 
					http://119.77.165.60/MyWeb/SD2/slot1/index.html?token=test&slotid=1&v=1724652287&host=127.0.0.1&language=zh-tw&logo=2&pl=1
 | 
				
			||||||
@@ -14,26 +15,28 @@ ws://192.168.5.36:9005
 | 
				
			|||||||
ws://127.0.0.1:9005
 | 
					ws://127.0.0.1:9005
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const port: number = process.env.PORT ? parseInt(process.env.PORT, 10) : 8080;  // 默认端口为 8080
 | 
				
			||||||
const server = new WebSocketServer({ port: 8080 });
 | 
					const server = new WebSocketServer({ port: 8080 });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
server.on('connection', (socket: WebSocket) => {
 | 
					// server.on('connection', (socket: WebSocket) => {
 | 
				
			||||||
	console.log('客户端已连接');
 | 
					// 	console.log('客户端已连接');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 发送消息到客户端
 | 
					// 	// 发送消息到客户端
 | 
				
			||||||
	socket.send('欢迎连接到WebSocket服务器');
 | 
					// 	socket.send('欢迎连接到WebSocket服务器');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 接收来自客户端的消息
 | 
					// 	// 接收来自客户端的消息
 | 
				
			||||||
	socket.on('message', (message: string) => {
 | 
					// 	socket.on('message', (message: string) => {
 | 
				
			||||||
		console.log(`收到客户端消息: ${message}`);
 | 
					// 		console.log(`收到客户端消息: ${message}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// 回应消息
 | 
					// 		// 回应消息
 | 
				
			||||||
		socket.send(`服务器收到你的消息: ${message}`);
 | 
					// 		socket.send(`服务器收到你的消息: ${message}`);
 | 
				
			||||||
	});
 | 
					// 	});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 处理客户端断开连接
 | 
					// 	// 处理客户端断开连接
 | 
				
			||||||
	socket.on('close', () => {
 | 
					// 	socket.on('close', () => {
 | 
				
			||||||
		console.log('客户端已断开连接');
 | 
					// 		console.log('客户端已断开连接');
 | 
				
			||||||
	});
 | 
					// 	});
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					server.on('connection', NetConnector.OnWebSocketConnection);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
console.log('WebSocket服务器运行在 ws://localhost:8080');
 | 
					console.log('WebSocket服务器运行在 ws://localhost:8080');
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user