index.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package app
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "pbx-api-gin/internal/app/ami/action"
  6. "pbx-api-gin/internal/app/stc"
  7. "pbx-api-gin/internal/app/stc/active"
  8. "pbx-api-gin/internal/app/stc/priority"
  9. "pbx-api-gin/internal/app/stc/socket"
  10. "pbx-api-gin/pkg/lfshook"
  11. "pbx-api-gin/pkg/utils"
  12. "strings"
  13. "time"
  14. )
  15. func StartApp() {
  16. //init mysql
  17. //mysql.CreateDBInstance()
  18. //Get cab number acording to IP
  19. IP, err := getIPByCommand()
  20. if err != nil {
  21. lfshook.NewLogger().Infof("Get IP err :%+v", err)
  22. }
  23. // Init cab number and master role
  24. if IP[len(IP)-2:] == "81" {
  25. active.Master = false
  26. active.CabNum = "8"
  27. } else {
  28. active.Master = true
  29. active.CabNum = "1"
  30. }
  31. active.Master = true
  32. active.CabNum = "1"
  33. lfshook.NewLogger().Infof("=================cab number:%s===========", active.CabNum)
  34. //init the active status
  35. active.ActivedCab = ""
  36. //get priority
  37. priority.GetPriority()
  38. // 启动带有重连机制的连接管理协程MC1
  39. go stc.StartStcConnection(socket.Conn, "1")
  40. // 启动带有重连机制的连接管理协程MC8
  41. go stc.StartStcConnection(socket.Conn8, "8")
  42. //启动连接到Master服务器,检查Master是否在线
  43. if active.CabNum == "8" {
  44. socket.ConnectedMaster = false
  45. go stc.StartConnectionToSipServer(socket.ConnToMaster)
  46. }
  47. // 启动其他服务...
  48. // 启动 AMI
  49. go func() {
  50. action.StartAMI(func() {
  51. lfshook.NewLogger().Info("ami callback")
  52. }, []func(event map[string]string){})
  53. }()
  54. //refresh extension status
  55. time.Sleep(3 * time.Second)
  56. utils.ExecCmdAsync("/usr/sbin/asterisk", "-rx", "reload")
  57. }
  58. // Get eth0 IP
  59. func getIPByCommand() (string, error) {
  60. cmd := "ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | cut -d: -f2"
  61. out, err := exec.Command("bash", "-c", cmd).CombinedOutput()
  62. if err != nil {
  63. return "", err
  64. }
  65. ip := strings.TrimSpace(string(out))
  66. if ip == "" {
  67. return "", fmt.Errorf("no IP address found")
  68. }
  69. return ip, nil
  70. }