models and doc update
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
ycc
2024-05-22 10:06:00 +02:00
parent 2e2ebad364
commit d657e64ae4
25 changed files with 3675 additions and 427 deletions

View File

@ -22,6 +22,7 @@ type Identity struct {
OwnerPublicKey string `json:"owner_public_key,omitempty"`
ArchiveClients []string `json:"archive_clients,omitempty"`
KnownServers []meowlib.ServerCard `json:"known_servers,omitempty"`
VideoServer VideoServer `json:"video_server,omitempty"`
}
func CreateIdentity(ServerName string, ServerDesc string) *Identity {

View File

@ -65,6 +65,13 @@ func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) (*meowlib.FromServerMe
}
}
}
// initiate video
if msg.VideoData != nil {
from_server, err = r.handleVideo(msg)
if err != nil {
return nil, err
}
}
// manage Matriochka
if msg.MatriochkaMessage != nil {
from_server, err = r.handleMatriochka(msg)
@ -275,6 +282,22 @@ func (r *RedisRouter) handleInvitation(msg *meowlib.ToServerMessage) (*meowlib.F
return &from_server, nil
}
func (r *RedisRouter) handleVideo(msg *meowlib.ToServerMessage) (*meowlib.FromServerMessage, error) {
var from_server meowlib.FromServerMessage
// update messages counter
err := r.Client.Incr("statistics:messages:video").Err()
if err != nil {
return nil, err
}
videoData, err := r.ServerIdentity.VideoServer.UpdateVideoData(msg.VideoData)
if err != nil {
return nil, err
}
from_server.VideoData = videoData
from_server.UuidAck = msg.Uuid
return &from_server, nil
}
func (r *RedisRouter) handleMatriochka(msg *meowlib.ToServerMessage) (*meowlib.FromServerMessage, error) {
var from_server meowlib.FromServerMessage
// update messages counter

41
server/videoserver.go Normal file
View File

@ -0,0 +1,41 @@
package server
import (
"time"
"forge.redroom.link/yves/meowlib"
"github.com/livekit/protocol/auth"
)
type VideoServer struct {
Url string `json:"url,omitempty"`
ApiKey string `json:"api_key,omitempty"`
ApiSecret string `json:"secret,omitempty"`
}
func (s *VideoServer) GetJoinToken(room, username string, validity time.Duration) (string, error) {
at := auth.NewAccessToken(s.ApiKey, s.ApiSecret)
grant := &auth.VideoGrant{
RoomJoin: true,
Room: room,
}
at.AddGrant(grant).
SetIdentity(username).
SetValidFor(validity)
return at.ToJWT()
}
func (s *VideoServer) UpdateVideoData(vd *meowlib.VideoData) (*meowlib.VideoData, error) {
vd.Url = s.Url
vd.Credentials = []*meowlib.VideoCredential{}
for idx := range len(vd.Credentials) {
token, err := s.GetJoinToken(vd.Room, vd.Credentials[idx].Username, time.Duration(vd.Duration*uint64(time.Second)))
if err != nil {
return nil, err
}
vd.Credentials[idx].Token = token
vd.Credentials[idx].SharedKey = s.ApiKey
}
return vd, nil
}