index.go 1.9 KB

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