Browse Source

fmt + parameters

Sacha Ligthert 2 years ago
parent
commit
430aa1cecf
5 changed files with 245 additions and 236 deletions
  1. 34 34
      functions.go
  2. 11 11
      http_listener.go
  3. 35 28
      main.go
  4. 112 112
      tcp_listener.go
  5. 53 51
      types.go

+ 34 - 34
functions.go

@@ -1,34 +1,34 @@
-package main
-
-import (
-	"math"
-	
-	"github.com/umahmood/haversine"
-)
-
-func rad2deg(rad float64) float64 {
-	return rad * (180 / math.Pi)
-}
-
-func calcDistance(lat_from float64, lon_from float64, lat_to float64, lon_to float64) float64 {
-	from := haversine.Coord{Lat: lat_from, Lon: lon_from}
-	to := haversine.Coord{Lat: lat_to, Lon: lon_to}
-	_, km := haversine.Distance(from, to)
-	return km
-}
-
-func calcMps(km float64, seconds float64) float64 {
-	return (km * 1000) / seconds
-}
-
-func calcKnots(mps float64) float64 {
-	return mps * 1.94384449
-}
-
-func calcKph(mps float64) float64 {
-	return mps * 3.6
-}
-
-func calcMph(mps float64) float64 {
-	return mps * 2.23694
-}
+package main
+
+import (
+	"math"
+
+	"github.com/umahmood/haversine"
+)
+
+func rad2deg(rad float64) float64 {
+	return rad * (180 / math.Pi)
+}
+
+func calcDistance(lat_from float64, lon_from float64, lat_to float64, lon_to float64) float64 {
+	from := haversine.Coord{Lat: lat_from, Lon: lon_from}
+	to := haversine.Coord{Lat: lat_to, Lon: lon_to}
+	_, km := haversine.Distance(from, to)
+	return km
+}
+
+func calcMps(km float64, seconds float64) float64 {
+	return (km * 1000) / seconds
+}
+
+func calcKnots(mps float64) float64 {
+	return mps * 1.94384449
+}
+
+func calcKph(mps float64) float64 {
+	return mps * 3.6
+}
+
+func calcMph(mps float64) float64 {
+	return mps * 2.23694
+}

+ 11 - 11
http_listener.go

@@ -1,11 +1,11 @@
-package main
-
-import (
-	"io"
-	"net/http"
-)
-
-func (pool *Pool) getRoot(w http.ResponseWriter, r *http.Request) {
-	//fmt.Printf("got / request\n")
-	io.WriteString(w, string(pool.jsonst)+"\n")
-}
+package main
+
+import (
+	"io"
+	"net/http"
+)
+
+func (pool *Pool) getRoot(w http.ResponseWriter, r *http.Request) {
+	//fmt.Printf("got / request\n")
+	io.WriteString(w, string(pool.jsonst)+"\n")
+}

+ 35 - 28
main.go

@@ -1,28 +1,35 @@
-package main
-
-import (
-	"errors"
-	"net/http"
-	"os"
-	"log"
-)
-
-func main() {
-
-	var pool Pool
-	pool.logger = log.New(os.Stdout, "[DCS] ", log.Ldate | log.Ltime)
-
-	http.HandleFunc("/", pool.getRoot)
-
-	pool.logger.Println("Starting TCP listener.")
-	go pool.tcplistener()
-
-	pool.logger.Println("Starting HTTP listener.")
-	err := http.ListenAndServe("0.0.0.0:8888", nil)
-	if errors.Is(err, http.ErrServerClosed) {
-		pool.logger.Println("server closed.")
-	} else if err != nil {
-		pool.logger.Printf("error starting server: %s\n", err)
-		os.Exit(1)
-	}
-}
+package main
+
+import (
+	"errors"
+	"flag"
+	"log"
+	"net/http"
+	"os"
+)
+
+func main() {
+
+	var pool Pool
+	pool.logger = log.New(os.Stdout, "[DCS] ", log.Ldate|log.Ltime)
+
+	var flagTCP = flag.String("tcp",":12345","Listen [address]:port for the TCP listener.")
+	var flagHTTP = flag.String("http",":8888","Listen [addres]:port for the HTTP listener.")
+	flag.Parse()
+	pool.tcp_port = *flagTCP
+	pool.http_port = *flagHTTP
+
+	http.HandleFunc("/", pool.getRoot)
+
+	pool.logger.Println("Starting TCP listener on",pool.tcp_port)
+	go pool.tcplistener()
+
+	pool.logger.Println("Starting HTTP listener on",pool.http_port)
+	err := http.ListenAndServe(pool.http_port, nil)
+	if errors.Is(err, http.ErrServerClosed) {
+		pool.logger.Println("server closed.")
+	} else if err != nil {
+		pool.logger.Printf("error starting server: %s\n", err)
+		os.Exit(1)
+	}
+}

+ 112 - 112
tcp_listener.go

@@ -1,112 +1,112 @@
-package main
-
-import (
-	"encoding/json"
-	"net"
-	"os"
-)
-
-func (pool *Pool) tcplistener() {
-	// Listen for incoming connections.
-	l, err := net.Listen("tcp", "0.0.0.0:12345")
-	if err != nil {
-		pool.logger.Println("Error listening:", err.Error())
-		os.Exit(1)
-	}
-
-	// Close the listener when the application closes.
-	defer l.Close()
-
-	for {
-		// Listen for an incoming connection.
-		conn, err := l.Accept()
-		if err != nil {
-			pool.logger.Println("Error accepting: ", err.Error())
-			os.Exit(1)
-		}
-		// Handle connections in a new goroutine.
-		pool.logger.Println("DCS Mission Started")
-		go pool.handleRequest(conn)
-	}
-}
-
-// Handles incoming requests.
-func (pool *Pool) handleRequest(conn net.Conn) {
-
-	// Close the connection when you're done with it.
-	defer conn.Close()
-
-	for {
-
-		// Make an MB of buffer to hold incoming data.
-		buf := make([]byte, 1024*1024)
-
-		// Read the incoming connection into the buffer.
-		read_len, err := conn.Read(buf)
-		if err != nil {
-			if err.Error() == "EOF" {
-				pool.logger.Println("Socket closed -- DCS Mission over?")
-				// Reset buffers
-				pool.latest = ""
-				pool.oldest = ""
-				pool.jsonst = ""
-			} else {
-				pool.logger.Println("Error reading:", err.Error())
-			}
-			return
-		}
-
-		// Copy messages around
-		pool.oldest = pool.latest
-		pool.latest = string(buf)[:read_len]
-
-		// Make sure we only do things if there is actual data:
-		if pool.oldest != "" {
-
-			// Parse JSON
-			var err error
-			var json_oldest json_units
-			var json_latest json_units
-
-			err = json.Unmarshal([]byte(pool.oldest), &json_oldest)
-			if err != nil {
-				pool.logger.Println("json_oldest error:", err)
-				pool.logger.Println("pool.oldest", pool.oldest)
-				pool.logger.Println("json_oldest", json_oldest)
-			}
-
-			err = json.Unmarshal([]byte(pool.latest), &json_latest)
-			if err != nil {
-				pool.logger.Println("json.latest error:", err)
-				pool.logger.Println("pool.latest", pool.latest)
-				pool.logger.Println("json_latest", json_latest)
-			}
-
-			// Compare JSON
-			var units []Unit
-
-			for _, vvoor := range json_latest.Units {
-				for _, vna := range json_oldest.Units {
-					if vna.UnitName == vvoor.UnitName {
-						SpeedInMps := calcMps(calcDistance(vvoor.Latitude, vvoor.Longitude, vna.Latitude, vna.Longitude), vvoor.AgeInSeconds-vna.AgeInSeconds)
-						SpeedInKnots := calcKnots(SpeedInMps)
-						SpeedInKph := calcKph(SpeedInMps)
-						SpeedInMph := calcMph(SpeedInMps)
-						units = append(units, Unit{vna.AgeInSeconds, vna.UnitName, vna.GroupName, vna.Name, vna.Latitude, vna.Longitude, vna.AltitudeInFeet, SpeedInKnots, SpeedInKph, SpeedInMps, SpeedInMph, vna.HeadingInRads, rad2deg(vna.HeadingInRads), vna.PitchInRads, rad2deg(vna.PitchInRads), vna.BankInRads, rad2deg(vna.BankInRads), vna.Coalition, vna.Type})
-					}
-				}
-			}
-
-			if pool.jsonst == "" {
-				pool.logger.Println("Making JSON available on HTTP.")
-			}
-			json_final, _ := json.Marshal(units)
-			pool.jsonst = string(json_final)
-		}
-
-		// Send a response back to person contacting us.
-		//conn.Write([]byte("Message received\n"))
-
-	}
-
-}
+package main
+
+import (
+	"encoding/json"
+	"net"
+	"os"
+)
+
+func (pool *Pool) tcplistener() {
+	// Listen for incoming connections.
+	l, err := net.Listen("tcp", pool.tcp_port)
+	if err != nil {
+		pool.logger.Println("Error listening:", err.Error())
+		os.Exit(1)
+	}
+
+	// Close the listener when the application closes.
+	defer l.Close()
+
+	for {
+		// Listen for an incoming connection.
+		conn, err := l.Accept()
+		if err != nil {
+			pool.logger.Println("Error accepting: ", err.Error())
+			os.Exit(1)
+		}
+		// Handle connections in a new goroutine.
+		pool.logger.Println("DCS Mission Started")
+		go pool.handleRequest(conn)
+	}
+}
+
+// Handles incoming requests.
+func (pool *Pool) handleRequest(conn net.Conn) {
+
+	// Close the connection when you're done with it.
+	defer conn.Close()
+
+	for {
+
+		// Make an MB of buffer to hold incoming data.
+		buf := make([]byte, 1024*1024)
+
+		// Read the incoming connection into the buffer.
+		read_len, err := conn.Read(buf)
+		if err != nil {
+			if err.Error() == "EOF" {
+				pool.logger.Println("Socket closed -- DCS Mission over?")
+				// Reset buffers
+				pool.latest = ""
+				pool.oldest = ""
+				pool.jsonst = ""
+			} else {
+				pool.logger.Println("Error reading:", err.Error())
+			}
+			return
+		}
+
+		// Copy messages around
+		pool.oldest = pool.latest
+		pool.latest = string(buf)[:read_len]
+
+		// Make sure we only do things if there is actual data:
+		if pool.oldest != "" {
+
+			// Parse JSON
+			var err error
+			var json_oldest json_units
+			var json_latest json_units
+
+			err = json.Unmarshal([]byte(pool.oldest), &json_oldest)
+			if err != nil {
+				pool.logger.Println("json_oldest error:", err)
+				pool.logger.Println("pool.oldest", pool.oldest)
+				pool.logger.Println("json_oldest", json_oldest)
+			}
+
+			err = json.Unmarshal([]byte(pool.latest), &json_latest)
+			if err != nil {
+				pool.logger.Println("json.latest error:", err)
+				pool.logger.Println("pool.latest", pool.latest)
+				pool.logger.Println("json_latest", json_latest)
+			}
+
+			// Compare JSON
+			var units []Unit
+
+			for _, vvoor := range json_latest.Units {
+				for _, vna := range json_oldest.Units {
+					if vna.UnitName == vvoor.UnitName {
+						SpeedInMps := calcMps(calcDistance(vvoor.Latitude, vvoor.Longitude, vna.Latitude, vna.Longitude), vvoor.AgeInSeconds-vna.AgeInSeconds)
+						SpeedInKnots := calcKnots(SpeedInMps)
+						SpeedInKph := calcKph(SpeedInMps)
+						SpeedInMph := calcMph(SpeedInMps)
+						units = append(units, Unit{vna.AgeInSeconds, vna.UnitName, vna.GroupName, vna.Name, vna.Latitude, vna.Longitude, vna.AltitudeInFeet, SpeedInKnots, SpeedInKph, SpeedInMps, SpeedInMph, vna.HeadingInRads, rad2deg(vna.HeadingInRads), vna.PitchInRads, rad2deg(vna.PitchInRads), vna.BankInRads, rad2deg(vna.BankInRads), vna.Coalition, vna.Type})
+					}
+				}
+			}
+
+			if pool.jsonst == "" {
+				pool.logger.Println("Making JSON available on HTTP.")
+			}
+			json_final, _ := json.Marshal(units)
+			pool.jsonst = string(json_final)
+		}
+
+		// Send a response back to person contacting us.
+		//conn.Write([]byte("Message received\n"))
+
+	}
+
+}

+ 53 - 51
types.go

@@ -1,51 +1,53 @@
-package main
-
-import (
-	"log"
-)
-
-type Pool struct {
-	latest string
-	oldest string
-	jsonst string // JSON string, trust me
-	logger *log.Logger
-}
-
-type json_units struct {
-	Units []struct {
-		AgeInSeconds   float64 `json:"age_in_seconds"`
-		UnitName       string  `json:"unit_name"`
-		GroupName      string  `json:"group_name"`
-		Name           string  `json:"name"`
-		Latitude       float64 `json:"latitude"`
-		Longitude      float64 `json:"longitude"`
-		AltitudeInFeet float64 `json:"altitude_in_feet"`
-		HeadingInRads  float64 `json:"heading_in_rads"`
-		PitchInRads    float64 `json:"pitch_in_rads"`
-		BankInRads     float64 `json:"bank_in_rads"`
-		Coalition      string  `json:"coalition"`
-		Type           string  `json:"type"`
-	} `json:"units"`
-}
-
-type Unit struct {
-	AgeInSeconds   float64
-	UnitName       string
-	GroupName      string
-	Name           string
-	Latitude       float64
-	Longitude      float64
-	AltitudeInFeet float64
-	SpeedInKnots   float64
-	SpeedInKph     float64
-	SpeedInMps     float64
-	SpeedInMph     float64
-	HeadingInRads  float64
-	Heading        float64
-	PitchInRads    float64
-	Pitch          float64
-	BankInRads     float64
-	Bank           float64
-	Coalition      string
-	Type           string
-}
+package main
+
+import (
+	"log"
+)
+
+type Pool struct {
+	latest    string
+	oldest    string
+	jsonst    string // JSON string, trust me
+	logger    *log.Logger
+	http_port string
+	tcp_port  string
+}
+
+type json_units struct {
+	Units []struct {
+		AgeInSeconds   float64 `json:"age_in_seconds"`
+		UnitName       string  `json:"unit_name"`
+		GroupName      string  `json:"group_name"`
+		Name           string  `json:"name"`
+		Latitude       float64 `json:"latitude"`
+		Longitude      float64 `json:"longitude"`
+		AltitudeInFeet float64 `json:"altitude_in_feet"`
+		HeadingInRads  float64 `json:"heading_in_rads"`
+		PitchInRads    float64 `json:"pitch_in_rads"`
+		BankInRads     float64 `json:"bank_in_rads"`
+		Coalition      string  `json:"coalition"`
+		Type           string  `json:"type"`
+	} `json:"units"`
+}
+
+type Unit struct {
+	AgeInSeconds   float64
+	UnitName       string
+	GroupName      string
+	Name           string
+	Latitude       float64
+	Longitude      float64
+	AltitudeInFeet float64
+	SpeedInKnots   float64
+	SpeedInKph     float64
+	SpeedInMps     float64
+	SpeedInMph     float64
+	HeadingInRads  float64
+	Heading        float64
+	PitchInRads    float64
+	Pitch          float64
+	BankInRads     float64
+	Bank           float64
+	Coalition      string
+	Type           string
+}