mirror of
https://github.com/spacebarchat/server.git
synced 2024-11-10 20:52:42 +01:00
🎨 reformat files
This commit is contained in:
parent
8ff56b1f9e
commit
8092216343
@ -1,9 +1,9 @@
|
||||
import WebSocket from "../util/WebSocket";
|
||||
import { Message } from "./Message";
|
||||
import {Session} from "@fosscord/util";
|
||||
import { Session } from "@fosscord/util";
|
||||
|
||||
export async function Close(this: WebSocket, code: number, reason: string) {
|
||||
await Session.delete({session_id: this.session_id})
|
||||
await Session.delete({ session_id: this.session_id });
|
||||
// @ts-ignore
|
||||
this.off("message", Message);
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import { Send } from "../util/Send";
|
||||
import { CLOSECODES, OPCODES } from "../util/Constants";
|
||||
import { createDeflate } from "zlib";
|
||||
import { URL } from "url";
|
||||
import {Session} from "@fosscord/util";
|
||||
import { Session } from "@fosscord/util";
|
||||
var erlpack: any;
|
||||
try {
|
||||
erlpack = require("erlpack");
|
||||
@ -57,12 +57,12 @@ export async function Connection(this: Server, socket: WebSocket, request: Incom
|
||||
});
|
||||
|
||||
socket.readyTimeout = setTimeout(() => {
|
||||
Session.delete({session_id: socket.session_id}) //should we await?
|
||||
Session.delete({ session_id: socket.session_id }); //should we await?
|
||||
return socket.close(CLOSECODES.Session_timed_out);
|
||||
}, 1000 * 30);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
Session.delete({session_id: socket.session_id}) //should we await?
|
||||
Session.delete({ session_id: socket.session_id }); //should we await?
|
||||
return socket.close(CLOSECODES.Unknown_error);
|
||||
}
|
||||
}
|
||||
|
@ -80,11 +80,12 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
||||
user_id: this.user_id,
|
||||
session_id: session_id,
|
||||
status: "online", //does the session always start as online?
|
||||
client_info: { //TODO read from identity
|
||||
client_info: {
|
||||
//TODO read from identity
|
||||
client: "desktop",
|
||||
os: "linux",
|
||||
version: 0
|
||||
}
|
||||
version: 0,
|
||||
},
|
||||
});
|
||||
|
||||
//We save the session and we delete it when the websocket is closed
|
||||
|
@ -11,16 +11,20 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
||||
check.call(this, VoiceStateUpdateSchema, data.d);
|
||||
const body = data.d as VoiceStateUpdateSchema;
|
||||
|
||||
let voiceState
|
||||
let voiceState;
|
||||
try {
|
||||
voiceState = await VoiceState.findOneOrFail({where:{ user_id: this.user_id },relations: ["member", "member.user", "member.roles"]});
|
||||
if(voiceState.session_id !== this.session_id && body.channel_id === null) { //Should we also check guild_id === null?
|
||||
voiceState = await VoiceState.findOneOrFail({
|
||||
where: { user_id: this.user_id },
|
||||
relations: ["member", "member.user", "member.roles"],
|
||||
});
|
||||
if (voiceState.session_id !== this.session_id && body.channel_id === null) {
|
||||
//Should we also check guild_id === null?
|
||||
//changing deaf or mute on a client that's not the one with the same session of the voicestate in the database should be ignored
|
||||
return
|
||||
return;
|
||||
}
|
||||
|
||||
//The event send by Discord's client on channel leave has both guild_id and channel_id as null
|
||||
if(body.guild_id === null) body.guild_id = voiceState.guild_id;
|
||||
if (body.guild_id === null) body.guild_id = voiceState.guild_id;
|
||||
voiceState.assign(body);
|
||||
} catch (error) {
|
||||
voiceState = new VoiceState({
|
||||
@ -28,32 +32,39 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) {
|
||||
user_id: this.user_id,
|
||||
deaf: false,
|
||||
mute: false,
|
||||
suppress: false
|
||||
})
|
||||
suppress: false,
|
||||
});
|
||||
}
|
||||
|
||||
//If the session changed we generate a new token
|
||||
if(voiceState.session_id !== this.session_id)
|
||||
voiceState.token = genVoiceToken()
|
||||
voiceState.session_id = this.session_id
|
||||
if (voiceState.session_id !== this.session_id) voiceState.token = genVoiceToken();
|
||||
voiceState.session_id = this.session_id;
|
||||
|
||||
//TODO the member should only have these properties: hoisted_role, deaf, joined_at, mute, roles, user
|
||||
//TODO the member.user should only have these properties: avatar, discriminator, id, username
|
||||
const {id, ...newObj} = voiceState;
|
||||
const { id, ...newObj } = voiceState;
|
||||
|
||||
await Promise.all([
|
||||
voiceState.save(),
|
||||
emitEvent({ event: "VOICE_STATE_UPDATE", data: newObj, guild_id: voiceState.guild_id} as VoiceStateUpdateEvent),
|
||||
emitEvent({
|
||||
event: "VOICE_STATE_UPDATE",
|
||||
data: newObj,
|
||||
guild_id: voiceState.guild_id,
|
||||
} as VoiceStateUpdateEvent),
|
||||
]);
|
||||
|
||||
//If it's null it means that we are leaving the channel and this event is not needed
|
||||
if(voiceState.channel_id !== null) {
|
||||
if (voiceState.channel_id !== null) {
|
||||
const regions = Config.get().regions;
|
||||
|
||||
await emitEvent({ event: "VOICE_SERVER_UPDATE", data: {
|
||||
await emitEvent({
|
||||
event: "VOICE_SERVER_UPDATE",
|
||||
data: {
|
||||
token: voiceState.token,
|
||||
guild_id: voiceState.guild_id,
|
||||
endpoint: regions.available[0].endpoint, //TODO return best endpoint or default
|
||||
}, guild_id: voiceState.guild_id } as VoiceServerUpdateEvent)
|
||||
},
|
||||
guild_id: voiceState.guild_id,
|
||||
} as VoiceServerUpdateEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
export function genSessionId() {
|
||||
return genRanHex(32)
|
||||
return genRanHex(32);
|
||||
}
|
||||
|
||||
export function genVoiceToken() {
|
||||
return genRanHex(16)
|
||||
return genRanHex(16);
|
||||
}
|
||||
|
||||
function genRanHex(size: number) {
|
||||
return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join('');
|
||||
}
|
||||
return [...Array(size)].map(() => Math.floor(Math.random() * 16).toString(16)).join("");
|
||||
}
|
||||
|
@ -271,7 +271,16 @@ export const DefaultConfigOptions: ConfigValue = {
|
||||
regions: {
|
||||
default: "fosscord",
|
||||
useDefaultAsOptimal: true,
|
||||
available: [{ id: "fosscord", name: "Fosscord", endpoint: "127.0.0.1:3004", vip: false, custom: false, deprecated: false }],
|
||||
available: [
|
||||
{
|
||||
id: "fosscord",
|
||||
name: "Fosscord",
|
||||
endpoint: "127.0.0.1:3004",
|
||||
vip: false,
|
||||
custom: false,
|
||||
deprecated: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
rabbitmq: {
|
||||
host: null,
|
||||
|
@ -4,30 +4,29 @@ import { Column, Entity, JoinColumn, ManyToOne, RelationId } from "typeorm";
|
||||
|
||||
//TODO we need to remove all sessions on server start because if the server crashes without closing websockets it won't delete them
|
||||
|
||||
|
||||
@Entity("sessions")
|
||||
export class Session extends BaseClass {
|
||||
@Column({ nullable: true })
|
||||
@RelationId((session: Session) => session.user)
|
||||
user_id: string;
|
||||
@Column({ nullable: true })
|
||||
@RelationId((session: Session) => session.user)
|
||||
user_id: string;
|
||||
|
||||
@JoinColumn({ name: "user_id" })
|
||||
@ManyToOne(() => User)
|
||||
user: User;
|
||||
@JoinColumn({ name: "user_id" })
|
||||
@ManyToOne(() => User)
|
||||
user: User;
|
||||
|
||||
//TODO check, should be 32 char long hex string
|
||||
@Column({ nullable: false })
|
||||
session_id: string;
|
||||
//TODO check, should be 32 char long hex string
|
||||
@Column({ nullable: false })
|
||||
session_id: string;
|
||||
|
||||
activities: []; //TODO
|
||||
activities: []; //TODO
|
||||
|
||||
@Column({ type: "simple-json", select: false })
|
||||
client_info: {
|
||||
client: string,
|
||||
os: string,
|
||||
version: number
|
||||
}
|
||||
@Column({ type: "simple-json", select: false })
|
||||
client_info: {
|
||||
client: string;
|
||||
os: string;
|
||||
version: number;
|
||||
};
|
||||
|
||||
@Column({ nullable: false })
|
||||
status: string; //TODO enum
|
||||
@Column({ nullable: false })
|
||||
status: string; //TODO enum
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ import { BaseClass } from "./BaseClass";
|
||||
import { Channel } from "./Channel";
|
||||
import { Guild } from "./Guild";
|
||||
import { User } from "./User";
|
||||
import {Member} from "./Member";
|
||||
import { Member } from "./Member";
|
||||
|
||||
//https://gist.github.com/vassjozsef/e482c65df6ee1facaace8b3c9ff66145#file-voice_state-ex
|
||||
@Entity("voice_states")
|
||||
@ -63,6 +63,6 @@ export class VoiceState extends BaseClass {
|
||||
@Column()
|
||||
suppress: boolean; // whether this user is muted by the current user
|
||||
|
||||
@Column({ nullable: true , default: null})
|
||||
request_to_speak_timestamp?: Date
|
||||
@Column({ nullable: true, default: null })
|
||||
request_to_speak_timestamp?: Date;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user