From 540e682c0baf29a8dc2628434d91a144480d1828 Mon Sep 17 00:00:00 2001 From: w1ndyb0y Date: Mon, 21 Dec 2020 17:58:30 +0800 Subject: [PATCH] add socket --- cmd/root.go | 3 +++ telegram.yaml | 4 ++++ utils/socket.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 utils/socket.go diff --git a/cmd/root.go b/cmd/root.go index b94343a..2db00aa 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -33,6 +33,8 @@ var ( dbFile string dbInit bool + socketAddress string + // rootCmd represents the base command when called without any subcommands rootCmd = &cobra.Command{ Use: "tele-recv", @@ -96,5 +98,6 @@ func initConfig() { lograw = viper.GetBool("serial.lograw") dbFile = viper.GetString("sqlite.file") dbInit = viper.GetBool("sqlite.init") + socketAddress = viper.GetString("socket.address") } } diff --git a/telegram.yaml b/telegram.yaml index 1d18547..56d430a 100644 --- a/telegram.yaml +++ b/telegram.yaml @@ -8,3 +8,7 @@ serial: sqlite: file: telegram.db init: true + + +socket: + address: 127.0.0.1:6000 \ No newline at end of file diff --git a/utils/socket.go b/utils/socket.go new file mode 100644 index 0000000..d5b9d57 --- /dev/null +++ b/utils/socket.go @@ -0,0 +1,46 @@ +package utils + +import ( + "log" + "net" +) + +const ServerType = "tcp" + +var ServerRunning = false +var client net.Conn + +func Listen(address string) { + 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 + } else { + log.Println("client already connected, close") + conn.Close() + } + } +} + +func Write(data string) { + defer func() { + client.Close() + client = nil + }() + _, err := client.Write([]byte(data)) + if err != nil { + log.Println("error in write data to client socket ", err) + client.Close() + client = nil + } +}