|
|
package FLXNetworkController
|
|
|
|
|
|
import (
|
|
|
"flx/Common"
|
|
|
FLXDevice "flx/Device"
|
|
|
"fmt"
|
|
|
"net"
|
|
|
"os"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
"time"
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
)
|
|
|
|
|
|
// 网络通信管理
|
|
|
var FLXNetConnect FlxNetworkComController
|
|
|
|
|
|
type FlxNetworkComController struct {
|
|
|
mu sync.Mutex
|
|
|
ServerIP string //服务器IP
|
|
|
ServerPort int
|
|
|
LocalIP net.IP
|
|
|
BackUpServerIP string //服务器端口
|
|
|
Reader FlxNetworkCmdReader //接收线程
|
|
|
ClietsTCP []*FlxNetworkCmdTCPLisen //所有连接客户端接收线程
|
|
|
Sender FLXNetworkCmdSender //发送线程
|
|
|
NetSocket *net.TCPConn
|
|
|
BackUpNetSocket *net.TCPConn
|
|
|
TCPListerner *net.Listener
|
|
|
TCPKeeping bool //tcp连接
|
|
|
HandlerBack bool //
|
|
|
IsOpened bool //是否开始设备
|
|
|
IsStartAgenda bool //是否开始会议 //是否打开设备
|
|
|
ComPackets chan Compacket //信息通道
|
|
|
Event_SeatInfos []FLXDevice.SeatChangeEventArg //事件集合
|
|
|
SpeakFirstCloseClient bool //优先发言键按下时是否关闭其他发言设备
|
|
|
InvokeDeviceEventHandler func(FLXDevice.EventArgSource, FLXDevice.EventArgType, []FLXDevice.SeatChangeEventArg) //外部链接事件
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) InitFlxNetControl() {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("InitFlxNetControl:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
lp, _ := Common.ExternalIP()
|
|
|
para.LocalIP = lp
|
|
|
para.ServerPort = 9667
|
|
|
cfig := Common.LoadConfig()
|
|
|
para.ServerIP = cfig.SeverData.ServerIP
|
|
|
para.BackUpServerIP = cfig.SeverData.BackUpServerIP
|
|
|
para.ComPackets = make(chan Compacket, 600)
|
|
|
para.Sender.InitPara()
|
|
|
para.Sender.InitCoon(para.NetSocket)
|
|
|
para.Sender.ReConnectSocket = para.Sender_ReConnectSocket
|
|
|
// var Reader FlxNetCCUCmdReader
|
|
|
para.Reader.InitPara()
|
|
|
para.Reader.InitCoon(para.NetSocket, para.BackUpNetSocket)
|
|
|
para.Reader.InvokeOnReviceData = para.Reader_OnDataReciveEventHandler
|
|
|
para.StartUDP()
|
|
|
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) Reader_OnDataReciveEventHandler(comPacket Compacket) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("Reader_OnDataReciveEventHandler:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
// comPackets.Enqueue(comPacket)
|
|
|
para.ComPackets <- comPacket
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) Sender_ReConnectSocket(ind int) bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("Sender_ReConnectSocket:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
fmt.Println("连接中断,重新连接。。。")
|
|
|
if ind == 0 {
|
|
|
para.SocketConnected()
|
|
|
} else {
|
|
|
para.SocketBackUpConnected()
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) StartUDP() bool {
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("StartUDP:", r)
|
|
|
}
|
|
|
}()
|
|
|
para.IsOpened = true
|
|
|
para.CreatEventHandleThread()
|
|
|
go para.TimerCallbackHandler()
|
|
|
// para.Sender.CurrentSocket = para.NetSocket
|
|
|
// para.Reader.CurrentSocket = para.NetSocket
|
|
|
para.Reader.Start()
|
|
|
para.Sender.IsConnect = true
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) StartTCPListen() {
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("StartTCPListen:", r)
|
|
|
}
|
|
|
}()
|
|
|
// 绑定监听地址
|
|
|
listener, err := net.Listen("tcp", ":9667")
|
|
|
if err != nil {
|
|
|
fmt.Println("listen err: ", err)
|
|
|
}
|
|
|
defer func() {
|
|
|
listener.Close()
|
|
|
}()
|
|
|
fmt.Println("bind:start listening...")
|
|
|
para.TCPListerner = &listener
|
|
|
para.TCPKeeping = true
|
|
|
for para.TCPKeeping {
|
|
|
// Accept 会一直阻塞直到有新的连接建立或者listen中断才会返回
|
|
|
conn, err := listener.Accept()
|
|
|
if err != nil {
|
|
|
// 通常是由于listener被关闭无法继续监听导致的错误
|
|
|
fmt.Println("accept err: ", err)
|
|
|
continue
|
|
|
}
|
|
|
var ClietTCP FlxNetworkCmdTCPLisen
|
|
|
para.ClietsTCP = append(para.ClietsTCP, &ClietTCP)
|
|
|
fmt.Println("客户端链接", conn.RemoteAddr().String())
|
|
|
|
|
|
ClietTCP.InvokeOnReviceData = para.Reader_OnDataReciveEventHandler
|
|
|
|
|
|
// 开启新的 goroutine 处理该连接
|
|
|
go ClietTCP.Handle(conn)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// func (para *FlxNetworkComController) Handle(conn net.Conn) {
|
|
|
// defer conn.Close()
|
|
|
// var clientReader FlxNetworkCmdReader
|
|
|
// clientReader.InvokeOnReviceData = para.Reader_OnDataReciveEventHandler
|
|
|
// para.ClietsReader = append(para.ClietsReader, clientReader)
|
|
|
// for {
|
|
|
// var buf [65535]byte
|
|
|
// n, err := conn.Read(buf[:])
|
|
|
// if err != nil {
|
|
|
// fmt.Println("Read from tcp server failed,err:", err)
|
|
|
// break
|
|
|
// }
|
|
|
// data := string(buf[:n])
|
|
|
// fmt.Printf("Recived from client,data:%s\n", data)
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
func (para *FlxNetworkComController) StartTCP(Contype int) bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("StartTCP:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
if Contype == 0 {
|
|
|
|
|
|
//22222222222
|
|
|
if para.SocketConnected() {
|
|
|
para.IsOpened = true
|
|
|
para.Sender.CurrentSocket = para.NetSocket
|
|
|
para.Reader.CurrentSocket = para.NetSocket
|
|
|
|
|
|
return true
|
|
|
} else {
|
|
|
para.IsOpened = false
|
|
|
return false
|
|
|
}
|
|
|
} else if Contype == 1 {
|
|
|
if para.SocketBackUpConnected() {
|
|
|
para.IsOpened = true
|
|
|
para.Sender.BackUpCurrentSocket = para.BackUpNetSocket
|
|
|
para.Reader.CurrentSocket = para.BackUpNetSocket
|
|
|
|
|
|
return true
|
|
|
} else {
|
|
|
para.IsOpened = false
|
|
|
return false
|
|
|
}
|
|
|
} else if Contype == 2 {
|
|
|
if para.SocketConnected() && para.SocketBackUpConnected() {
|
|
|
para.IsOpened = true
|
|
|
para.Sender.CurrentSocket = para.NetSocket
|
|
|
para.Sender.BackUpCurrentSocket = para.BackUpNetSocket
|
|
|
para.Reader.CurrentSocket = para.NetSocket
|
|
|
|
|
|
return true
|
|
|
} else {
|
|
|
para.IsOpened = false
|
|
|
return false
|
|
|
}
|
|
|
}
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) Close() bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("Close:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.KillEventHandleThread()
|
|
|
para.IsOpened = false
|
|
|
para.Reader.Stop()
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
func (para *FlxNetworkComController) TimerCallbackHandler() {
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("TimerCallbackHandler:", r)
|
|
|
}
|
|
|
}()
|
|
|
for para.HandlerBack {
|
|
|
fmt.Println("循环执行中")
|
|
|
para.Event_SeatInfos = para.Event_SeatInfos[0:0]
|
|
|
|
|
|
comPacket := <-para.ComPackets
|
|
|
seat := CopySeatChangeEventArg(comPacket)
|
|
|
// if seat.CMD == FlxNetworkComPara_Main_Start_Register {
|
|
|
// fmt.Println(seat.CMD)
|
|
|
// }
|
|
|
// fmt.Println(seat.CMD)
|
|
|
|
|
|
//本机测试先注释掉
|
|
|
// if seat.IPAddress != para.LocalIP.String() {
|
|
|
if seat.IPAddress == para.ServerIP || seat.IPAddress == para.BackUpServerIP {
|
|
|
para.Event_SeatInfos = append(para.Event_SeatInfos, seat)
|
|
|
para.InvokeDeviceEventHandler(FLXDevice.EventArgSource_SeverDevice, FLXDevice.EventArgType_ServerToClient, para.Event_SeatInfos)
|
|
|
} else {
|
|
|
para.Event_SeatInfos = append(para.Event_SeatInfos, seat)
|
|
|
para.InvokeDeviceEventHandler(FLXDevice.EventArgSource_ClientDevice, FLXDevice.EventArgType_ClientToServer, para.Event_SeatInfos)
|
|
|
}
|
|
|
// }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
func CopySeatChangeEventArg(comPacket Compacket) FLXDevice.SeatChangeEventArg {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("CopySeatChangeEventArg:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
var seatInfo FLXDevice.SeatChangeEventArg
|
|
|
seatInfo.CMD = comPacket.Cmd
|
|
|
seatInfo.Value_ExtraInt = int(comPacket.Const)
|
|
|
seatInfo.IPAddress = comPacket.IPAddress
|
|
|
|
|
|
seatInfo.Value_ExtraStr = string(comPacket.Data)
|
|
|
seatInfo.Data = comPacket.Data
|
|
|
return seatInfo
|
|
|
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) SocketConnected() bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SocketConnected:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
if para.NetSocket != nil {
|
|
|
fmt.Println("关闭原有tcp连接")
|
|
|
para.NetSocket.Close()
|
|
|
}
|
|
|
// if para.ServerIP == "" {
|
|
|
// para.InitFlxNetControl()
|
|
|
// }
|
|
|
|
|
|
// lp, _ := Common.ExternalIP()
|
|
|
// para.LocalIP = lp
|
|
|
// para.ServerPort = 9667
|
|
|
// cfig := Common.LoadConfig()
|
|
|
// para.ServerIP = cfig.SeverData.ServerIP
|
|
|
// para.BackUpServerIP = cfig.SeverData.BackUpServerIP
|
|
|
// para.ComPackets = make(chan Compacket, 600)
|
|
|
// para.Sender.InitPara()
|
|
|
|
|
|
// para.Sender.ReConnectSocket = para.Sender_ReConnectSocket
|
|
|
// // var Reader FlxNetCCUCmdReader
|
|
|
// para.Reader.InitPara()
|
|
|
// para.Reader.InitCoon(para.NetSocket, para.BackUpNetSocket)
|
|
|
// para.Reader.InvokeOnReviceData = para.Reader_OnDataReciveEventHandler
|
|
|
|
|
|
// para.StartUDP()
|
|
|
|
|
|
// para.InvokeDeviceEventHandler = OnDeviceEventHandlers
|
|
|
|
|
|
// serveradd := "192.168.8.108" + ":" + strconv.Itoa(9667)
|
|
|
serveradd := para.ServerIP + ":" + strconv.Itoa(para.ServerPort)
|
|
|
tcpAddr, err := net.ResolveTCPAddr("tcp4", serveradd)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
|
|
|
return false
|
|
|
}
|
|
|
conn, err := net.DialTCP("tcp", nil, tcpAddr)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
|
|
|
return false
|
|
|
}
|
|
|
time.Sleep(3 * time.Second)
|
|
|
|
|
|
// taoConn := tao.NewServerConn(0, CTcpServer.Server, conn)
|
|
|
// onConnect := tao.OnConnectOption(func(conn tao.WriteCloser) bool {
|
|
|
// holmes.Infoln("on connect")
|
|
|
// // 记录NetID与IP映射
|
|
|
// // MIPNetID[conn.Name()] = conn.(*tao.ServerConn).NetID()
|
|
|
// return true
|
|
|
// })
|
|
|
// onConnect(taoConn)
|
|
|
|
|
|
// _, errR := conn.Write([]byte("OK"))
|
|
|
// if errR != nil {
|
|
|
// fmt.Println(time.Now().Format("2006/1/2 15:04:05"), "TCP发送错误", err)
|
|
|
|
|
|
// }
|
|
|
if para.Sender.CurrentSocket != nil {
|
|
|
|
|
|
fmt.Println("22222222222222222222222222222222222", para.Sender.CurrentSocket)
|
|
|
}
|
|
|
para.IsOpened = true
|
|
|
para.Sender.IsConnect = true
|
|
|
para.NetSocket = conn
|
|
|
para.Sender.CurrentSocket = conn
|
|
|
para.Reader.CurrentSocket = conn
|
|
|
para.Sender.IsSendToServer = true
|
|
|
// para.Reader.StopTCP()
|
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
para.Reader.StartTCP()
|
|
|
// para.Reader.Start()
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) SocketBackUpConnected() bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SocketBackUpConnected:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
if para.NetSocket != nil {
|
|
|
fmt.Println("关闭原有tcp连接")
|
|
|
para.NetSocket.Close()
|
|
|
}
|
|
|
serveradd := para.BackUpServerIP + ":" + strconv.Itoa(para.ServerPort)
|
|
|
tcpAddr, err := net.ResolveTCPAddr("tcp4", serveradd)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
|
|
|
return false
|
|
|
}
|
|
|
conn, err := net.DialTCP("tcp", nil, tcpAddr)
|
|
|
if err != nil {
|
|
|
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
|
|
|
return false
|
|
|
}
|
|
|
_, errR := conn.Write([]byte("OK"))
|
|
|
if errR != nil {
|
|
|
fmt.Println(time.Now().Format("2006/1/2 15:04:05"), "TCP发送错误", err)
|
|
|
|
|
|
}
|
|
|
if para.Sender.BackUpCurrentSocket != nil {
|
|
|
|
|
|
fmt.Println(para.Sender.BackUpCurrentSocket)
|
|
|
}
|
|
|
para.IsOpened = true
|
|
|
para.Sender.IsConnect = true
|
|
|
para.Sender.IsSendToBackUpServer = true
|
|
|
para.BackUpNetSocket = conn
|
|
|
para.Sender.BackUpCurrentSocket = conn
|
|
|
para.Sender.IsSendToBackUpServer = true
|
|
|
// para.Reader.CurrentSocket = conn
|
|
|
// para.Reader.StopTCP()
|
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
para.Reader.StartBackUpTCP()
|
|
|
// para.Reader.Start()
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) CreatEventHandleThread() bool {
|
|
|
|
|
|
// para.mu.Lock()
|
|
|
// defer para.mu.Unlock()
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("CreatEventHandleThread:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.HandlerBack = true
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) KillEventHandleThread() bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("KillEventHandleThread:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.HandlerBack = false
|
|
|
|
|
|
if para.IsOpened {
|
|
|
para.NetSocket.Close()
|
|
|
}
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
// 关闭全部tcp连接
|
|
|
func (para *FlxNetworkComController) TCPListernerClose() bool {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("TCPListernerClose:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.TCPKeeping = false
|
|
|
if para.TCPListerner != nil {
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
if para.ClietsTCP[i].TCPConn != nil {
|
|
|
para.ClietsTCP[i].TCPConn.Close()
|
|
|
|
|
|
}
|
|
|
}
|
|
|
para.ClietsTCP = para.ClietsTCP[0:0]
|
|
|
(*para.TCPListerner).Close()
|
|
|
}
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
// 开服务器发送开始会议广播指令
|
|
|
func (para *FlxNetworkComController) SendCongressIDByUDP(Ag_ID string) {
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendCongressIDByUDP:", r)
|
|
|
}
|
|
|
}()
|
|
|
// 这里设置发送者的IP地址,自己查看一下自己的IP自行设定
|
|
|
laddr := net.UDPAddr{
|
|
|
IP: para.LocalIP,
|
|
|
Port: 9000,
|
|
|
}
|
|
|
|
|
|
// 这里设置接收者的IP地址为广播地址
|
|
|
raddr := net.UDPAddr{
|
|
|
IP: net.IPv4(255, 255, 255, 255),
|
|
|
Port: 9668,
|
|
|
}
|
|
|
conn, err := net.DialUDP("udp4", &laddr, &raddr)
|
|
|
if err != nil {
|
|
|
println(err.Error())
|
|
|
return
|
|
|
}
|
|
|
//如果要打开tcp连接,首先要确保tcp连接在关闭状态
|
|
|
defer conn.Close()
|
|
|
sendValue, _ := UTF8GBK([]byte(Ag_ID))
|
|
|
|
|
|
slen := len(sendValue) + 7
|
|
|
var buff = make([]byte, slen)
|
|
|
|
|
|
buff[0] = FlxNetworkComPara_CMD_HEAD
|
|
|
buff[1] = FlxNetworkComPara_Meeting
|
|
|
buff[2] = FlxNetworkComPara_Meeting_Start
|
|
|
if len(sendValue) > 255 {
|
|
|
buff[3] = (byte)(len(sendValue) / 255)
|
|
|
buff[4] = (byte)(len(sendValue) % 255)
|
|
|
} else {
|
|
|
buff[4] = (byte)(len(sendValue))
|
|
|
}
|
|
|
buff = insertSlice(5, sendValue, buff)
|
|
|
buff = FullCheckSum(buff)
|
|
|
para.IsStartAgenda = true
|
|
|
for para.IsStartAgenda {
|
|
|
_, err := conn.Write(buff)
|
|
|
if err != nil {
|
|
|
fmt.Println(err)
|
|
|
}
|
|
|
time.Sleep(time.Second * 5)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// 服务器发送结束会议指令
|
|
|
func (para *FlxNetworkComController) StopAgenda() {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("StopAgenda:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.IsStartAgenda = false
|
|
|
//确保关闭tcp连接
|
|
|
para.TCPListernerClose()
|
|
|
}
|
|
|
|
|
|
// 服务器发送开始报到指令
|
|
|
func (para *FlxNetworkComController) StartCheckInStart() {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("StartCheckInStart:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
para.ClietsTCP[i].StartCheckInStart()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) ServerSendToApointClientCheckInStart(ClientIP string) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("ServerSendToApointClientCheckInStart:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
if strings.Split(para.ClietsTCP[i].TCPConn.RemoteAddr().String(), ":")[0] == ClientIP {
|
|
|
para.ClietsTCP[i].StartCheckInStart()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 服务器发送结束报到指令
|
|
|
func (para *FlxNetworkComController) StartCheckInStop() {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("StartCheckInStop:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
para.ClietsTCP[i].StartCheckInStop()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 服务器发送人员报到指令
|
|
|
func (para *FlxNetworkComController) SendToWithOutClientPersonCheckIn(AP_ID string, ClientIP string) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToWithOutClientPersonCheckIn:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
if strings.Split(para.ClietsTCP[i].TCPConn.RemoteAddr().String(), ":")[0] != ClientIP {
|
|
|
para.ClietsTCP[i].SendToClientPersonCheckIn(AP_ID)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 服务器发送人员报到指令
|
|
|
func (para *FlxNetworkComController) SendToClientPersonCheckIn(AP_ID string, ClientIP string) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToClientPersonCheckIn:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
if strings.Split(para.ClietsTCP[i].TCPConn.RemoteAddr().String(), ":")[0] == ClientIP {
|
|
|
para.ClietsTCP[i].SendToClientPersonCheckIn(AP_ID)
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 服务器发送人员消报指令
|
|
|
func (para *FlxNetworkComController) SendToWithOutClientPersonCheckOut(AP_ID string, ClientIP string) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToWithOutClientPersonCheckOut:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
for i := 0; i < len(para.ClietsTCP); i++ {
|
|
|
if strings.Split(para.ClietsTCP[i].TCPConn.RemoteAddr().String(), ":")[0] != ClientIP {
|
|
|
para.ClietsTCP[i].SendToClientPersonCheckOut(AP_ID)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 客户端发送报到指令
|
|
|
func (para *FlxNetworkComController) SendToServerPersonCheckIn(AP_ID string) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToServerPersonCheckIn:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.Sender.CkeckInSendRegister(AP_ID)
|
|
|
}
|
|
|
|
|
|
// 客户端发送消报指令
|
|
|
func (para *FlxNetworkComController) SendToServerPersonCheckOut(AP_ID string) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToServerPersonCheckOut:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.Sender.CkeckInSendUnRegister(AP_ID)
|
|
|
}
|
|
|
|
|
|
// 客户端发送获取会议状态指令
|
|
|
func (para *FlxNetworkComController) SendToServerGetCongressStatus() {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToServerGetCongressStatus:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.Sender.CkeckInSendGetCongressStatus()
|
|
|
}
|
|
|
|
|
|
// 客户端发送接收会议通知反馈
|
|
|
func (para *FlxNetworkComController) SendToServerMeetingFeedback() {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("SendToServerMeetingFeedback:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
para.Sender.CkeckInSendMeetingFeedback(para.LocalIP.String())
|
|
|
}
|
|
|
|
|
|
func (para *FlxNetworkComController) AsClicent_DatagramReceived(endPoint string, SoNetID int64, datagram []byte) {
|
|
|
|
|
|
defer func() {
|
|
|
if r := recover(); r != nil {
|
|
|
log.Error("AsClicent_DatagramReceived:", r)
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
if datagram[0] == 0x7E {
|
|
|
if len(datagram) > 4 && int(datagram[3])*256+int(datagram[4])+7 < len(datagram) {
|
|
|
for len(datagram) > 4 && int(datagram[3])*256+int(datagram[4])+7 <= len(datagram) {
|
|
|
Newbuff := datagram[:int(datagram[3])*256+int(datagram[4])+7]
|
|
|
comP := CreatCMDPack(endPoint, Newbuff)
|
|
|
para.ComPackets <- comP
|
|
|
if len(datagram)-len(Newbuff) > 0 {
|
|
|
LastNewbuff := datagram[len(Newbuff):]
|
|
|
datagram = datagram[0:0]
|
|
|
datagram = LastNewbuff
|
|
|
} else {
|
|
|
datagram = datagram[0:0]
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
comP := CreatCMDPack(endPoint, datagram)
|
|
|
fmt.Println(comP)
|
|
|
para.ComPackets <- comP
|
|
|
// FlxnetController.ComPackets <- &comP
|
|
|
}
|
|
|
}
|
|
|
}
|