This repository has been archived on 2026-03-19. You can view files and clone it, but cannot push or open issues or pull requests.
Files
galvanic-corrosion/src/db.ts
zombieb 3b6d905180 Still figuring out initial matchmaking hang (FROSTBITE). Lots of other changes.
- Added missing room images
- Removed internal rooms and disallow cloning some rooms
- License fixes
- Switched target to 20200306
- Socket header fixes
- Sockets are closed upon shutdown
    * Sockets persist after being destroyed, fix
- Config changes for 20200306
- Settings initialized
- Name generation words cannot be longer than 9 characters
- Dorm generation changes and fixes
- Added some settings keys
- Matchmaking additions
    * Instances are not yet updated to be or not to be in-progress
- Instance fixes and logging
- Image operation fixes
- DisplayName route start
- Challenge route start
- Default Amplitude key (i can see althe Amplitude requests are ignored
- Rate limiting ease
- GameConfigs properly queried and sent
- Many 'bulk' endpoints were added in or around 20200306
- Objective routes started
- DormRoom redirection in v2/name
- Client doesn't care if it gets 200 when setting prefs
- Balance/storefronts started
- Matchmaking goto/room timer and fixes
- Selfhosted Photon addition on the client sends matchmaking /photonregionpings, ignore since Photon is only one server in one region
2025-04-13 01:06:23 -04:00

126 lines
3.6 KiB
TypeScript

/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
import { Redis } from "ioredis";
import * as Config from "./config.ts";
import Logging from "@proxnet/undead-logging";
import chalk from "npm:chalk@^5.3.0";
const log = new Logging("Redis");
const config = Config.getConfig();
if (typeof config == "undefined") {
log.e(`Cannot start: Redis configuration failed`);
Deno.exit(1);
}
let shuttingDown = false;
Deno.addSignalListener("SIGINT", () => {
if (shuttingDown) return;
shuttingDown = true;
log.n("Disconnecting from Redis");
Database.quit();
});
export const Database = new Redis({
port: config.redis.port,
host: config.redis.host,
username: config.redis.username == "" ? undefined : config.redis.username,
password: config.redis.password == "" ? undefined : config.redis.password,
db: config.redis.db,
lazyConnect: true,
});
Database.on("connect", async () => {
log.i(`Connected to Redis`);
if (Deno.args.includes("--db-flush")) {
await Database.flushall(() => {
log.w(`${chalk.inverse("The database was flushed.")}`);
});
}
});
Database.on("connecting", () => {
log.n("Connecting to Redis..");
});
Database.on("error", (err) => {
log.e(`Redis error: ${err.stack}`);
});
export function buildKey(...args: string[]) {
return args.join(":");
}
export const KeyGroups = {
Config: {
Root: "config",
Dynamic: "dynamic",
Game: "game",
},
Content: {
Root: "content",
Images: "images",
Rooms: "rooms",
},
Profile_Usernames: "profile-usernames",
PlatformAssociations: "platforms",
AddressBans: "address-bans",
Profiles: {
Root: "profiles",
Username: "username",
ProfileImage: "profileImage",
Junior: "isJunior",
Platforms: "platforms",
DisplayName: "displayName",
Settings: "settings",
DeviceClass: "deviceClass",
Xp: "xp",
Bio: "bio",
Rooms: "rooms",
Relationships: {
Root: "relationships",
IncomingFriendRequests: "incomingFriendRequests",
OutgoingFriendRequests: "outgoingFriendRequests",
Friends: "friends",
Ignoring: "ignore",
Muted: "muted",
Favorites: "favorites"
},
Avatar: {
Root: "avatar",
Outfit: "outfit",
Hair: "hair",
Skin: "skin",
Face: "face"
}
},
Room_Names: "room-names",
Rooms: {
Root: "room",
PlayerDorms: "player-dormids"
},
Operators: "operators",
Users: {
Root: "users",
Profiles: "profiles",
Pubkey: "pubkey",
Nonces: "nonces",
AssociatedPlatforms: "associatedPlatforms",
AssociatedDeviceIds: "associatedDeviceIds",
AssociatedIps: "associatedIps",
},
};
export * as Redis from "./db.ts";