работаем бля работаем
This commit is contained in:
@@ -52,11 +52,39 @@
|
||||
|
||||
<PrimeScrollPanel class="bg-surface-900 rounded-xl overflow-hidden" style="min-height: 0">
|
||||
<div v-auto-animate class="p-3 space-y-1">
|
||||
<ClientRow v-for="client of clients" :key="client.userId" :client="client" />
|
||||
<template v-for="channel in channels" :key="channel.id">
|
||||
<PrimeDivider>
|
||||
<PrimeButton size="small" variant="text" @click="joinChannel(channel)">
|
||||
{{ channel.name }}
|
||||
</PrimeButton>
|
||||
</PrimeDivider>
|
||||
<ClientRow v-for="client in clients.filter(_client => _client.channelId === channel.id)" :key="client.socketId" :client="client">
|
||||
{{ client.userId }}
|
||||
</ClientRow>
|
||||
</template>
|
||||
<!-- <ClientRow v-for="client of clients" :key="client.userId" :client="client" /> -->
|
||||
</div>
|
||||
</PrimeScrollPanel>
|
||||
|
||||
<div class="bg-surface-900 rounded-xl overflow-hidden p-3 flex flex-col min-h-full">
|
||||
<dl>
|
||||
<dt>Socket ID</dt>
|
||||
<dd>{{ socket?.id }}</dd>
|
||||
|
||||
<br>
|
||||
<dt>Producers</dt>
|
||||
<dd v-for="producer in producersArray" :key="producer.id">
|
||||
{{ producer.id }}
|
||||
{{ producer.appData }}
|
||||
</dd>
|
||||
|
||||
<br>
|
||||
<dl>Consumers</dl>
|
||||
<dd v-for="consumer in consumersArray" :key="consumer.id">
|
||||
{{ consumer.id }}
|
||||
{{ consumer.appData }}
|
||||
</dd>
|
||||
</dl>
|
||||
<slot />
|
||||
</div>
|
||||
</div>
|
||||
@@ -65,6 +93,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import chadApi from '#shared/chad-api'
|
||||
import {
|
||||
Camera,
|
||||
CameraOff,
|
||||
@@ -80,6 +109,13 @@ import {
|
||||
VolumeOff,
|
||||
} from 'lucide-vue-next'
|
||||
|
||||
const channels = shallowRef<any[]>([])
|
||||
|
||||
;(async () => {
|
||||
channels.value = await chadApi<any[]>('/channels', { method: 'GET' })
|
||||
})()
|
||||
|
||||
const { me } = useClients()
|
||||
const {
|
||||
version,
|
||||
clients,
|
||||
@@ -93,7 +129,8 @@ const {
|
||||
toggleVideo,
|
||||
toggleShare,
|
||||
} = useApp()
|
||||
const { connect, connected } = useSignaling()
|
||||
const { connect, connected, socket } = useSignaling()
|
||||
const { consumersArray, producersArray } = useMediasoup()
|
||||
|
||||
interface Tab {
|
||||
id: string
|
||||
@@ -150,4 +187,30 @@ watch(activeTab, (activeTab) => {
|
||||
})
|
||||
|
||||
connect()
|
||||
|
||||
async function joinChannel(channel) {
|
||||
socket.value?.emit('join-channel', { channelId: channel.id })
|
||||
}
|
||||
|
||||
watch(socket, (socket) => {
|
||||
if (!socket)
|
||||
return
|
||||
|
||||
socket.on('channel-removed', (channelId) => {
|
||||
const idx = channels.value.findIndex(channel => channel.id === channelId)
|
||||
|
||||
if (idx === -1)
|
||||
return
|
||||
|
||||
channels.value.splice(idx, 1)
|
||||
|
||||
triggerRef(channels)
|
||||
})
|
||||
|
||||
socket.on('channel-created', (channel) => {
|
||||
channels.value.push(channel)
|
||||
|
||||
triggerRef(channels)
|
||||
})
|
||||
}, { immediate: true })
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user