|  |  |  |  | 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
 | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } |