main.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "math/rand"
  6. "github.com/gin-gonic/gin"
  7. )
  8. func main() {
  9. router := gin.Default()
  10. router.SetHTMLTemplate(html)
  11. router.GET("/room/:roomid", roomGET)
  12. router.POST("/room/:roomid", roomPOST)
  13. router.DELETE("/room/:roomid", roomDELETE)
  14. router.GET("/stream/:roomid", stream)
  15. router.Run(":8080")
  16. }
  17. func stream(c *gin.Context) {
  18. roomid := c.Param("roomid")
  19. listener := openListener(roomid)
  20. defer closeListener(roomid, listener)
  21. c.Stream(func(w io.Writer) bool {
  22. c.SSEvent("message", <-listener)
  23. return true
  24. })
  25. }
  26. func roomGET(c *gin.Context) {
  27. roomid := c.Param("roomid")
  28. userid := fmt.Sprint(rand.Int31())
  29. c.HTML(200, "chat_room", gin.H{
  30. "roomid": roomid,
  31. "userid": userid,
  32. })
  33. }
  34. func roomPOST(c *gin.Context) {
  35. roomid := c.Param("roomid")
  36. userid := c.PostForm("user")
  37. message := c.PostForm("message")
  38. room(roomid).Submit(userid + ": " + message)
  39. c.JSON(200, gin.H{
  40. "status": "success",
  41. "message": message,
  42. })
  43. }
  44. func roomDELETE(c *gin.Context) {
  45. roomid := c.Param("roomid")
  46. deleteBroadcast(roomid)
  47. }