Code quality improvements.
This commit is contained in:
parent
93da399fa5
commit
686e6001b2
12 changed files with 316 additions and 303 deletions
|
@ -81,8 +81,6 @@ setInterval(() => {
|
||||||
}
|
}
|
||||||
}, 10000);
|
}, 10000);
|
||||||
|
|
||||||
const EMPTY_BUFFER = Buffer.alloc(0);
|
|
||||||
|
|
||||||
export default async function HandleRequest(req:IncomingMessage, res:ServerResponse, packet:Buffer) {
|
export default async function HandleRequest(req:IncomingMessage, res:ServerResponse, packet:Buffer) {
|
||||||
// Get the client's token string and request data
|
// Get the client's token string and request data
|
||||||
const requestTokenString = typeof(req.headers["osu-token"]) === "string" ? req.headers["osu-token"] : undefined;
|
const requestTokenString = typeof(req.headers["osu-token"]) === "string" ? req.headers["osu-token"] : undefined;
|
||||||
|
@ -94,7 +92,7 @@ export default async function HandleRequest(req:IncomingMessage, res:ServerRespo
|
||||||
await LoginProcess(req, res, packet, shared);
|
await LoginProcess(req, res, packet, shared);
|
||||||
shared.database.query("UPDATE osu_info SET value = ? WHERE name = 'online_now'", [shared.users.getLength() - 1]);
|
shared.database.query("UPDATE osu_info SET value = ? WHERE name = 'online_now'", [shared.users.getLength() - 1]);
|
||||||
} else {
|
} else {
|
||||||
let responseData = EMPTY_BUFFER;
|
let responseData = Buffer.allocUnsafe(0);
|
||||||
|
|
||||||
// Client has a token, let's see what they want.
|
// Client has a token, let's see what they want.
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,269 +1,261 @@
|
||||||
enum CountryCodes {
|
const countryCodes:{ [id: string]: number } = {
|
||||||
LV = 132,
|
"LV": 132,
|
||||||
AD = 3,
|
"AD": 3,
|
||||||
LT = 130,
|
"LT": 130,
|
||||||
KM = 116,
|
"KM": 116,
|
||||||
QA = 182,
|
"QA": 182,
|
||||||
VA = 0,
|
"VA": 0,
|
||||||
PK = 173,
|
"PK": 173,
|
||||||
KI = 115,
|
"KI": 115,
|
||||||
SS = 0,
|
"SS": 0,
|
||||||
KH = 114,
|
"KH": 114,
|
||||||
NZ = 166,
|
"NZ": 166,
|
||||||
TO = 215,
|
"TO": 215,
|
||||||
KZ = 122,
|
"KZ": 122,
|
||||||
BW = 35,
|
"BW": 35,
|
||||||
GA = 76,
|
"GA": 76,
|
||||||
AX = 247,
|
"AX": 247,
|
||||||
GE = 79,
|
"GE": 79,
|
||||||
UA = 222,
|
"UA": 222,
|
||||||
CR = 50,
|
"CR": 50,
|
||||||
AE = 0,
|
"AE": 0,
|
||||||
NE = 157,
|
"NE": 157,
|
||||||
ZA = 240,
|
"ZA": 240,
|
||||||
SK = 196,
|
"SK": 196,
|
||||||
BV = 34,
|
"BV": 34,
|
||||||
SH = 0,
|
"SH": 0,
|
||||||
PT = 179,
|
"PT": 179,
|
||||||
SC = 189,
|
"SC": 189,
|
||||||
CO = 49,
|
"CO": 49,
|
||||||
GP = 86,
|
"GP": 86,
|
||||||
GY = 93,
|
"GY": 93,
|
||||||
CM = 47,
|
"CM": 47,
|
||||||
TJ = 211,
|
"TJ": 211,
|
||||||
AF = 5,
|
"AF": 5,
|
||||||
IE = 101,
|
"IE": 101,
|
||||||
AL = 8,
|
"AL": 8,
|
||||||
BG = 24,
|
"BG": 24,
|
||||||
JO = 110,
|
"JO": 110,
|
||||||
MU = 149,
|
"MU": 149,
|
||||||
PM = 0,
|
"PM": 0,
|
||||||
LA = 0,
|
"LA": 0,
|
||||||
IO = 104,
|
"IO": 104,
|
||||||
KY = 121,
|
"KY": 121,
|
||||||
SA = 187,
|
"SA": 187,
|
||||||
KN = 0,
|
"KN": 0,
|
||||||
OM = 167,
|
"OM": 167,
|
||||||
CY = 54,
|
"CY": 54,
|
||||||
BQ = 0,
|
"BQ": 0,
|
||||||
BT = 33,
|
"BT": 33,
|
||||||
WS = 236,
|
"WS": 236,
|
||||||
ES = 67,
|
"ES": 67,
|
||||||
LR = 128,
|
"LR": 128,
|
||||||
RW = 186,
|
"RW": 186,
|
||||||
AQ = 12,
|
"AQ": 12,
|
||||||
PW = 180,
|
"PW": 180,
|
||||||
JE = 250,
|
"JE": 250,
|
||||||
TN = 214,
|
"TN": 214,
|
||||||
ZW = 243,
|
"ZW": 243,
|
||||||
JP = 111,
|
"JP": 111,
|
||||||
BB = 20,
|
"BB": 20,
|
||||||
VN = 233,
|
"VN": 233,
|
||||||
HN = 96,
|
"HN": 96,
|
||||||
KP = 0,
|
"KP": 0,
|
||||||
WF = 235,
|
"WF": 235,
|
||||||
EC = 62,
|
"EC": 62,
|
||||||
HU = 99,
|
"HU": 99,
|
||||||
GF = 80,
|
"GF": 80,
|
||||||
GQ = 87,
|
"GQ": 87,
|
||||||
TW = 220,
|
"TW": 220,
|
||||||
MC = 135,
|
"MC": 135,
|
||||||
BE = 22,
|
"BE": 22,
|
||||||
PN = 176,
|
"PN": 176,
|
||||||
SZ = 205,
|
"SZ": 205,
|
||||||
CZ = 55,
|
"CZ": 55,
|
||||||
LY = 0,
|
"LY": 0,
|
||||||
IN = 103,
|
"IN": 103,
|
||||||
FM = 0,
|
"FM": 0,
|
||||||
PY = 181,
|
"PY": 181,
|
||||||
PH = 172,
|
"PH": 172,
|
||||||
MN = 142,
|
"MN": 142,
|
||||||
GG = 248,
|
"GG": 248,
|
||||||
CC = 39,
|
"CC": 39,
|
||||||
ME = 242,
|
"ME": 242,
|
||||||
DO = 60,
|
"DO": 60,
|
||||||
KR = 0,
|
"KR": 0,
|
||||||
PL = 174,
|
"PL": 174,
|
||||||
MT = 148,
|
"MT": 148,
|
||||||
MM = 141,
|
"MM": 141,
|
||||||
AW = 17,
|
"AW": 17,
|
||||||
MV = 150,
|
"MV": 150,
|
||||||
BD = 21,
|
"BD": 21,
|
||||||
NR = 164,
|
"NR": 164,
|
||||||
AT = 15,
|
"AT": 15,
|
||||||
GW = 92,
|
"GW": 92,
|
||||||
FR = 74,
|
"FR": 74,
|
||||||
LI = 126,
|
"LI": 126,
|
||||||
CF = 41,
|
"CF": 41,
|
||||||
DZ = 61,
|
"DZ": 61,
|
||||||
MA = 134,
|
"MA": 134,
|
||||||
VG = 0,
|
"VG": 0,
|
||||||
NC = 156,
|
"NC": 156,
|
||||||
IQ = 105,
|
"IQ": 105,
|
||||||
BN = 0,
|
"BN": 0,
|
||||||
BF = 23,
|
"BF": 23,
|
||||||
BO = 30,
|
"BO": 30,
|
||||||
GB = 77,
|
"GB": 77,
|
||||||
CU = 51,
|
"CU": 51,
|
||||||
LU = 131,
|
"LU": 131,
|
||||||
YT = 238,
|
"YT": 238,
|
||||||
NO = 162,
|
"NO": 162,
|
||||||
SM = 198,
|
"SM": 198,
|
||||||
GL = 83,
|
"GL": 83,
|
||||||
IS = 107,
|
"IS": 107,
|
||||||
AO = 11,
|
"AO": 11,
|
||||||
MH = 138,
|
"MH": 138,
|
||||||
SE = 191,
|
"SE": 191,
|
||||||
ZM = 241,
|
"ZM": 241,
|
||||||
FJ = 70,
|
"FJ": 70,
|
||||||
SL = 197,
|
"SL": 197,
|
||||||
CH = 43,
|
"CH": 43,
|
||||||
RU = 0,
|
"RU": 0,
|
||||||
CW = 0,
|
"CW": 0,
|
||||||
CX = 53,
|
"CX": 53,
|
||||||
TF = 208,
|
"TF": 208,
|
||||||
NL = 161,
|
"NL": 161,
|
||||||
AU = 16,
|
"AU": 16,
|
||||||
FI = 69,
|
"FI": 69,
|
||||||
MS = 147,
|
"MS": 147,
|
||||||
GH = 81,
|
"GH": 81,
|
||||||
BY = 36,
|
"BY": 36,
|
||||||
IL = 102,
|
"IL": 102,
|
||||||
VC = 0,
|
"VC": 0,
|
||||||
NG = 159,
|
"NG": 159,
|
||||||
HT = 98,
|
"HT": 98,
|
||||||
LS = 129,
|
"LS": 129,
|
||||||
MR = 146,
|
"MR": 146,
|
||||||
YE = 237,
|
"YE": 237,
|
||||||
MP = 144,
|
"MP": 144,
|
||||||
SX = 0,
|
"SX": 0,
|
||||||
RE = 183,
|
"RE": 183,
|
||||||
RO = 184,
|
"RO": 184,
|
||||||
NP = 163,
|
"NP": 163,
|
||||||
CG = 0,
|
"CG": 0,
|
||||||
FO = 73,
|
"FO": 73,
|
||||||
CI = 0,
|
"CI": 0,
|
||||||
TH = 210,
|
"TH": 210,
|
||||||
HK = 94,
|
"HK": 94,
|
||||||
TK = 212,
|
"TK": 212,
|
||||||
XK = 0,
|
"XK": 0,
|
||||||
DM = 59,
|
"DM": 59,
|
||||||
LC = 0,
|
"LC": 0,
|
||||||
ID = 100,
|
"ID": 100,
|
||||||
MG = 137,
|
"MG": 137,
|
||||||
JM = 109,
|
"JM": 109,
|
||||||
IT = 108,
|
"IT": 108,
|
||||||
CA = 38,
|
"CA": 38,
|
||||||
TZ = 221,
|
"TZ": 221,
|
||||||
GI = 82,
|
"GI": 82,
|
||||||
KG = 113,
|
"KG": 113,
|
||||||
NU = 165,
|
"NU": 165,
|
||||||
TV = 219,
|
"TV": 219,
|
||||||
LB = 124,
|
"LB": 124,
|
||||||
SY = 0,
|
"SY": 0,
|
||||||
PR = 177,
|
"PR": 177,
|
||||||
NI = 160,
|
"NI": 160,
|
||||||
KE = 112,
|
"KE": 112,
|
||||||
MO = 0,
|
"MO": 0,
|
||||||
SR = 201,
|
"SR": 201,
|
||||||
VI = 0,
|
"VI": 0,
|
||||||
SV = 203,
|
"SV": 203,
|
||||||
HM = 0,
|
"HM": 0,
|
||||||
CD = 0,
|
"CD": 0,
|
||||||
BI = 26,
|
"BI": 26,
|
||||||
BM = 28,
|
"BM": 28,
|
||||||
MW = 151,
|
"MW": 151,
|
||||||
TM = 213,
|
"TM": 213,
|
||||||
GT = 90,
|
"GT": 90,
|
||||||
AG = 0,
|
"AG": 0,
|
||||||
UM = 0,
|
"UM": 0,
|
||||||
US = 225,
|
"US": 225,
|
||||||
AR = 13,
|
"AR": 13,
|
||||||
DJ = 57,
|
"DJ": 57,
|
||||||
KW = 120,
|
"KW": 120,
|
||||||
MY = 153,
|
"MY": 153,
|
||||||
FK = 71,
|
"FK": 71,
|
||||||
EG = 64,
|
"EG": 64,
|
||||||
BA = 0,
|
"BA": 0,
|
||||||
CN = 48,
|
"CN": 48,
|
||||||
GN = 85,
|
"GN": 85,
|
||||||
PS = 178,
|
"PS": 178,
|
||||||
SO = 200,
|
"SO": 200,
|
||||||
IM = 249,
|
"IM": 249,
|
||||||
GS = 0,
|
"GS": 0,
|
||||||
BR = 31,
|
"BR": 31,
|
||||||
GM = 84,
|
"GM": 84,
|
||||||
PF = 170,
|
"PF": 170,
|
||||||
PA = 168,
|
"PA": 168,
|
||||||
PG = 171,
|
"PG": 171,
|
||||||
BH = 25,
|
"BH": 25,
|
||||||
TG = 209,
|
"TG": 209,
|
||||||
GU = 91,
|
"GU": 91,
|
||||||
CK = 45,
|
"CK": 45,
|
||||||
MF = 252,
|
"MF": 252,
|
||||||
VE = 230,
|
"VE": 230,
|
||||||
CL = 46,
|
"CL": 46,
|
||||||
TR = 217,
|
"TR": 217,
|
||||||
UG = 223,
|
"UG": 223,
|
||||||
GD = 78,
|
"GD": 78,
|
||||||
TT = 218,
|
"TT": 218,
|
||||||
TL = 0,
|
"TL": 0,
|
||||||
MD = 0,
|
"MD": 0,
|
||||||
MK = 0,
|
"MK": 0,
|
||||||
ST = 202,
|
"ST": 202,
|
||||||
CV = 52,
|
"CV": 52,
|
||||||
MQ = 145,
|
"MQ": 145,
|
||||||
GR = 88,
|
"GR": 88,
|
||||||
HR = 97,
|
"HR": 97,
|
||||||
BZ = 37,
|
"BZ": 37,
|
||||||
UZ = 227,
|
"UZ": 227,
|
||||||
DK = 58,
|
"DK": 58,
|
||||||
SN = 199,
|
"SN": 199,
|
||||||
ET = 68,
|
"ET": 68,
|
||||||
VU = 234,
|
"VU": 234,
|
||||||
ER = 66,
|
"ER": 66,
|
||||||
BJ = 27,
|
"BJ": 27,
|
||||||
LK = 127,
|
"LK": 127,
|
||||||
NA = 155,
|
"NA": 155,
|
||||||
AS = 14,
|
"AS": 14,
|
||||||
SG = 192,
|
"SG": 192,
|
||||||
PE = 169,
|
"PE": 169,
|
||||||
IR = 0,
|
"IR": 0,
|
||||||
MX = 152,
|
"MX": 152,
|
||||||
TD = 207,
|
"TD": 207,
|
||||||
AZ = 18,
|
"AZ": 18,
|
||||||
AM = 9,
|
"AM": 9,
|
||||||
BL = 0,
|
"BL": 0,
|
||||||
SJ = 195,
|
"SJ": 195,
|
||||||
SB = 188,
|
"SB": 188,
|
||||||
NF = 158,
|
"NF": 158,
|
||||||
RS = 239,
|
"RS": 239,
|
||||||
DE = 56,
|
"DE": 56,
|
||||||
EH = 65,
|
"EH": 65,
|
||||||
EE = 63,
|
"EE": 63,
|
||||||
SD = 190,
|
"SD": 190,
|
||||||
ML = 140,
|
"ML": 140,
|
||||||
TC = 206,
|
"TC": 206,
|
||||||
MZ = 154,
|
"MZ": 154,
|
||||||
BS = 32,
|
"BS": 32,
|
||||||
UY = 226,
|
"UY": 226,
|
||||||
SI = 194,
|
"SI": 194,
|
||||||
AI = 7
|
"AI": 7
|
||||||
}
|
};
|
||||||
|
|
||||||
const keys = Object.keys(CountryCodes);
|
// Get id of a country from a 2 char code
|
||||||
const values = Object.values(CountryCodes);
|
export function getCountryID(code:string) : number {
|
||||||
|
const upperCode = code.toUpperCase();
|
||||||
export default function getCountryID(code:string) : number {
|
if (upperCode in countryCodes) {
|
||||||
// Get id of a country from a 2 char code
|
return countryCodes[upperCode];
|
||||||
const upperCode:string = code.toUpperCase();
|
|
||||||
if (upperCode in CountryCodes) {
|
|
||||||
const code = values[keys.indexOf(upperCode)];
|
|
||||||
if (typeof(code) === "string") {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return code;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { ConsoleHelper } from "../ConsoleHelper";
|
import { ConsoleHelper } from "../ConsoleHelper";
|
||||||
import fetch from "node-fetch";
|
import fetch from "node-fetch";
|
||||||
import getCountryID from "./Country";
|
import { getCountryID } from "./Country";
|
||||||
import { generateSession } from "./Util";
|
import { generateSession } from "./Util";
|
||||||
import LatLng from "./objects/LatLng";
|
import LatLng from "./objects/LatLng";
|
||||||
import LoginInfo from "./objects/LoginInfo";
|
import LoginInfo from "./objects/LoginInfo";
|
||||||
|
@ -14,6 +14,7 @@ import Shared from "./objects/Shared";
|
||||||
import osu from "../osuTyping";
|
import osu from "../osuTyping";
|
||||||
import IpZxqResponse from "./interfaces/IpZxqResponse";
|
import IpZxqResponse from "./interfaces/IpZxqResponse";
|
||||||
import { IncomingMessage, ServerResponse } from "http";
|
import { IncomingMessage, ServerResponse } from "http";
|
||||||
|
import UserInfo from "./objects/database/UserInfo";
|
||||||
const { decrypt: aesDecrypt } = require("aes256");
|
const { decrypt: aesDecrypt } = require("aes256");
|
||||||
|
|
||||||
const incorrectLoginResponse:Buffer = osu.Bancho.Writer().LoginReply(-1).toBuffer;
|
const incorrectLoginResponse:Buffer = osu.Bancho.Writer().LoginReply(-1).toBuffer;
|
||||||
|
@ -36,7 +37,7 @@ enum LoginResult {
|
||||||
|
|
||||||
function TestLogin(loginInfo:LoginInfo, shared:Shared) {
|
function TestLogin(loginInfo:LoginInfo, shared:Shared) {
|
||||||
return new Promise<LoginResult>(async (resolve, reject) => {
|
return new Promise<LoginResult>(async (resolve, reject) => {
|
||||||
const userDBData:any = await shared.database.query("SELECT * FROM users_info WHERE username = ? LIMIT 1", [loginInfo.username]);
|
const userDBData:UserInfo = await shared.database.query("SELECT * FROM users_info WHERE username = ? LIMIT 1", [loginInfo.username]);
|
||||||
|
|
||||||
// Make sure a user was found in the database
|
// Make sure a user was found in the database
|
||||||
if (userDBData == null) return resolve(LoginResult.INCORRECT);
|
if (userDBData == null) return resolve(LoginResult.INCORRECT);
|
||||||
|
@ -122,7 +123,7 @@ export default async function LoginProcess(req:IncomingMessage, res:ServerRespon
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get information about the user from the database
|
// Get information about the user from the database
|
||||||
const userDB = await shared.database.query("SELECT id FROM users_info WHERE username = ? LIMIT 1", [loginInfo.username]);
|
const userId:number = (await shared.database.query("SELECT id FROM users_info WHERE username = ? LIMIT 1", [loginInfo.username])).id;
|
||||||
|
|
||||||
// Create a token for the client
|
// Create a token for the client
|
||||||
const newClientToken:string = await generateSession();
|
const newClientToken:string = await generateSession();
|
||||||
|
@ -135,7 +136,7 @@ export default async function LoginProcess(req:IncomingMessage, res:ServerRespon
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retreive the newly created user
|
// Retreive the newly created user
|
||||||
newUser = shared.users.add(newClientToken, new User(userDB.id, loginInfo.username, newClientToken, shared));
|
newUser = shared.users.add(newClientToken, new User(userId, loginInfo.username, newClientToken, shared));
|
||||||
// Set tourney client flag
|
// Set tourney client flag
|
||||||
newUser.isTourneyUser = isTourneyClient;
|
newUser.isTourneyUser = isTourneyClient;
|
||||||
newUser.location = userLocation;
|
newUser.location = userLocation;
|
||||||
|
@ -203,7 +204,7 @@ export default async function LoginProcess(req:IncomingMessage, res:ServerRespon
|
||||||
const writerBuffer:Buffer = osuPacketWriter.toBuffer;
|
const writerBuffer:Buffer = osuPacketWriter.toBuffer;
|
||||||
if (newUser === undefined) {
|
if (newUser === undefined) {
|
||||||
res.writeHead(200, {
|
res.writeHead(200, {
|
||||||
"cho-token": "no",
|
"cho-token": "no", // NOTE: You have to specify a token even if it's an incorrect login for some reason.
|
||||||
"Connection": "keep-alive",
|
"Connection": "keep-alive",
|
||||||
"Keep-Alive": "timeout=5, max=100"
|
"Keep-Alive": "timeout=5, max=100"
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,6 +14,6 @@ export default class BaseCommand implements ICommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
public exec(channel:Channel, sender:User, args:Array<string>) {
|
public exec(channel:Channel, sender:User, args:Array<string>) {
|
||||||
|
channel.SendBotMessage(`Sorry ${sender.username}! This command has no functionality yet. Args: ["${args.join('", "')}"]`);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,8 +6,7 @@ import BaseCommand from "./BaseCommand";
|
||||||
export default class MultiplayerCommands extends BaseCommand {
|
export default class MultiplayerCommands extends BaseCommand {
|
||||||
public readonly helpText:string = `Multiplayer Subcommands:
|
public readonly helpText:string = `Multiplayer Subcommands:
|
||||||
!mp start - Starts a multiplayer match with a delay (optional)
|
!mp start - Starts a multiplayer match with a delay (optional)
|
||||||
!mp abort - Aborts the currently running round / countdown
|
!mp abort - Aborts the currently running round / countdown`;
|
||||||
!mp obr - Toggles Battle Royale mode`;
|
|
||||||
public readonly helpDescription:string = "Command for use in multiplayer matches.";
|
public readonly helpDescription:string = "Command for use in multiplayer matches.";
|
||||||
public readonly helpArguments:Array<string> = ["subCommand"];
|
public readonly helpArguments:Array<string> = ["subCommand"];
|
||||||
|
|
||||||
|
@ -36,9 +35,6 @@ export default class MultiplayerCommands extends BaseCommand {
|
||||||
|
|
||||||
case "abort":
|
case "abort":
|
||||||
return mpAbort(channel, sender.match);
|
return mpAbort(channel, sender.match);
|
||||||
|
|
||||||
case "obr":
|
|
||||||
return mpOBR(channel, sender.match);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,8 +85,4 @@ function mpAbort(channel:Channel, match:Match) {
|
||||||
match.finishMatch();
|
match.finishMatch();
|
||||||
channel.SendBotMessage("Aborted current round");
|
channel.SendBotMessage("Aborted current round");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function mpOBR(channel:Channel, match:Match) {
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
import MatchData from "./MatchData"
|
import MatchData from "./MatchData"
|
||||||
|
import MatchScoreData from "./MatchScoreData"
|
||||||
import MessageData from "./MessageData"
|
import MessageData from "./MessageData"
|
||||||
|
import StatusUpdateData from "./StatusUpdateData"
|
||||||
|
|
||||||
export default interface OsuPacketWriter {
|
export default interface OsuPacketWriter {
|
||||||
// Functions
|
// Functions
|
||||||
|
@ -9,7 +11,7 @@ export default interface OsuPacketWriter {
|
||||||
Ping() : OsuPacketWriter,
|
Ping() : OsuPacketWriter,
|
||||||
HandleIrcChangeUsername(data:any) : OsuPacketWriter,
|
HandleIrcChangeUsername(data:any) : OsuPacketWriter,
|
||||||
HandleIrcQuit() : OsuPacketWriter,
|
HandleIrcQuit() : OsuPacketWriter,
|
||||||
HandleOsuUpdate(data:any) : OsuPacketWriter,
|
HandleOsuUpdate(data:StatusUpdateData) : OsuPacketWriter,
|
||||||
HandleUserQuit(data:any) : OsuPacketWriter,
|
HandleUserQuit(data:any) : OsuPacketWriter,
|
||||||
SpectatorJoined(data:any) : OsuPacketWriter,
|
SpectatorJoined(data:any) : OsuPacketWriter,
|
||||||
SpectatorLeft(data:any) : OsuPacketWriter,
|
SpectatorLeft(data:any) : OsuPacketWriter,
|
||||||
|
@ -19,14 +21,14 @@ export default interface OsuPacketWriter {
|
||||||
GetAttention() : OsuPacketWriter,
|
GetAttention() : OsuPacketWriter,
|
||||||
Announce(data:string) : OsuPacketWriter,
|
Announce(data:string) : OsuPacketWriter,
|
||||||
MatchUpdate(data:MatchData) : OsuPacketWriter,
|
MatchUpdate(data:MatchData) : OsuPacketWriter,
|
||||||
MatchNew(data:any) : OsuPacketWriter,
|
MatchNew(data:MatchData) : OsuPacketWriter,
|
||||||
MatchDisband(data:any) : OsuPacketWriter,
|
MatchDisband(data:any) : OsuPacketWriter,
|
||||||
MatchJoinSuccess(data:any) : OsuPacketWriter,
|
MatchJoinSuccess(data:MatchData) : OsuPacketWriter,
|
||||||
MatchJoinFail() : OsuPacketWriter,
|
MatchJoinFail() : OsuPacketWriter,
|
||||||
FellowSpectatorJoined(data:any) : OsuPacketWriter,
|
FellowSpectatorJoined(data:number) : OsuPacketWriter,
|
||||||
FellowSpectatorLeft(data:any) : OsuPacketWriter,
|
FellowSpectatorLeft(data:number) : OsuPacketWriter,
|
||||||
MatchStart(data:any) : OsuPacketWriter,
|
MatchStart(data:MatchData) : OsuPacketWriter,
|
||||||
MatchScoreUpdate(data:any) : OsuPacketWriter,
|
MatchScoreUpdate(data:MatchScoreData) : OsuPacketWriter,
|
||||||
MatchTransferHost(data:any) : OsuPacketWriter,
|
MatchTransferHost(data:any) : OsuPacketWriter,
|
||||||
MatchAllPlayersLoaded() : OsuPacketWriter,
|
MatchAllPlayersLoaded() : OsuPacketWriter,
|
||||||
MatchPlayerFailed(data:any) : OsuPacketWriter,
|
MatchPlayerFailed(data:any) : OsuPacketWriter,
|
||||||
|
@ -43,9 +45,9 @@ export default interface OsuPacketWriter {
|
||||||
ProtocolNegotiation(data:number) : OsuPacketWriter,
|
ProtocolNegotiation(data:number) : OsuPacketWriter,
|
||||||
TitleUpdate(data:string) : OsuPacketWriter,
|
TitleUpdate(data:string) : OsuPacketWriter,
|
||||||
Monitor() : OsuPacketWriter,
|
Monitor() : OsuPacketWriter,
|
||||||
MatchPlayerSkipped(data:any) : OsuPacketWriter,
|
MatchPlayerSkipped(data:number) : OsuPacketWriter,
|
||||||
UserPresence(data:any) : OsuPacketWriter,
|
UserPresence(data:any) : OsuPacketWriter,
|
||||||
Restart(data:any) : OsuPacketWriter,
|
Restart(data:number) : OsuPacketWriter,
|
||||||
Invite(data:any) : OsuPacketWriter,
|
Invite(data:any) : OsuPacketWriter,
|
||||||
ChannelListingComplete() : OsuPacketWriter,
|
ChannelListingComplete() : OsuPacketWriter,
|
||||||
MatchChangePassword(data:any) : OsuPacketWriter,
|
MatchChangePassword(data:any) : OsuPacketWriter,
|
||||||
|
@ -58,7 +60,7 @@ export default interface OsuPacketWriter {
|
||||||
VersionUpdateForced() : OsuPacketWriter,
|
VersionUpdateForced() : OsuPacketWriter,
|
||||||
SwitchServer(data:any) : OsuPacketWriter,
|
SwitchServer(data:any) : OsuPacketWriter,
|
||||||
AccountRestricted() : OsuPacketWriter,
|
AccountRestricted() : OsuPacketWriter,
|
||||||
RTX(data:any) : OsuPacketWriter,
|
RTX(data:string) : OsuPacketWriter,
|
||||||
SwitchTourneyServer(data:any) : OsuPacketWriter
|
SwitchTourneyServer(data:any) : OsuPacketWriter
|
||||||
|
|
||||||
toBuffer : Buffer
|
toBuffer : Buffer
|
||||||
|
|
8
server/interfaces/PresenceData.ts
Normal file
8
server/interfaces/PresenceData.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
export default interface PresenceData {
|
||||||
|
status: number,
|
||||||
|
statusText: string,
|
||||||
|
beatmapId: number,
|
||||||
|
beatmapChecksum: string,
|
||||||
|
currentMods: number,
|
||||||
|
playMode: number,
|
||||||
|
}
|
15
server/interfaces/StatusUpdateData.ts
Normal file
15
server/interfaces/StatusUpdateData.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
export default interface StatusUpdateData {
|
||||||
|
userId: number,
|
||||||
|
status: number,
|
||||||
|
statusText: string,
|
||||||
|
beatmapChecksum: string,
|
||||||
|
currentMods: number,
|
||||||
|
playMode: number,
|
||||||
|
beatmapId: number,
|
||||||
|
rankedScore: number,
|
||||||
|
accuracy: number,
|
||||||
|
playCount: number,
|
||||||
|
totalScore: number,
|
||||||
|
rank: number,
|
||||||
|
performance: number
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
export default class FunkyArray<T> {
|
export default class FunkyArray<T> {
|
||||||
private items:any = {};
|
private items:{ [id: string]: T } = {};
|
||||||
private itemKeys:Array<string> = Object.keys(this.items);
|
private itemKeys:Array<string> = Object.keys(this.items);
|
||||||
private iterableArray:Array<T> = new Array<T>();
|
private iterableArray:Array<T> = new Array<T>();
|
||||||
|
|
||||||
|
|
|
@ -397,11 +397,16 @@ export default class Match {
|
||||||
allSkipped = false;
|
allSkipped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const slotId = user.matchSlot?.slotId ?? Number.MIN_VALUE;
|
||||||
|
if (slotId === Number.MIN_VALUE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// All players have finished playing, finish the match
|
// All players have finished playing, finish the match
|
||||||
if (allSkipped) {
|
if (allSkipped) {
|
||||||
const osuPacketWriter = osu.Bancho.Writer();
|
const osuPacketWriter = osu.Bancho.Writer();
|
||||||
|
|
||||||
osuPacketWriter.MatchPlayerSkipped(user.id);
|
osuPacketWriter.MatchPlayerSkipped(slotId);
|
||||||
osuPacketWriter.MatchSkip();
|
osuPacketWriter.MatchSkip();
|
||||||
|
|
||||||
this.matchStream.Send(osuPacketWriter.toBuffer);
|
this.matchStream.Send(osuPacketWriter.toBuffer);
|
||||||
|
@ -410,7 +415,7 @@ export default class Match {
|
||||||
} else {
|
} else {
|
||||||
const osuPacketWriter = osu.Bancho.Writer();
|
const osuPacketWriter = osu.Bancho.Writer();
|
||||||
|
|
||||||
osuPacketWriter.MatchPlayerSkipped(user.id);
|
osuPacketWriter.MatchPlayerSkipped(slotId);
|
||||||
|
|
||||||
this.matchStream.Send(osuPacketWriter.toBuffer);
|
this.matchStream.Send(osuPacketWriter.toBuffer);
|
||||||
}
|
}
|
||||||
|
@ -593,7 +598,7 @@ export default class Match {
|
||||||
|
|
||||||
const osuPacketWriter = osu.Bancho.Writer();
|
const osuPacketWriter = osu.Bancho.Writer();
|
||||||
|
|
||||||
let queryData:Array<any> = [
|
const queryData:Array<string | number | null> = [
|
||||||
this.matchId,
|
this.matchId,
|
||||||
this.roundId++,
|
this.roundId++,
|
||||||
this.playMode,
|
this.playMode,
|
||||||
|
|
|
@ -6,6 +6,7 @@ import StatusUpdate from "../packets/StatusUpdate";
|
||||||
import Shared from "../objects/Shared";
|
import Shared from "../objects/Shared";
|
||||||
import Slot from "./Slot";
|
import Slot from "./Slot";
|
||||||
import Channel from "./Channel";
|
import Channel from "./Channel";
|
||||||
|
import PresenceData from "../interfaces/PresenceData";
|
||||||
|
|
||||||
const rankingModes = [
|
const rankingModes = [
|
||||||
"pp_raw",
|
"pp_raw",
|
||||||
|
@ -14,8 +15,6 @@ const rankingModes = [
|
||||||
];
|
];
|
||||||
|
|
||||||
export default class User {
|
export default class User {
|
||||||
private static readonly EMPTY_BUFFER = Buffer.alloc(0);
|
|
||||||
|
|
||||||
public shared:Shared;
|
public shared:Shared;
|
||||||
|
|
||||||
public id:number;
|
public id:number;
|
||||||
|
@ -23,7 +22,7 @@ export default class User {
|
||||||
public uuid:string;
|
public uuid:string;
|
||||||
public readonly connectTime:number = Date.now();
|
public readonly connectTime:number = Date.now();
|
||||||
public timeoutTime:number = Date.now() + 30000;
|
public timeoutTime:number = Date.now() + 30000;
|
||||||
public queue:Buffer = User.EMPTY_BUFFER;
|
public queue:Buffer = Buffer.allocUnsafe(0);
|
||||||
|
|
||||||
// Binato data
|
// Binato data
|
||||||
public rankingMode:RankingModes = RankingModes.PP;
|
public rankingMode:RankingModes = RankingModes.PP;
|
||||||
|
@ -80,11 +79,11 @@ export default class User {
|
||||||
}
|
}
|
||||||
|
|
||||||
clearQueue() {
|
clearQueue() {
|
||||||
this.queue = User.EMPTY_BUFFER;
|
this.queue = Buffer.allocUnsafe(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updates the user's current action
|
// Updates the user's current action
|
||||||
updatePresence(action:any) {
|
updatePresence(action:PresenceData) {
|
||||||
this.actionID = action.status;
|
this.actionID = action.status;
|
||||||
this.actionText = action.statusText;
|
this.actionText = action.statusText;
|
||||||
this.beatmapChecksum = action.beatmapChecksum;
|
this.beatmapChecksum = action.beatmapChecksum;
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
|
import PresenceData from "../interfaces/PresenceData";
|
||||||
import User from "../objects/User";
|
import User from "../objects/User";
|
||||||
import StatusUpdate from "./StatusUpdate";
|
import StatusUpdate from "./StatusUpdate";
|
||||||
|
|
||||||
export default function ChangeAction(user:User, data:any) {
|
export default function ChangeAction(user:User, data:PresenceData) {
|
||||||
user.updatePresence(data);
|
user.updatePresence(data);
|
||||||
|
|
||||||
if (user.spectatorStream != null) {
|
if (user.spectatorStream != null) {
|
||||||
|
|
Loading…
Reference in a new issue