main.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //usr/bin/env go run "$0" "$@"; exit
  2. package main
  3. import (
  4. "bufio"
  5. "fmt"
  6. "log"
  7. "os"
  8. "os/signal"
  9. "strings"
  10. "time"
  11. "github.com/vladimirok5959/golang-twitch/pubsub"
  12. )
  13. func main() {
  14. ps := pubsub.New()
  15. defer ps.Close()
  16. ps.OnConnect(func(c *pubsub.Connection) {
  17. log.Printf("OnConnect (ID: %d)\n", c.ID)
  18. })
  19. ps.OnDisconnect(func(c *pubsub.Connection) {
  20. log.Printf("OnDisconnect (ID: %d)\n", c.ID)
  21. })
  22. ps.OnError(func(c *pubsub.Connection, err error) {
  23. log.Printf("OnError (ID: %d), err: %s\n", c.ID, err)
  24. })
  25. ps.OnInfo(func(c *pubsub.Connection, str string) {
  26. log.Printf("OnInfo (ID: %d), str: %s\n", c.ID, str)
  27. })
  28. ps.OnMessage(func(c *pubsub.Connection, msg *pubsub.Answer) {
  29. log.Printf("OnMessage (ID: %d), msg: %#v\n", c.ID, msg)
  30. })
  31. ps.OnPing(func(c *pubsub.Connection, start time.Time) {
  32. log.Printf("OnPing (ID: %d), start: %d\n", c.ID, start.Unix())
  33. })
  34. ps.OnPong(func(c *pubsub.Connection, start, end time.Time) {
  35. log.Printf("OnPong (ID: %d), start: %d, end: %d\n", c.ID, start.Unix(), end.Unix())
  36. })
  37. interrupt := make(chan os.Signal, 1)
  38. signal.Notify(interrupt, os.Interrupt)
  39. go func(interrupt chan os.Signal) {
  40. reader := bufio.NewReader(os.Stdin)
  41. for {
  42. select {
  43. case <-interrupt:
  44. return
  45. default:
  46. fmt.Print("Enter command: ")
  47. cmd, _ := reader.ReadString('\n')
  48. cmd = strings.TrimSuffix(strings.TrimSuffix(cmd, "\r\n"), "\n")
  49. if strings.HasPrefix(cmd, "listen") {
  50. if len([]rune(cmd)) > 7 {
  51. param := string([]rune(cmd)[7:len([]rune(cmd))])
  52. fmt.Printf("Listen: (%s)\n", param)
  53. ps.Listen(param)
  54. } else {
  55. fmt.Printf("Parameter is not set\n")
  56. }
  57. } else if strings.HasPrefix(cmd, "unlisten") {
  58. if len([]rune(cmd)) > 9 {
  59. param := string([]rune(cmd)[9:len([]rune(cmd))])
  60. fmt.Printf("Unlisten: (%s)\n", param)
  61. ps.Unlisten(param)
  62. } else {
  63. fmt.Printf("Parameter is not set\n")
  64. }
  65. } else if strings.HasPrefix(cmd, "has") {
  66. if len([]rune(cmd)) > 4 {
  67. param := string([]rune(cmd)[4:len([]rune(cmd))])
  68. fmt.Printf("HasTopic: (%#v)\n", ps.HasTopic(param))
  69. } else {
  70. fmt.Printf("Parameter is not set\n")
  71. }
  72. } else if cmd == "status" {
  73. fmt.Printf("Status:\n")
  74. fmt.Printf(" - Connections count: (%d)\n", len(ps.Connections))
  75. fmt.Printf(" - Topics: (%#v)\n", ps.Topics())
  76. fmt.Printf(" - TopicsCount: (%d)\n", ps.TopicsCount())
  77. } else if cmd == "help" {
  78. fmt.Printf("Help:\n")
  79. fmt.Printf(" - listen <topic>\n")
  80. fmt.Printf(" - unlisten <topic>\n")
  81. fmt.Printf(" - has <topic>\n")
  82. fmt.Printf(" - status\n")
  83. fmt.Printf(" - help\n")
  84. fmt.Printf(" - close\n")
  85. } else if cmd == "close" {
  86. fmt.Printf("Closing...\n")
  87. ps.Close()
  88. } else {
  89. fmt.Printf("Unknown command\n")
  90. }
  91. }
  92. }
  93. }(interrupt)
  94. <-interrupt
  95. log.Println("Done")
  96. }