[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-----
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
QW5H+GVZyg==
CisGAQQB1nkCBAIEgfUEgfIA8AB2ANq2v2s/tbYin5vCu1xr6HCRcWy7UYSFNL2k
PTBI1/urAAABi26LYFYAAAQDAEcwRQIhAMAurxQPqlUiW9PYDOSsxPhhDum/Osv2
MLcY+juSSa/3AiAhIma8L9EP1zoUTWcOxs6tHEnOAxaJIwSnk6kBZhLC0AB2ADtT
d3U+LbmAToswWwb+QDtn2E/D9Me9AA0tcm/h+tQXAAABi26LYEgAAAQDAEcwRQIh
AIhfbSv55vA0R/xwdUdlJ+Sc0xLGc3GigfeCBk9sqDkjAiBYltUa0XQu3y/aR1Ey
C7qsiFbzpZP7Jyf+Z6HSQCUiEjANBgkqhkiG9w0BAQsFAAOCAQEAhHWDEE+6POUM
u9tJVy8X5mPISvJ9KqDfqyCV/TmywX0we6uYuyEPAIyMeYh9lnpEhGDvHZVbvAuR
A+edMYC2SVBtbAlNCi3hfmnPvTJXtFBsx2hq3aC20pOIuiRN8y9h3fqvGR5H5Qef
Q7voM3YvEgThvx2/wrCobSk8vp5ljt9BFXFojv6mwfnp5dWHejOXpQDpB5tGv5pG
7OeGN+jeZ+VKUnFaj5+BZ+pv8LXPeszBuOvqid4CGKYx6i0I0H9HIQKwhDHA10y1
Fx/ZgmvuIm6MHNklCfUw5dTqgHfml7J+yEamHPXGRmofsVisJ6sC/l3fzTte2mZY
Dcio0jTFBw==
-----END CERTIFICATE-----

View File

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMu++EVscesee4
WKrX8Utrm4Y6r64w/QwkVRwTAGuLrg+mVefPIf1suMjXeIFeKPCwz4FiOcicXNa6
oCs6Ds33/D4X6P1GU0JeGItEW31qEJ24XBuhr5XT8Cxadvq/jQSose0F89Y1+kIr
eBq3uAM2UQxVLdh7ncIteVEucy04SJ4s1Ptaqq22aT1x+z70/u2AvFBHMNoJ5c9m
/bGsQTks1cJoeXrlb3AEnNsekdZuOYHDjIYNWeeZ+ig9YkwgeEcWLm62TBpfONrS
1hVS5OHbtnBtkK3I6G5vEnpNhVTtzQ6mXjsL/rO4EaN4DAD4Lj0U+blHgwu1Uwib
0YJhOYphAgMBAAECggEAKUIKT5oJQIdLkhvUOfY3Y7UQxMzYhqjIBJ5eLPodsiVe
o/+V2mkYIAvQ9ZMkRuxrLMZ0ZW4Nnm0bHLrgWy/WlA3yGXFrcPugWUQK9LiXOoOk
tR1iuB+hSveQiJ6Hg4iQkspgYJ214mTPZuEqSTG8+/ozSQsXIDo3gmB7Wqf9SeUD
tBmItjTWY6XS31xhwzF6DBa5fzeN+D01pDrocl50MjNrXd0uUdy+SXYYud+N3SRs
LxDBLFQHikWNt+YVaW7RG0ZlGIyRVvM2QF/rONFEOLbQLA6Wi2SdU4OX22miZkmJ
TKs+kvlCsRvbUVE2jMYoTlQonTCWZ+vAIXfL3g1InQKBgQD9XZ2k1VvwJpnz2OpS
IYx7EUPCsAQ2KD5YzoigmrY6xLIR5gjqbM5d5VKwH6EyLn9TQ3SeC33w28ceT/y2
DaGGFlhShBMKmxo1LBOQfJess67q0g/NVbyks9mbGxcjZqCP5wj8G7IHWtzH28rV
3T1EuMOFn/LZOrGO6g/oVj56LwKBgQDO3OCFr6tr7YGWc1cwQCVfd53RBwRgbimv
XJv5127CnWnFEfIaDjsmC270WpmTRlTgVgM9GZS2SVVeECLclNI/Fpo6EUb2Ok+C
ZonZUPOxcdxvKeaDVMY+Ec9+vmjiz//cz/QhBoQx0Dzk0HHJATmPdz4wXzg0BRXQ
qiPP7rJwbwKBgG8AHJiigOztfHVAiygAWrNwFOeuhanUZ7wwf9sc7MlCc2E0DqPl
l2O7nEZdFRoPFOk9nFHBZyOmpc257VU1E5bTI07DXjQ/T3QMI2Yhr7GR5wgpj5K+
BS+DO8qgS7rOs3lYFq+c0po2TJOiz3JywuzgpYhdUt+ovzGFigKYBjcxAoGBALjk
4WV8M5rfCXHBHBALdZwT3SIkxHuwW1/bRaqVLPGUIyK6vIsfZyzFEWIkzJm/RkPR
fUmSYMJhX4UYpSBFgHpVKHp4UNXqHoDuR43O9lIG9EED0X5XOm3mG3EsnbEEuqvR
z2HpYiTn/FWEHf/MMXeS3Cn+Ic0VMn90Y1gKAMHPAoGAD3g4Yx+pM5QX1yTO3gLs
G3OlVJ1q5FyOFO/tQypHIkuJ24qndj98RkwGmwhH0RpoaOMFCK7ctPxlxRYLigwH
RG92Bb4Ysfj6tf4+/9VtxiKIOLMtX+oCEOpjEzBkixpRg1s4ppRRcUiFfTOXVceH
XoLPM/VWHQlZS1kmi7+wblE=
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC1lRK4Q4ynTz1+
+BhjuqJv7M4Nr97a+hEDx4R39NrS2hOb3O9zwktryOLmBGJez/QILPmLun4yirlr
vvibzU7HDgTJe6h3a0OnC8lKv6xAH+L1EUOHwzgpdsJKR/SmrCluYdhlcYh4uPcB
VICUZbX2Tgq2fmL7Cf2YkK+qOHnVQgNqfePVl+fidqqW1jcpBzqfB3RUevA+w51/
4fXo3CF2PsSfRnoE6N9Ss/PdPuvvfxmLr6gjak5L/6vHk68Ok2ubl3qTG1oyuhHr
OYoaOHiUNuY4bO8G6cTY/yjDJwe3kYI3zyj/W3a1RymLDgY048g9z0ACvaymwxWb
ei+z5TnpAgMBAAECggEAHbZ7DbPf/DC3O2OVehw8IFx7iznQGbz5s8ieIJLsi7wr
oUGR3TtZ5BVHK6RkBGe64uuZGgg2Rkb0+HCTdcsurNvaZK3bb08aDuea1KRwpz2Q
gdGFX13Oftp0CHulyPA7B1jzdAYT8s0xfgI52A6cq+UxU5Ny1ulXmfNzC0OajA6u
WhstV+HYLswR04U3B6nZlhO1Zf2nlKIYlGdIoR2I2rTss/h+aZ17adLnA5OjqxHf
N914XxSXGe0EXNfW7Z6oFcKgieScjaaBE7E7RZW8D8oZOi+Po5d6TcLAgSjCT8jC
Gwrimif5yTd+0Ct7F7QD9/nkyyFckfPAjItqL01MAQKBgQDu2Ht27fXdKVpcMssz
KfLQbfJuOBA05G9xZs1w55kaMFsH038bAiCPH+juaBqX3FKHSGi+5kxNGzRSpzkD
T0QzvAVhpkVPcfzDwcIV0NetJ+GpKTBeo691/2ERKC7/lbFSM8hMipzB9Cy15Ikm
0JzLCBRrZoeSiQk83cnUZnt7iQKBgQDCn7kazwRL1GnsDJmcqKSqXE6E+OsfwBPh
dpCgr8KNPDP14C80LrV6UxuXlrCd0k1EyBUoJsAWzlg7YrZwaknUjqDwPEDtxDMS
JNQBcb62222QOMEmzKqOINNR2rlPQcpfGG/z68Fhjo9sHXDWh+pHf7AFqnufn3wa
PODMfB5TYQKBgHvTvkbNXe9YNiGgr9qJv/oxVkOwSy6w09ouGwqS97wtH7SyAK7G
7oxlVcTsMgVTU3IRp0R5b0t2dCz5x0Qg/1H3A685natvhEUVGgNnb7m0+HhUA2C9
agU57mAPvjYBrJnagNi18ElZxyhSII0AEJnuSW/ZCyZ8Z06oCbBVpWVJAoGBAJI0
ConpGgEdALUiggL9bTXNQe8CTx762/RzbRJI9o3CvAXo84zvycSqyf+GZAcrBIC3
Da2r7oEzYXS7IvIv5maW/q95lA0JZpQqtlifafVTwWqmN/M9rKI4ZocHGE5BzhTB
9tf2Mr9mqLc/JpUCZSxw73pSJ6wx0rijIvx6AQ4BAoGAdxwdKeJUXCq2alk+n3uO
hdp76TKLrmJE219ZMCg0hbACTchE8RgbOiPFcx8l9/tCNPytKL4GeeH5RUSE27Qy
+jP0vck4Q4+QuUNCmzD4HpFtLLfEx2O4qRoPDd3C1NPc1qSlYIOJj89VoYwy52pr
7/Bwa9Ci20NJo61Pit7Ghf4=
-----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 { ServiceType } from "../../shared/protocols/serviceProto";
export default async function (call: ApiCall<ReqExit, ResExit>) {
// TODO
call.error("API Not Implemented");
call.succ(0);
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 */
public static DelConns(conn: BaseConnection): void {
for (let i: number = 0; i < this.conns.length; i++) {
if (this.conns[i] === conn) {
this.conns.splice(i, 1);
break;
}
if (conn.Room) {
conn.Room.Exit(conn);
}
this.conns.splice(this.conns.indexOf(conn), 1);
}
// /** List */

View File

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