[add] Lobby List

This commit is contained in:
建喵 2023-08-28 17:24:17 +08:00
parent 65a0d2ed41
commit 81ca68d81f
16 changed files with 183 additions and 71 deletions

View File

@ -2,12 +2,12 @@
import _ws from "ws" import _ws from "ws"
import { Encoding } from "../Engine/CatanEngine/CSharp/System/Text/Encoding" import { Encoding } from "../Engine/CatanEngine/CSharp/System/Text/Encoding"
import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse" import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse"
import WebSocketServerClass from "./WebSocketServerClass" import WebSocketServerClass from "../NetManager/WebSocketServerClass"
/** /**
* WebSocket * Client
*/ */
export default class WebSocketClass { export default class Client {
//#region private //#region private
@ -69,7 +69,7 @@ export default class WebSocketClass {
console.log(`Client_${this.clientCount} Close connected`) console.log(`Client_${this.clientCount} Close connected`)
} }
/** 發送給所有client */ /** 發送給client */
public SendClient(req: INetResponse<any>): void { public SendClient(req: INetResponse<any>): void {
const status = 0 const status = 0
const json: any[] = [req.Method] const json: any[] = [req.Method]

View File

@ -1,5 +1,6 @@
import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse" import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse";
import WebSocketServerClass from "../NetManager/WebSocketServerClass" import Lobby from "../Lobby/Lobby";
import WebSocketServerClass from "../NetManager/WebSocketServerClass";
export default class MainControlData { export default class MainControlData {
constructor() { constructor() {
@ -7,11 +8,11 @@ export default class MainControlData {
} }
/** SERVER主動通知 */ /** SERVER主動通知 */
private _serverData(resp: INetResponse<any>): void { private _serverData(req: INetResponse<any>): void {
if (resp.IsValid) { if (req.IsValid) {
switch (resp.Method) { switch (req.Method) {
case "chat.send": case "lobby.list":
resp.WS.SendClient(resp) Lobby.GetList(req);
// GiftData.Instance?.AddCommonList(resp.Data) // GiftData.Instance?.AddCommonList(resp.Data)
break break
default: default:

View File

@ -7,7 +7,7 @@ export interface INetRequest<TRequest, TResponse> {
Data: TRequest; Data: TRequest;
Result: INetResponse<TResponse>; Result: INetResponse<TResponse>;
SendAsync(): Iterator<any>; // SendAsync(): Iterator<any>;
Send(); // Send();
} }

View File

@ -1,9 +1,9 @@
import WebSocketClass from "../../../../NetManager/WebSocketClass" import Client from "../../../../Client/Client"
export interface INetResponse<TResponse> { export interface INetResponse<TResponse> {
readonly Method: string readonly Method: string
readonly WS: WebSocketClass readonly WS: Client
readonly Status: number readonly Status: number
readonly Data: TResponse readonly Data: TResponse
readonly IsValid: boolean readonly IsValid?: boolean
} }

View File

@ -1,5 +1,3 @@
import Event from "@/modules/event";
import * as Define from "@/modules/player/define";
import { BaseEnumerator } from "../CoroutineV2/Core/BaseEnumerator"; import { BaseEnumerator } from "../CoroutineV2/Core/BaseEnumerator";
import { Action } from "../CSharp/System/Action"; import { Action } from "../CSharp/System/Action";
import { Encoding } from "../CSharp/System/Text/Encoding"; import { Encoding } from "../CSharp/System/Text/Encoding";
@ -8,8 +6,6 @@ import { INetResponse } from "./Core/INetResponse";
import NetConfig from "./NetConfig"; import NetConfig from "./NetConfig";
export class NetConnector { export class NetConnector {
/** Event */
public readonly event: Event<Define.Event.Func> = new Event<Define.Event.Func>();
readonly OnDataReceived: Action<INetResponse<any>> = new Action<INetResponse<any>>(); readonly OnDataReceived: Action<INetResponse<any>> = new Action<INetResponse<any>>();
readonly OnDisconnected: Action<void> = new Action<void>(); readonly OnDisconnected: Action<void> = new Action<void>();
readonly OnLoadUIMask: Action<boolean> = new Action<boolean>(); readonly OnLoadUIMask: Action<boolean> = new Action<boolean>();
@ -137,7 +133,7 @@ export class NetConnector {
// if (CC_DEBUG) { // if (CC_DEBUG) {
console.debug(`[RPC] ${this._host} Connected.`); console.debug(`[RPC] ${this._host} Connected.`);
// } // }
this.event.emit(Define.Event.Socket.Connect); // this.event.emit(Define.Event.Socket.Connect);
} }
private OnWebSocketMessage(e: MessageEvent) { private OnWebSocketMessage(e: MessageEvent) {
@ -208,11 +204,11 @@ export class NetConnector {
private OnWebSocketClose(e: CloseEvent) { private OnWebSocketClose(e: CloseEvent) {
this.WebSocketEnded(); this.WebSocketEnded();
this.event.emit(Define.Event.Socket.Disconnect); // this.event.emit(Define.Event.Socket.Disconnect);
} }
private OnWebSocketError(e: CloseEvent) { private OnWebSocketError(e: CloseEvent) {
this.event.emit(Define.Event.Socket.Error); // this.event.emit(Define.Event.Socket.Error);
} }
} }
@ -221,6 +217,7 @@ const ErrorResponse: INetResponse<any> = {
Method: "", Method: "",
Data: {}, Data: {},
IsValid: false, IsValid: false,
WS: undefined,
}; };
class WsConnectEnumerator extends BaseEnumerator { class WsConnectEnumerator extends BaseEnumerator {

View File

@ -1,4 +1,3 @@
import { VueNetConnector } from "@/assets/VueScript/Net/VueNetConnector";
import { INetRequest } from "./Core/INetRequest"; import { INetRequest } from "./Core/INetRequest";
export abstract class NetRequest<TResquest, TResponse> implements INetRequest<TResquest, TResponse> { export abstract class NetRequest<TResquest, TResponse> implements INetRequest<TResquest, TResponse> {
@ -11,18 +10,18 @@ export abstract class NetRequest<TResquest, TResponse> implements INetRequest<TR
Data: TResquest; Data: TResquest;
Result: import("./Core/INetResponse").INetResponse<TResponse>; Result: import("./Core/INetResponse").INetResponse<TResponse>;
/** // /**
* Cocos會收到SERVER主動通知 // * 在大廳呼叫Cocos會收到SERVER主動通知
* Cocos會收到SERVER主動通知 // * 在大廳呼叫Cocos會收到SERVER主動通知
* Cocos會收到SERVER主動通知 // * 在大廳呼叫Cocos會收到SERVER主動通知
*/ // */
SendAsync(mask: boolean = false): Iterator<any> { // SendAsync(mask: boolean = false): Iterator<any> {
// return NetManager.SendAsync(this, mask); // // return NetManager.SendAsync(this, mask);
return VueNetConnector.SendAsync(this, mask); // return VueNetConnector.SendAsync(this, mask);
} // }
Send() { // Send() {
// NetManager.Send(this); // // NetManager.Send(this);
VueNetConnector.Send(this); // VueNetConnector.Send(this);
} // }
} }

View File

@ -0,0 +1,28 @@
import Client from "../../../Client/Client"
import { INetResponse } from "./Core/INetResponse"
export abstract class NetResponse implements INetResponse<any> {
protected data: any = undefined
protected method: string = ""
protected ws: Client = undefined
protected status: number = undefined
get Method(): string {
return this.method
}
get WS(): Client {
return this.ws
}
get Status(): number {
return this.status
}
get Data(): any {
return this.data
}
constructor(ws: Client, data: any, status: number = 0) {
this.ws = ws
this.data = data
this.status = status
}
}

View File

@ -1,30 +0,0 @@
import MainControlData from "./DataReceived/MainControlData"
import WebSocketServerClass from "./NetManager/WebSocketServerClass"
/**
* GuessWhoIAm
*/
export default class GuessWhoIAmClass {
//#region private
private clientCount: number = 0
//#endregion
//#region Lifecycle
/**
*
*/
constructor() {
new WebSocketServerClass()
new MainControlData()
}
//#endregion
//#region Custom
//#endregion
}

42
src/Lobby/Lobby.ts Normal file
View File

@ -0,0 +1,42 @@
import { LobbyListRequest } from "../define/Request/LobbyRequest";
import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse";
import Room from "../Room/Room";
/**
* Lobby
*/
export default class Lobby {
//#region private
private static list: Room[] = []
//#endregion
//#region Custom
/** GetList */
public static GetList(req: INetResponse<any>): void {
let resp: LobbyListRequest = new LobbyListRequest(req.WS, this.list, 0)
req.WS.SendClient(resp)
}
/** Create */
public static Create(req: INetResponse<any>): void {
let room = new Room()
this.list.push(room)
//
}
/** Join */
public static Join(req: INetResponse<any>): void {
//
}
/** Exit */
public static Exit(req: INetResponse<any>): void {
//
}
//#endregion
}

View File

@ -1,10 +1,10 @@
import express from "express" import express from "express"
import fs from "fs" import fs from "fs"
import _ws from "ws" import _ws from "ws"
import Client from "../Client/Client"
import { Action } from "../Engine/CatanEngine/CSharp/System/Action" import { Action } from "../Engine/CatanEngine/CSharp/System/Action"
import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse" import { INetResponse } from "../Engine/CatanEngine/NetManagerV2/Core/INetResponse"
import BaseSingleton from "../Engine/Utils/Singleton/BaseSingleton" import BaseSingleton from "../Engine/Utils/Singleton/BaseSingleton"
import WebSocketClass from "./WebSocketClass"
const SocketServer: typeof _ws.Server = _ws.Server const SocketServer: typeof _ws.Server = _ws.Server
/** /**
@ -63,7 +63,7 @@ export default class WebSocketServerClass extends BaseSingleton<WebSocketServerC
private onConnection(ws: _ws): void { private onConnection(ws: _ws): void {
const clientNum: number = this.clientCount const clientNum: number = this.clientCount
console.log(`Client_${clientNum} connected`) console.log(`Client_${clientNum} connected`)
new WebSocketClass(ws, clientNum) new Client(ws, clientNum)
this.clientCount++ this.clientCount++
} }

28
src/Room/Room.ts Normal file
View File

@ -0,0 +1,28 @@
import BaseSingleton from "../Engine/Utils/Singleton/BaseSingleton"
/**
* Room
*/
export default class Room extends BaseSingleton<Room>() {
//#region private
//#endregion
//#region Lifecycle
/**
*
*/
constructor() {
super()
}
//#endregion
//#region Custom
//#endregion
}

View File

@ -6,11 +6,13 @@
import dayjs from "dayjs" import dayjs from "dayjs"
import "dayjs/locale/zh-tw" import "dayjs/locale/zh-tw"
import dotenv from "dotenv" import dotenv from "dotenv"
import MainControlData from "./DataReceived/MainControlData"
import "./Engine/CatanEngine/CSharp/String" import "./Engine/CatanEngine/CSharp/String"
import "./Engine/Utils/CCExtensions/ArrayExtension" import "./Engine/Utils/CCExtensions/ArrayExtension"
import "./Engine/Utils/CCExtensions/NumberExtension" import "./Engine/Utils/CCExtensions/NumberExtension"
import GuessWhoIAmClass from "./GuessWhoIAmClass" import WebSocketServerClass from "./NetManager/WebSocketServerClass"
dayjs.locale("zh-tw") dayjs.locale("zh-tw")
dotenv.config() dotenv.config()
new GuessWhoIAmClass() new WebSocketServerClass()
new MainControlData()

View File

@ -0,0 +1,28 @@
import { NetRequest } from "../../Engine/CatanEngine/NetManagerV2/NetRequest";
// #region Request
export type RpcExampleCodeRequest = null
export type RpcExampleCodeResponse = ExampleCodeData[]
export class ExampleCodeRequest extends NetRequest<RpcExampleCodeRequest, RpcExampleCodeResponse> {
get Method(): string {
return "example.code";
}
constructor() {
super();
}
}
// #endregion
// #region Type
export type ExampleCodeData = [
id: number,
title: number,
content: number,
time: number,
];
// #endregion

View File

@ -0,0 +1,17 @@
import { NetResponse } from "../../Engine/CatanEngine/NetManagerV2/NetResponse"
import Room from "../../Room/Room"
// #region Request
export type RpcLobbyListRequest = Room[]
export class LobbyListRequest extends NetResponse {
protected data: RpcLobbyListRequest = undefined
protected method: string = "lobby.list"
}
// #endregion
// #region Type
// #endregion