package utils import ( "io" "log" "net" "time" ) const ServerType = "tcp" var ServerRunning = false var client net.Conn var server net.Listener func Listen(address string) { var err error server, err = net.Listen(ServerType, address) if err != nil { log.Fatal("error in create server ", err) } defer server.Close() log.Println("listen on ", address) for ServerRunning { conn, err := server.Accept() if err != nil { ServerRunning = false log.Fatalln("error in create connection ", err) } if client == nil { client = conn log.Println("client connected ", client.RemoteAddr()) LoadUnprocessed() } else { log.Println("client already connected, close") client.Close() client = nil conn.Close() } if IsClientConnected() { connCheck() } time.Sleep(2 * time.Second) } } func WriteToClient(data string) error { _, err := client.Write([]byte(data + "\r\n")) if err != nil { log.Println("error in write data to client socket ", err) client.Close() client = nil } return err } func connCheck() bool { _, err := client.Read(make([]byte, 0)) if err != nil && err != io.EOF { // this connection is invalid log.Println("conn closed....", err) client = nil return false } return true } func IsClientConnected() bool { return client != nil } func StopSocketServer() { if IsClientConnected() { client.Close() } if server != nil { server.Close() } }