[add] 在來一局機制

This commit is contained in:
建喵 2024-01-09 16:07:31 +08:00
parent 4d9134d381
commit 14505e26ee
5 changed files with 92 additions and 59 deletions

View File

@ -1,29 +1,29 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIE4zCCA8ugAwIBAgISBKkroyiDI8s2UhriA6ELDJ3dMA0GCSqGSIb3DQEBCwUA MIIE4zCCA8ugAwIBAgISBAWtfXO4m+fOSxIBprZ/dGV3MA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMzA2MjAwOTIyMjRaFw0yMzA5MTgwOTIyMjNaMBYxFDASBgNVBAMT EwJSMzAeFw0yMzEwMjYyMzMxNDlaFw0yNDAxMjQyMzMxNDhaMBYxFDASBgNVBAMT
C2ppYW5taWF1LnRrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLvv C2ppYW5taWF1LnRrMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtZUS
hFbHHrHnuFiq1/FLa5uGOq+uMP0MJFUcEwBri64PplXnzyH9bLjI13iBXijwsM+B uEOMp089fvgYY7qib+zODa/e2voRA8eEd/Ta0toTm9zvc8JLa8ji5gRiXs/0CCz5
YjnInFzWuqArOg7N9/w+F+j9RlNCXhiLRFt9ahCduFwboa+V0/AsWnb6v40EqLHt i7p+Moq5a774m81Oxw4EyXuod2tDpwvJSr+sQB/i9RFDh8M4KXbCSkf0pqwpbmHY
BfPWNfpCK3gat7gDNlEMVS3Ye53CLXlRLnMtOEieLNT7Wqqttmk9cfs+9P7tgLxQ ZXGIeLj3AVSAlGW19k4Ktn5i+wn9mJCvqjh51UIDan3j1Zfn4naqltY3KQc6nwd0
RzDaCeXPZv2xrEE5LNXCaHl65W9wBJzbHpHWbjmBw4yGDVnnmfooPWJMIHhHFi5u VHrwPsOdf+H16Nwhdj7En0Z6BOjfUrPz3T7r738Zi6+oI2pOS/+rx5OvDpNrm5d6
tkwaXzja0tYVUuTh27ZwbZCtyOhubxJ6TYVU7c0Opl47C/6zuBGjeAwA+C49FPm5 kxtaMroR6zmKGjh4lDbmOGzvBunE2P8owycHt5GCN88o/1t2tUcpiw4GNOPIPc9A
R4MLtVMIm9GCYTmKYQIDAQABo4ICDTCCAgkwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud Ar2spsMVm3ovs+U56QIDAQABo4ICDTCCAgkwDgYDVR0PAQH/BAQDAgWgMB0GA1Ud
JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW
BBRRHDJGnyvifT6skdczB5Bbg8xsezAfBgNVHSMEGDAWgBQULrMXt1hWy65QCUDm BBSxh0b6YCKxPGtk65ERF9QIzmDN+DAfBgNVHSMEGDAWgBQULrMXt1hWy65QCUDm
H6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9yMy5v H6+dixTCxjBVBggrBgEFBQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9yMy5v
LmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iub3JnLzAW LmxlbmNyLm9yZzAiBggrBgEFBQcwAoYWaHR0cDovL3IzLmkubGVuY3Iub3JnLzAW
BgNVHREEDzANggtqaWFubWlhdS50azATBgNVHSAEDDAKMAgGBmeBDAECATCCAQQG BgNVHREEDzANggtqaWFubWlhdS50azATBgNVHSAEDDAKMAgGBmeBDAECATCCAQQG
CisGAQQB1nkCBAIEgfUEgfIA8AB2AHoyjFTYty22IOo44FIe6YQWcDIThU070ivB CisGAQQB1nkCBAIEgfUEgfIA8AB2ANq2v2s/tbYin5vCu1xr6HCRcWy7UYSFNL2k
OlejUutSAAABiNhTtbgAAAQDAEcwRQIhALXG+vzXqAcq5iUxWBa3WmpaJ3acMHtG PTBI1/urAAABi26LYFYAAAQDAEcwRQIhAMAurxQPqlUiW9PYDOSsxPhhDum/Osv2
WnQyIYDeXVf+AiBMZKTJe7/iLqBkae97shOfQQT0q7KQdSBqS4JLOs5e+QB2AK33 MLcY+juSSa/3AiAhIma8L9EP1zoUTWcOxs6tHEnOAxaJIwSnk6kBZhLC0AB2ADtT
vvp8/xDIi509nB4+GGq0Zyldz7EMJMqFhjTr3IKKAAABiNhTthMAAAQDAEcwRQIh d3U+LbmAToswWwb+QDtn2E/D9Me9AA0tcm/h+tQXAAABi26LYEgAAAQDAEcwRQIh
AJd6+jNguVyb2ckOWM+vXfh1r3susTQxKnkgpu7aV193AiBnO/lBALds7BYz+19T AIhfbSv55vA0R/xwdUdlJ+Sc0xLGc3GigfeCBk9sqDkjAiBYltUa0XQu3y/aR1Ey
UK88/Y2cXbJf03iYjmVM3fENrDANBgkqhkiG9w0BAQsFAAOCAQEAalqbVHGCuhcG C7qsiFbzpZP7Jyf+Z6HSQCUiEjANBgkqhkiG9w0BAQsFAAOCAQEAhHWDEE+6POUM
gDDAPPvfM3qkRewOztTwhcZV0sgSFkFdlzwL+XGQmLLs08EbltkrOhabF7PUpAEL u9tJVy8X5mPISvJ9KqDfqyCV/TmywX0we6uYuyEPAIyMeYh9lnpEhGDvHZVbvAuR
Awv0RdfxgAb5Glt1BFgVd4bXyQoD6T8R4OZX/IL2d9TQGlh73C0zqs4m++j64CYr A+edMYC2SVBtbAlNCi3hfmnPvTJXtFBsx2hq3aC20pOIuiRN8y9h3fqvGR5H5Qef
jmVSXutFOiEv35FVDGXV2RMrSOd3LALkqA/qepiJ7RoSdDmZwH0NKGeyUWg818oe Q7voM3YvEgThvx2/wrCobSk8vp5ljt9BFXFojv6mwfnp5dWHejOXpQDpB5tGv5pG
avQlXeh7Xy/wHPpyQPxOfD0ouodNi8mhL4cGHbDWPpXPPJ1WY2khKpFR79FHQb3O 7OeGN+jeZ+VKUnFaj5+BZ+pv8LXPeszBuOvqid4CGKYx6i0I0H9HIQKwhDHA10y1
wEug4uvMeMEyYp0ZIKlSjQsF+JbgdCDW2qu8MZKM+CdGoUVpgHEYZ7wVK2UhdJDV Fx/ZgmvuIm6MHNklCfUw5dTqgHfml7J+yEamHPXGRmofsVisJ6sC/l3fzTte2mZY
QW5H+GVZyg== Dcio0jTFBw==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
XoLPM/VWHQlZS1kmi7+wblE= 7/Bwa9Ci20NJo61Pit7Ghf4=
-----END PRIVATE KEY----- -----END PRIVATE KEY-----

View File

@ -1,7 +1,11 @@
import { ApiCall } from "tsrpc"; import { ApiCall, BaseConnection } from "tsrpc";
import Room from "../../component/Room/Room";
import { ReqExit, ResExit } from "../../shared/protocols/room/PtlExit"; import { ReqExit, ResExit } from "../../shared/protocols/room/PtlExit";
import { ServiceType } from "../../shared/protocols/serviceProto";
export default async function (call: ApiCall<ReqExit, ResExit>) { export default async function (call: ApiCall<ReqExit, ResExit>) {
// TODO call.succ(0);
call.error("API Not Implemented"); const conn: BaseConnection<ServiceType> = call.conn;
const room: Room = conn.Room;
room.Exit(conn);
} }

View File

@ -28,12 +28,10 @@ export default class Lobby {
/** DelConns */ /** DelConns */
public static DelConns(conn: BaseConnection): void { public static DelConns(conn: BaseConnection): void {
for (let i: number = 0; i < this.conns.length; i++) { if (conn.Room) {
if (this.conns[i] === conn) { conn.Room.Exit(conn);
this.conns.splice(i, 1);
break;
}
} }
this.conns.splice(this.conns.indexOf(conn), 1);
} }
// /** List */ // /** List */

View File

@ -60,7 +60,10 @@ export default class Room {
/** Exit */ /** Exit */
public Exit(conn: BaseConnection): void { public Exit(conn: BaseConnection): void {
this.conns.splice(this.conns.indexOf(conn), 1);
server.broadcastMsg("room/Exit", 0, <WsConnection<ServiceType>[]>this.conns); server.broadcastMsg("room/Exit", 0, <WsConnection<ServiceType>[]>this.conns);
Room.rooms[this.RoomId] = null;
delete Room.rooms[this.RoomId];
} }
/** GotoGame */ /** GotoGame */
@ -102,6 +105,13 @@ export default class Room {
} }
server.broadcastMsg("room/ChangeState", data, target); server.broadcastMsg("room/ChangeState", data, target);
}); });
if (conn) {
this.setState(conn, state);
} else {
this.conns.forEach((conn: BaseConnection) => {
this.setState(conn, state);
});
}
switch (state) { switch (state) {
case EGameState.Ready: case EGameState.Ready:
this.Ready(conn); this.Ready(conn);
@ -111,6 +121,22 @@ export default class Room {
this.TurnEnd(conn); this.TurnEnd(conn);
break; break;
case EGameState.WaitNewGame: {
let canStart: boolean = true;
this.connData.forEach((connData: RoomConnData) => {
if (connData.state !== EGameState.WaitNewGame) {
canStart = false;
}
});
if (canStart) {
this.conns.forEach((conn: BaseConnection) => {
this.setState(conn, EGameState.Ready);
});
this.Ready(conn);
}
break;
}
default: default:
break; break;
} }
@ -138,9 +164,7 @@ export default class Room {
public Ready(conn: BaseConnection): void { public Ready(conn: BaseConnection): void {
const self: this = this; const self: this = this;
const cardCount: number = 24; const cardCount: number = 24;
const data: RoomConnData = this.connData.get(conn); this.setState(conn, EGameState.Ready);
data.state = EGameState.Ready;
this.connData.set(conn, data);
let canStart: boolean = true; let canStart: boolean = true;
this.connData.forEach((connData: RoomConnData) => { this.connData.forEach((connData: RoomConnData) => {
if (connData.state === undefined || connData.state !== EGameState.Ready) { if (connData.state === undefined || connData.state !== EGameState.Ready) {
@ -179,6 +203,13 @@ export default class Room {
//#region Custom //#region Custom
/** setState */
private setState(conn: BaseConnection, state: EGameState): void {
const data: RoomConnData = this.connData.get(conn);
data.state = state;
this.connData.set(conn, data);
}
/** Join */ /** Join */
public Join(conn: BaseConnection): void { public Join(conn: BaseConnection): void {
this.conns.push(conn); this.conns.push(conn);