Commit 813d89b6 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Move disk writer to its own package.

parent c6087233
package main package disk
import ( import (
"errors" "errors"
...@@ -19,7 +19,9 @@ import ( ...@@ -19,7 +19,9 @@ import (
"sfu/group" "sfu/group"
) )
type diskClient struct { var Directory string
type Client struct {
group *group.Group group *group.Group
id string id string
...@@ -42,31 +44,31 @@ func newId() string { ...@@ -42,31 +44,31 @@ func newId() string {
return s return s
} }
func NewDiskClient(g *group.Group) *diskClient { func New(g *group.Group) *Client {
return &diskClient{group: g, id: newId()} return &Client{group: g, id: newId()}
} }
func (client *diskClient) Group() *group.Group { func (client *Client) Group() *group.Group {
return client.group return client.group
} }
func (client *diskClient) Id() string { func (client *Client) Id() string {
return client.id return client.id
} }
func (client *diskClient) Credentials() group.ClientCredentials { func (client *Client) Credentials() group.ClientCredentials {
return group.ClientCredentials{"RECORDING", ""} return group.ClientCredentials{"RECORDING", ""}
} }
func (client *diskClient) SetPermissions(perms group.ClientPermissions) { func (client *Client) SetPermissions(perms group.ClientPermissions) {
return return
} }
func (client *diskClient) PushClient(id, username string, add bool) error { func (client *Client) PushClient(id, username string, add bool) error {
return nil return nil
} }
func (client *diskClient) Close() error { func (client *Client) Close() error {
client.mu.Lock() client.mu.Lock()
defer client.mu.Unlock() defer client.mu.Unlock()
...@@ -78,13 +80,13 @@ func (client *diskClient) Close() error { ...@@ -78,13 +80,13 @@ func (client *diskClient) Close() error {
return nil return nil
} }
func (client *diskClient) kick(message string) error { func (client *Client) kick(message string) error {
err := client.Close() err := client.Close()
group.DelClient(client) group.DelClient(client)
return err return err
} }
func (client *diskClient) PushConn(id string, up conn.Up, tracks []conn.UpTrack, label string) error { func (client *Client) PushConn(id string, up conn.Up, tracks []conn.UpTrack, label string) error {
client.mu.Lock() client.mu.Lock()
defer client.mu.Unlock() defer client.mu.Unlock()
...@@ -102,7 +104,7 @@ func (client *diskClient) PushConn(id string, up conn.Up, tracks []conn.UpTrack, ...@@ -102,7 +104,7 @@ func (client *diskClient) PushConn(id string, up conn.Up, tracks []conn.UpTrack,
return nil return nil
} }
directory := filepath.Join(recordingsDir, client.group.Name()) directory := filepath.Join(Directory, client.group.Name())
err := os.MkdirAll(directory, 0700) err := os.MkdirAll(directory, 0700)
if err != nil { if err != nil {
return err return err
......
...@@ -15,13 +15,13 @@ import ( ...@@ -15,13 +15,13 @@ import (
"runtime/pprof" "runtime/pprof"
"syscall" "syscall"
"sfu/disk"
"sfu/group" "sfu/group"
) )
var httpAddr string var httpAddr string
var staticRoot string var staticRoot string
var dataDir string var dataDir string
var recordingsDir string
func main() { func main() {
var cpuprofile, memprofile, mutexprofile string var cpuprofile, memprofile, mutexprofile string
...@@ -33,7 +33,7 @@ func main() { ...@@ -33,7 +33,7 @@ func main() {
"data `directory`") "data `directory`")
flag.StringVar(&group.Directory, "groups", "./groups/", flag.StringVar(&group.Directory, "groups", "./groups/",
"group description `directory`") "group description `directory`")
flag.StringVar(&recordingsDir, "recordings", "./recordings/", flag.StringVar(&disk.Directory, "recordings", "./recordings/",
"recordings `directory`") "recordings `directory`")
flag.StringVar(&cpuprofile, "cpuprofile", "", flag.StringVar(&cpuprofile, "cpuprofile", "",
"store CPU profile in `file`") "store CPU profile in `file`")
......
...@@ -18,6 +18,7 @@ import ( ...@@ -18,6 +18,7 @@ import (
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
"sfu/conn" "sfu/conn"
"sfu/disk"
"sfu/estimator" "sfu/estimator"
"sfu/group" "sfu/group"
) )
...@@ -1037,12 +1038,12 @@ func handleClientMessage(c *webClient, m clientMessage) error { ...@@ -1037,12 +1038,12 @@ func handleClientMessage(c *webClient, m clientMessage) error {
return c.error(group.UserError("not authorised")) return c.error(group.UserError("not authorised"))
} }
for _, cc := range c.group.GetClients(c) { for _, cc := range c.group.GetClients(c) {
_, ok := cc.(*diskClient) _, ok := cc.(*disk.Client)
if ok { if ok {
return c.error(group.UserError("already recording")) return c.error(group.UserError("already recording"))
} }
} }
disk := NewDiskClient(c.group) disk := disk.New(c.group)
_, err := group.AddClient(c.group.Name(), disk) _, err := group.AddClient(c.group.Name(), disk)
if err != nil { if err != nil {
disk.Close() disk.Close()
...@@ -1054,7 +1055,7 @@ func handleClientMessage(c *webClient, m clientMessage) error { ...@@ -1054,7 +1055,7 @@ func handleClientMessage(c *webClient, m clientMessage) error {
return c.error(group.UserError("not authorised")) return c.error(group.UserError("not authorised"))
} }
for _, cc := range c.group.GetClients(c) { for _, cc := range c.group.GetClients(c) {
disk, ok := cc.(*diskClient) disk, ok := cc.(*disk.Client)
if ok { if ok {
disk.Close() disk.Close()
group.DelClient(disk) group.DelClient(disk)
......
...@@ -19,6 +19,7 @@ import ( ...@@ -19,6 +19,7 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"sfu/disk"
"sfu/group" "sfu/group"
) )
...@@ -324,7 +325,7 @@ func recordingsHandler(w http.ResponseWriter, r *http.Request) { ...@@ -324,7 +325,7 @@ func recordingsHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
f, err := os.Open(filepath.Join(recordingsDir, pth)) f, err := os.Open(filepath.Join(disk.Directory, pth))
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
notFound(w) notFound(w)
...@@ -391,7 +392,7 @@ func handleGroupAction(w http.ResponseWriter, r *http.Request, group string) { ...@@ -391,7 +392,7 @@ func handleGroupAction(w http.ResponseWriter, r *http.Request, group string) {
return return
} }
err := os.Remove( err := os.Remove(
filepath.Join(recordingsDir, group+"/"+filename), filepath.Join(disk.Directory, group+"/"+filename),
) )
if err != nil { if err != nil {
if os.IsPermission(err) { if os.IsPermission(err) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment