File size: 1,971 Bytes
d092f57 ae19567 d092f57 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import { PlayerState, RoomState } from "./types"
import { getRandomName, getTargetTime } from "./utils"
import { getDefaultSrc } from "./env"
import { getRoom, setRoom } from "./cache"
export const updateLastSync = (room: RoomState) => {
room.targetState.progress = getTargetTime(
room.targetState.progress,
room.targetState.lastSync,
room.targetState.paused,
room.targetState.playbackRate
)
room.targetState.lastSync = new Date().getTime() / 1000
return room
}
export const createNewUser = async (roomId: string, socketId: string) => {
const room = await getRoom(roomId)
if (room === null) {
throw new Error("Creating user for non existing room:" + roomId)
}
const users = room.users
let name = getRandomName()
while (users.some((user) => user.name === name)) {
name = getRandomName()
}
room.users.push({
avatar: "",
name,
player: {
playing: {
src: [],
sub: [],
},
paused: false,
progress: 0,
playbackRate: 1,
loop: false,
volume: 1,
muted: true,
fullscreen: false,
duration: 0,
error: null,
} as unknown as PlayerState,
socketIds: [socketId],
uid: socketId,
})
await setRoom(roomId, room)
}
export const createNewRoom = async (roomId: string, socketId: string) => {
await setRoom(roomId, {
serverTime: 0,
commandHistory: [],
id: roomId,
ownerId: socketId,
targetState: {
playlist: {
items: [
{
src: [{ src: getDefaultSrc(), resolution: "" }],
sub: [],
},
],
currentIndex: 0,
},
playing: {
src: [{ src: getDefaultSrc(), resolution: "" }],
sub: [],
},
paused: false,
progress: 0,
playbackRate: 1,
loop: false,
lastSync: new Date().getTime() / 1000,
},
users: [],
// Initialize chat log for in-room chat feature
chatLog: [],
})
}
|