index.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package socket
  2. import (
  3. "fmt"
  4. "net"
  5. "pbx-api-gin/internal/app/stc/active"
  6. "pbx-api-gin/pkg/lfshook"
  7. "pbx-api-gin/pkg/utils"
  8. "time"
  9. )
  10. var Conn net.Conn
  11. var Conn8 net.Conn
  12. var ConnToSlave net.Conn
  13. const RemotePort = 10100
  14. const LocalPort = 10201
  15. const LocalPort8 = 10202
  16. const LocalServerPort = 10000
  17. const RemoteAddr = "10.0.11.11"
  18. const RemoteAddr8 = "10.0.11.81"
  19. func IsIPExists(targetIP string) (bool, error) {
  20. // 解析目标 IP
  21. utils.LoggerDebug.Printf("Checking device IP , Set CabNumber ......")
  22. ip := net.ParseIP(targetIP)
  23. if ip == nil {
  24. return false, fmt.Errorf("invalid IP address: %s", targetIP)
  25. }
  26. interfaces, err := net.Interfaces()
  27. if err != nil {
  28. return false, err
  29. }
  30. for _, iface := range interfaces {
  31. addrs, err := iface.Addrs()
  32. if err != nil {
  33. continue // 忽略无法读取地址的接口
  34. }
  35. for _, addr := range addrs {
  36. if ipnet, ok := addr.(*net.IPNet); ok && ipnet.IP != nil {
  37. // 精确匹配 IP(忽略掩码,只看地址本身是否一致)
  38. if ipnet.IP.Equal(ip) ||
  39. (ip.To4() != nil && ipnet.IP.To4() != nil && ipnet.IP.To4().Equal(ip.To4())) {
  40. return true, nil
  41. }
  42. }
  43. }
  44. }
  45. return false, nil
  46. }
  47. // Get eth0 IP
  48. func SetMasterCabNum() {
  49. count := 0
  50. getIP:
  51. ext1, err := IsIPExists("10.0.11.11")
  52. if err != nil {
  53. utils.LoggerDebug.Printf("Check IP 10.0.11.11 err :%+v", err)
  54. }
  55. // Init cab1 number and master role
  56. if ext1 {
  57. active.CabNum = "1"
  58. active.Master = true
  59. return
  60. }
  61. ext8, err := IsIPExists("10.0.11.81")
  62. if err != nil {
  63. utils.LoggerDebug.Printf("Check IP 10.0.11.81 err:%+v", err)
  64. }
  65. // Init cab8 number and master role
  66. if ext8 {
  67. active.CabNum = "8"
  68. active.Master = false
  69. return
  70. }
  71. if !(ext1 || ext8) {
  72. if count < 5 {
  73. count++
  74. time.Sleep(time.Second * 2)
  75. goto getIP
  76. }
  77. lfshook.NewLogger().Infof("Can not get device IP ! Set Cabnum=1 Master=true by default .")
  78. active.CabNum = "1"
  79. active.Master = true
  80. }
  81. }