main.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "math/rand"
  6. "os"
  7. "strings"
  8. "sync"
  9. "time"
  10. "github.com/shirou/gopsutil/process"
  11. )
  12. const (
  13. TestAkId = "lJSW0dXDcSQCKOYx1I2rEtCi"
  14. TestAkSecret = "2WnF0g81dEvwI5N3JMPaMFtY"
  15. TestHttpHost = "https://live-open.biliapi.com"
  16. )
  17. func main() {
  18. // 判断当前服务有无在执行
  19. processNum := GetPoccessNum()
  20. if processNum > 0 {
  21. fmt.Println("退出,当前运行的服务数", processNum)
  22. return
  23. }
  24. //
  25. rand.Seed(time.Now().UnixNano())
  26. //
  27. host, port, authBody, err := GetWebsocketInfo(TestAkId, TestAkSecret)
  28. if err != nil {
  29. log.Fatalln("[main | GetWsInfo] err", err)
  30. return
  31. }
  32. c := NewBiliWsClient(&BiliWsClientConfig{
  33. Host: host,
  34. Port: port,
  35. AuthBody: authBody,
  36. })
  37. if c == nil {
  38. log.Fatalln("[main | NewBiliWsClient] client init err")
  39. return
  40. }
  41. wg := sync.WaitGroup{}
  42. wg.Add(1)
  43. go func() {
  44. c.Run()
  45. }()
  46. wg.Wait()
  47. log.Println("[main | NewBiliWsClient] exit.....")
  48. }
  49. func GetPoccessNum() int {
  50. //
  51. num := 0
  52. //
  53. selfPID := os.Getpid()
  54. selfP, _ := process.NewProcess(int32(selfPID))
  55. cmdLine, _ := selfP.Cmdline()
  56. // 运行go run main.go方式的忽略判断,因为不准
  57. if strings.Contains(cmdLine, "exe/main") {
  58. return 0
  59. }
  60. // 判断当前是否进程还有跑
  61. pids, _ := process.Pids()
  62. for _, v := range pids {
  63. // 获取当前进程信息
  64. if selfPID == int(v) {
  65. continue
  66. }
  67. // 获取要匹配的进程信息
  68. p, _ := process.NewProcess(v)
  69. cmdline, _ := p.Cmdline()
  70. // if strings.Contains(cmdline, cmdLine) {
  71. // num++
  72. // }
  73. if cmdline == cmdLine {
  74. num++
  75. }
  76. //
  77. }
  78. return num
  79. }