diff --git a/controllers/transmissionController.go b/controllers/transmissionController.go index 8e16425..93a2240 100644 --- a/controllers/transmissionController.go +++ b/controllers/transmissionController.go @@ -6,10 +6,12 @@ import ( "github.com/gofiber/fiber/v2" ) +// Returns all current transmissions func GetTransmissions(c *fiber.Ctx) error { return c.JSON(globals.Transmissions) } +// Returns a specific transmission by channel func GetTransmissionByChannel(c *fiber.Ctx) error { channel := c.Params("channel") if channel == "" { @@ -24,28 +26,52 @@ func GetTransmissionByChannel(c *fiber.Ctx) error { return c.JSON(transmission) } -// func GetGroups(c *fiber.Ctx) error { -// var groups []models.SystemGroup +func WatchersCount(c *fiber.Ctx) error { + channel := c.Params("channel") + if channel == "" { + return fiber.ErrBadRequest + } -// globals.DB.Find(&groups) + if transmission, exists := globals.Transmissions[channel]; exists { + return c.JSON(transmission.Watchers) + } -// return c.JSON(groups) -// } + return fiber.ErrNotFound +} -// func CreateUser(c *fiber.Ctx) error { -// var body map[string]interface{} +// Called when a user starts to watch a transmission +func Watch(c *fiber.Ctx) error { -// if err := c.BodyParser(&body); err != nil { -// return fiber.ErrBadRequest -// } + channel := c.Params("channel") -// email := body["email"].(string) + if channel == "" { + return fiber.ErrBadRequest + } -// user := services.GetUserByEmail(email) + if transmission, exists := globals.Transmissions[channel]; exists { + transmission.Watchers = transmission.Watchers + 1 + return c.JSON(transmission.Watchers) + } -// if user.ID == 0 { -// fmt.Println("inexistent user") -// } + return fiber.ErrNotFound +} -// return c.JSON(user) -// } +// Called when a user stops watching a transmission +func Leave(c *fiber.Ctx) error { + + channel := c.Params("channel") + + if channel == "" { + return fiber.ErrBadRequest + } + + if transmission, exists := globals.Transmissions[channel]; exists { + transmission.Watchers = transmission.Watchers - 1 + if transmission.Watchers < 0 { + transmission.Watchers = 0 + } + return c.JSON(transmission.Watchers) + } + + return fiber.ErrNotFound +} diff --git a/controllers/webhookController.go b/controllers/webhookController.go index af207b9..400d8d4 100644 --- a/controllers/webhookController.go +++ b/controllers/webhookController.go @@ -90,7 +90,7 @@ func OnPubStart(c *fiber.Ctx) error { // Check if the channel has authorized time to transmit if ok { // If the channel is authorized, add it to the global transmissions list - globals.Transmissions[p.StreamName] = currentTransmission + globals.Transmissions[p.StreamName] = ¤tTransmission return c.SendString("On_Pub_Start: " + string(c.Body())) } @@ -125,6 +125,10 @@ func OnPubStop(c *fiber.Ctx) error { // TODO: Updates the transmission on database for future calculation of remaining daily time + if int(minutes) == 0 { + minutes = 1 + } + msg := fmt.Sprintf("Transmissão encerrada. Duração %d minutos.\n", int(minutes)) services.AddTransmissionlog(p.StreamName, msg) diff --git a/globals/globals.go b/globals/globals.go index 29687ef..349a52f 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -12,5 +12,5 @@ var ( DB *gorm.DB - Transmissions map[string]models.CurrentTransmission + Transmissions map[string]*models.CurrentTransmission ) diff --git a/main.go b/main.go index 7a5ceae..b5c000b 100644 --- a/main.go +++ b/main.go @@ -98,7 +98,7 @@ func main() { routes.Setup(app) // Starts transmissions processing - globals.Transmissions = make(map[string]models.CurrentTransmission, 100) + globals.Transmissions = make(map[string]*models.CurrentTransmission, 100) log.Println("Starting transmissions limits verification process") ticker := time.NewTicker(1 * time.Minute) diff --git a/routes/routes.go b/routes/routes.go index f4b70c3..8e4ecf5 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -23,8 +23,6 @@ func Setup(app *fiber.App) { // Webhooks app.Post("/on_server_start", controllers.ServerStart) - // app.Post("/on_rtmp_connect", controllers.OnRtmpConnect) - // app.Post("/on_update", controllers.OnUpdate) app.Post("/on_pub_start", controllers.OnPubStart) app.Post("/on_pub_stop", controllers.OnPubStop) app.Post("/on_sub_start", controllers.OnSubStart) @@ -33,4 +31,9 @@ func Setup(app *fiber.App) { // Interfaces of transmissions app.Get("/transmissions", controllers.GetTransmissions) app.Get("/transmission/:channel", controllers.GetTransmissionByChannel) + + // Interfaces to player + app.Get("/c/:channel", controllers.WatchersCount) + app.Get("/w/:channel", controllers.Watch) + app.Get("/l/:channel", controllers.Leave) } diff --git a/services/channelservices.go b/services/channelservices.go index 5f4ab17..4e8513a 100644 --- a/services/channelservices.go +++ b/services/channelservices.go @@ -74,7 +74,7 @@ func VerifyTransmissionAuthorization(channelname, sessionid, transmissionkey, pl // TODO: Save the transmission on database for future calculation of remaining daily time - globals.Transmissions[channelname] = currentTransmission + globals.Transmissions[channelname] = ¤tTransmission return true, currentTransmission }