added transmission webhooks

main
Nilo Roberto C Paim 2025-08-07 18:01:15 -03:00
parent c36ac25cef
commit 5707a7eb4d
6 changed files with 56 additions and 23 deletions

View File

@ -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
}

View File

@ -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] = &currentTransmission
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)

View File

@ -12,5 +12,5 @@ var (
DB *gorm.DB
Transmissions map[string]models.CurrentTransmission
Transmissions map[string]*models.CurrentTransmission
)

View File

@ -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)

View File

@ -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)
}

View File

@ -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] = &currentTransmission
return true, currentTransmission
}