Bladeren bron

add connect MC1 and MC8

dujunchen 2 weken geleden
bovenliggende
commit
8c4ab9b465
3 gewijzigde bestanden met toevoegingen van 85 en 29 verwijderingen
  1. 4 2
      internal/app/index.go
  2. 77 25
      internal/app/stc/index.go
  3. 4 2
      internal/app/stc/socket/index.go

+ 4 - 2
internal/app/index.go

@@ -30,9 +30,11 @@ func StartApp() {
 	}
 	lfshook.NewLogger().Infof("=================cab number:%s===========", active.CabNum)
 
-	// 启动带有重连机制的连接管理协程
-	go stc.StartStcConnection(socket.Conn)
+	// 启动带有重连机制的连接管理协程MC1
+	go stc.StartStcConnection(socket.Conn, "1")
 
+	// 启动带有重连机制的连接管理协程MC8
+	go stc.StartStcConnection(socket.Conn, "8")
 	// 启动其他服务...
 	// 启动 AMI
 	go func() {

+ 77 - 25
internal/app/stc/index.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	"net"
+	"pbx-api-gin/internal/app/stc/active"
 	"pbx-api-gin/internal/app/stc/broadcast"
 	msgdata "pbx-api-gin/internal/app/stc/data"
 	"pbx-api-gin/internal/app/stc/socket"
@@ -14,22 +15,18 @@ import (
 	"time"
 )
 
-const RemotePort = 10100
-const LocalPort = 10201
-
-// const RemoteAddr = "192.168.17.14"
-// const RemoteAddr = "10.0.0.51"
-const RemoteAddr = "10.0.11.11"
-
-func StartStcConnection(conn net.Conn) {
+func StartStcConnection(conn net.Conn, cab string) {
 
 	var connMux sync.Mutex // 保护 conn 的读写
+	var conn1 net.Conn
+	var err error
 
 	for {
-		// 尝试建立连接
-		conn1, err := CreateConnection()
-		if err != nil {
+		// 尝试建立连接MC
+		conn1, err = CreateConnection(cab)
+		if err != nil || conn1 == nil {
 			time.Sleep(2 * time.Second)
+			lfshook.NewLogger().Logger.Infof("===========Reconnecting====Cab:%s=======", cab)
 			continue
 		}
 
@@ -76,22 +73,77 @@ func StartStcConnection(conn net.Conn) {
 }
 
 // 返回错误而不是终止程序
-func CreateConnection() (net.Conn, error) {
-	lfshook.NewLogger().Logger.Infof("========Connect server  IP:%s  :Port:%d", socket.RemoteAddr, socket.RemotePort)
-	// 创建 Dialer
-	dialer := &net.Dialer{
-		LocalAddr: &net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: socket.LocalPort}, // 固定本地端口
-		Control:   controlTCPConn,
-	}
+func CreateConnection(RemoteCab string) (net.Conn, error) {
+
+	if RemoteCab == "1" { // connect to MC1
+		lfshook.NewLogger().Logger.Infof("========Connect Server MC1 IP:%s  :Port:%d", socket.RemoteAddr, socket.RemotePort)
+		// 创建 Dialer
+		if active.CabNum == "1" { //in cab1
+			dialer := &net.Dialer{
+				LocalAddr: &net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: socket.LocalPort}, // 固定本地端口
+				Control:   controlTCPConn,
+				Timeout:   5 * time.Second,
+			}
+
+			DialAddr := fmt.Sprintf("%s:%d", socket.RemoteAddr, socket.RemotePort)
+			conn, err := dialer.Dial("tcp", DialAddr)
+			if err != nil {
+				lfshook.NewLogger().Logger.Infof("========Connect server err :%+v", err)
+				return nil, err
+			}
+			lfshook.NewLogger().Logger.Infof("Connect success :%s:%d", socket.RemoteAddr, socket.RemotePort)
+			return conn, nil
+		} else { //in cab 8
+			dialer := &net.Dialer{
+				LocalAddr: &net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: socket.LocalPort8}, // 固定本地端口
+				Control:   controlTCPConn,
+				Timeout:   5 * time.Second,
+			}
+
+			DialAddr := fmt.Sprintf("%s:%d", socket.RemoteAddr, socket.RemotePort)
+			conn, err := dialer.Dial("tcp", DialAddr)
+			if err != nil {
+				lfshook.NewLogger().Logger.Infof("========Connect server err :%+v", err)
+				return nil, err
+			}
+			lfshook.NewLogger().Logger.Infof("Connect success :%s:%d", socket.RemoteAddr, socket.RemotePort)
+			return conn, nil
+		}
+	} else { // connect to MC8
+		lfshook.NewLogger().Logger.Infof("========Connect server MC8 IP:%s  :Port:%d", socket.RemoteAddr8, socket.RemotePort)
+		// 创建 Dialer
+		if active.CabNum == "1" { //in cab1
+			dialer := &net.Dialer{
+				LocalAddr: &net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: socket.LocalPort}, // 固定本地端口
+				Control:   controlTCPConn,
+				Timeout:   5 * time.Second,
+			}
+
+			DialAddr := fmt.Sprintf("%s:%d", socket.RemoteAddr8, socket.RemotePort)
+			conn, err := dialer.Dial("tcp", DialAddr)
+			if err != nil {
+				lfshook.NewLogger().Logger.Infof("========Connect server err :%+v", err)
+				return nil, err
+			}
+			lfshook.NewLogger().Logger.Infof("Connect success MC8:%s:%d", socket.RemoteAddr8, socket.RemotePort)
+			return conn, nil
+		} else { //in cab 8
+			dialer := &net.Dialer{
+				LocalAddr: &net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: socket.LocalPort8}, // 固定本地端口
+				Control:   controlTCPConn,
+				Timeout:   5 * time.Second,
+			}
 
-	DialAddr := fmt.Sprintf("%s:%d", socket.RemoteAddr, socket.RemotePort)
-	conn, err := dialer.Dial("tcp", DialAddr)
-	if err != nil {
-		lfshook.NewLogger().Logger.Infof("========Connect server err :%+v", err)
-		return nil, err
+			DialAddr := fmt.Sprintf("%s:%d", socket.RemoteAddr8, socket.RemotePort)
+			conn, err := dialer.Dial("tcp", DialAddr)
+			if err != nil {
+				lfshook.NewLogger().Logger.Infof("========Connect server err :%+v", err)
+				return nil, err
+			}
+			lfshook.NewLogger().Logger.Infof("Connect success MC8:%s:%d", socket.RemoteAddr8, socket.RemotePort)
+			return conn, nil
+		}
 	}
-	lfshook.NewLogger().Logger.Infof("Connect success :%s:%d", socket.RemoteAddr, socket.RemotePort)
-	return conn, nil
 }
 
 func controlTCPConn(network, address string, c syscall.RawConn) error {

+ 4 - 2
internal/app/stc/socket/index.go

@@ -7,8 +7,10 @@ var Conn8 net.Conn
 
 const RemotePort = 10100
 const LocalPort = 10201
+const LocalPort8 = 10202
 
-//const RemoteAddr = "192.168.17.14"
+const RemoteAddr8 = "192.168.17.14"
 
 const RemoteAddr = "10.0.11.11"
-const RemoteAddr8 = "10.0.11.81"
+
+//const RemoteAddr8 = "10.0.11.81"