package controller

import (
	"github.com/gin-gonic/gin"
	"log"
	"net"
)

var clientTcpList = make(map[string]net.Conn)

func NewTcpServer(tcpBaseServer string) {
	listener, err := net.Listen("tcp", tcpBaseServer)
	if err != nil {
		log.Println("Error listening", err.Error())
		return //终止程序
	}
	// 监听并接受来自客户端的连接
	for {
		conn, err := listener.Accept()
		if err != nil {
			log.Println("Error accepting", err.Error())
			return // 终止程序
		}
		var remoteIpAddress = conn.RemoteAddr()
		clientTcpList[remoteIpAddress.String()] = conn
		log.Println(remoteIpAddress, clientTcpList)
		//clientTcpList=append(clientTcpList,conn)
	}
}
func PushServerTcp(str []byte) {
	for ip, conn := range clientTcpList {
		line := append(str, []byte("\r\n")...)
		_, err := conn.Write(line)
		log.Println(ip, err)
		if err != nil {
			conn.Close()
			delete(clientTcpList, ip)
			//clientTcpList=append(clientTcpList[:index],clientTcpList[index+1:]...)
		}
	}
}
func DeleteOnlineTcp(c *gin.Context) {
	ip := c.Query("ip")
	for ipkey, conn := range clientTcpList {
		if ip == ipkey {
			conn.Close()
			delete(clientTcpList, ip)
		}
		if ip == "all" {
			conn.Close()
			delete(clientTcpList, ipkey)
		}
	}
	c.JSON(200, gin.H{
		"code": 200,
		"msg":  "ok",
	})
}