From ae05a283accf9f60fc27054c5fd61e562b416276 Mon Sep 17 00:00:00 2001 From: Sacha Ligthert Date: Thu, 18 Jan 2024 20:53:41 +0000 Subject: [PATCH] Move more into the pool interface, do conversions. --- functions.go | 22 ++++++++++++++++------ main.go | 37 ++++++++++++++++++++++++++++++++----- tcp_listener.go | 10 +++++----- types.go | 1 + 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/functions.go b/functions.go index 2e86a3d..6948e9b 100644 --- a/functions.go +++ b/functions.go @@ -6,29 +6,39 @@ import ( "github.com/umahmood/haversine" ) -func rad2deg(rad float64) float64 { +func (pool *Pool) rad2deg(rad float64) float64 { return rad * (180 / math.Pi) } -func calcDistance(lat_from float64, lon_from float64, lat_to float64, lon_to float64) float64 { +func (pool *Pool) 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 { +func (pool *Pool) calcMps(km float64, seconds float64) float64 { return (km * 1000) / seconds } -func calcKnots(mps float64) float64 { +func (pool *Pool) calcKnots(mps float64) float64 { return mps * 1.94384449 } -func calcKph(mps float64) float64 { +func (pool *Pool) calcKph(mps float64) float64 { return mps * 3.6 } -func calcMph(mps float64) float64 { +func (pool *Pool) calcMph(mps float64) float64 { return mps * 2.23694 } + +func (pool *Pool) coalition(side string) string { + if side == "Allies" { + return "REDFOR" + } else if side == "Enemies" { + return "BLUFOR" + } else { + return "GRNFOR" + } +} diff --git a/main.go b/main.go index 4b12af2..06e1665 100644 --- a/main.go +++ b/main.go @@ -11,20 +11,20 @@ import ( func main() { var pool Pool - pool.logger = log.New(os.Stdout, "[DCS] ", log.Ldate|log.Ltime) + pool.init() - 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.") + 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) + pool.logger.Println("Starting TCP listener on", pool.tcp_port) go pool.tcplistener() - pool.logger.Println("Starting HTTP listener on",pool.http_port) + 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.") @@ -33,3 +33,30 @@ func main() { os.Exit(1) } } + +func (pool *Pool) init() { + // Init logging stuff + pool.logger = log.New(os.Stdout, "[DCS] ", log.Ldate|log.Ltime) + + // Do unitTypes + pool.unitTypes = make(map[string]string) + pool.unitTypes["shilka"] = "aa" + pool.unitTypes["hoop op welvaart"] = "boat" + + ships := []string{"ALBATROS", "ara_vdm", "BDK-775", "CastleClass_01", "CV_1143_5", "CVN_71", "CVN_72", "CVN_73", "CVN_75", "Dry-cargo ship-1", "Dry-cargo ship-2", "ELNYA", "Forrestal", "HandyWind", "HarborTug", "Higgins_boat", "hms_invincible", "IMPROVED_KILO", "KILO", "KUZNECOW", "La_Combattante_II", "leander-gun-achilles", "leander-gun-andromeda", "leander-gun-ariadne", "leander-gun-condell", "leander-gun-lynch", "LHA_Tarawa", "LST_Mk2", "MOLNIYA", "MOSCOW", "NEUSTRASH", "PERRY", "PIOTR", "REZKY", "santafe", "Schnellboot_type_S130", "Seawise_Giant", "Ship_Tilde_Supply", "SOM", "speedboat", "Stennis", "TICONDEROG", "Type_052B", "Type_052C", "Type_054A", "Type_071", "Type_093", "Uboat_VIIC", "USS_Arleigh_Burke_IIa", "USS_Samuel_Chase", "VINSON", "ZWEZDNY"} + planes := []string{"A-10A", "A-10C_2", "A-10C", "A-20G", "A-50", "AJS37", "An-26B", "An-30M", "AV8BNA", "B-17G", "B-1B", "B-52H", "Bf-109K-4", "C-101CC", "C-101EB", "C-130", "C-17A", "C-47", "Christen Eagle II", "E-2C", "E-3A", "F-117A", "F-14A-135-GR", "F-14A", "F-14B", "F-15C", "F-15E", "F-15ESE", "F-16A", "F-16A MLU", "F-16C_50", "F-16C bl.50", "F-16C bl.52d", "F-4E", "F-5E-3", "F-5E", "F-86F Sabre", "FA-18A", "FA-18C_hornet", "FA-18C", "FW-190A8", "FW-190D9", "H-6J", "Hawk", "I-16", "IL-76MD", "IL-78M", "J-11A", "JF-17", "Ju-88A4", "KC130", "KC-135", "KC135MPRS", "KJ-2000", "L-39C", "L-39ZA", "M-2000C", "MB-339A", "MB-339APAN", "MiG-15bis", "MiG-19P", "MiG-21Bis", "MiG-23MLD", "MiG-25PD", "MiG-25RBT", "MiG-27K", "MiG-29A", "MiG-29G", "MiG-29S", "MiG-31", "Mirage 2000-5", "Mirage-F1BD", "Mirage-F1BE", "Mirage-F1B", "Mirage-F1BQ", "Mirage-F1C-200", "Mirage-F1CE", "Mirage-F1CG", "Mirage-F1CH", "Mirage-F1CJ", "Mirage-F1CK", "Mirage-F1C", "Mirage-F1CR", "Mirage-F1CT", "Mirage-F1CZ", "Mirage-F1DDA", "Mirage-F1EDA", "Mirage-F1ED", "Mirage-F1EE", "Mirage-F1EH", "Mirage-F1EQ", "Mirage-F1JA", "Mirage-F1M-CE", "Mirage-F1M-EE", "MosquitoFBMkVI", "MQ-9 Reaper", "P-47D-30bl1", "P-47D-30", "P-47D-40", "P-51D-30-NA", "P-51D", "RQ-1A Predator", "S-3B", "S-3B Tanker", "SpitfireLFMkIXCW", "SpitfireLFMkIX", "Su-17M4", "Su-24M", "Su-24MR", "Su-25", "Su-25T", "Su-25TM", "Su-27", "Su-30", "Su-33", "Su-34", "TF-51D", "Tornado GR4", "Tornado IDS", "Tu-142", "Tu-160", "Tu-22M3", "Tu-95MS", "WingLoong-I", "Yak-40", "Yak-52"} + helis := []string{"AH-1W", "AH-64A", "AH-64D_BLK_II", "AH-64D", "CH-47D", "CH-53E", "Ka-27", "Ka-50_3", "Ka-50", "Mi-24P", "Mi-24V", "Mi-26", "Mi-28N", "Mi-8MT", "OH-58D", "SA342L", "SA342Minigun", "SA342Mistral", "SA342M", "SH-3W", "SH-60B", "UH-1H", "UH-60A"} + ground := []string{"1L13 EWR", "2B11 mortar", "2S6 Tunguska", "55G6 EWR", "5p73 s-125 ln", "AA8", "AAV7", "Allies_Director", "ATMZ-5", "ATZ-10", "ATZ-5", "ATZ-60_Maz", "Bedford_MWD", "Blitz_36-6700A", "BMD-1", "BMP-1", "BMP-2", "BMP-3", "bofors40", "Boxcartrinity", "BRDM-2", "BTR-80", "BTR-82A", "BTR_D", "Bunker", "CCKW_353", "Centaur_IV", "Challenger2", "Chieftain_mk3", "Churchill_VII", "Coach a passenger", "Coach a platform", "Coach a tank blue", "Coach a tank yellow", "Coach cargo", "Coach cargo open", "Cobra", "Cromwell_IV", "Daimler_AC", "Dog Ear radar", "DR_50Ton_Flat_Wagon", "DRG_Class_86", "Electric locomotive", "Elefant_SdKfz_184", "ES44AH", "fire_control", "flak18", "flak30", "flak36", "flak37", "flak38", "flak41", "Flakscheinwerfer_37", "FPS-117 Dome", "FPS-117 ECS", "FPS-117", "FuMG-401", "FuSe-65", "GAZ-3307", "GAZ-3308", "GAZ-66", "generator_5i57", "Gepard", "German_covered_wagon_G10", "German_tank_wagon", "Grad_FDDM", "Grad-URAL", "Hawk cwar", "Hawk ln", "Hawk pcp", "Hawk sr", "Hawk tr", "HEMTT_C-RAM_Phalanx", "HEMTT TFFT", "HL_B8M1", "HL_DSHK", "HL_KORD", "HL_ZU-23", "Horch_901_typ_40_kfz_21", "house1arm", "house2arm", "houseA_arm", "HQ-7_LN_EO", "HQ-7_LN_SP", "HQ-7_STR_SP", "Hummer", "hy_launcher", "Igla manpad INS", "IKARUS Bus", "Infantry AK Ins", "Infantry AK", "Infantry AK ver2", "Infantry AK ver3", "Jagdpanther_G1", "JagdPz_IV", "JTAC", "KAMAZ Truck", "KDO_Mod40", "KrAZ6322", "KS-19", "Kub 1S91 str", "Kub 2P25 ln", "Kubelwagen_82", "Land_Rover_101_FC", "Land_Rover_109_S3", "LARC-V", "LAV-25", "LAZ Bus", "Leclerc", "LeFH_18-40-105", "Leopard1A3", "leopard-2A4", "leopard-2A4_trs", "Leopard-2A5", "Leopard-2", "LiAZ Bus", "Locomotive", "M1043 HMMWV Armament", "M1045 HMMWV TOW", "M1097 Avenger", "M-109", "M10_GMC", "M1126 Stryker ICV", "M1128 Stryker MGS", "M1134 Stryker ATGM", "M-113", "M12_GMC", "M1_37mm", "M-1 Abrams", "M2A1-105", "M2A1_halftrack", "M-2 Bradley", "M30_CC", "M45_Quadmount", "M48 Chaparral", "M4A4_Sherman_FF", "M4_Sherman", "M4_Tractor", "M-60", "M6 Linebacker", "M 818", "M8_Greyhound", "M978 HEMTT Tanker", "Marder", "Maschinensatz_33", "MAZ-6303", "MCV-80", "Merkava_Mk4", "MLRS FDDM", "MLRS", "MTLB", "NASAMS_Command_Post", "NASAMS_LN_B", "NASAMS_LN_C", "NASAMS_Radar_MPQ64F1", "Osa 9A33 ln", "outpost", "outpost_road", "p-19 s-125 sr", "Pak40", "Paratrooper AKS-74", "Paratrooper RPG-16", "Patriot AMG", "Patriot cp", "Patriot ECS", "Patriot EPP", "Patriot ln", "Patriot str", "PLZ05", "Predator GCS", "Predator TrojanSpirit", "PT_76", "Pz_IV_H", "Pz_V_Panther_G", "QF_37_AA", "rapier_fsa_blindfire_radar", "rapier_fsa_launcher", "rapier_fsa_optical_tracker_unit", "RD_75", "RLS_19J6", "Roland ADS", "Roland Radar", "RPC_5N62V", "S-200_Launcher", "S-300PS 40B6MD sr_19J6", "S-300PS 40B6MD sr", "S-300PS 40B6M tr", "S-300PS 54K6 cp", "S-300PS 5H63C 30H6_tr", "S-300PS 5P85C ln", "S-300PS 5P85D ln", "S-300PS 64H6E sr", "S-60_Type59_Artillery", "S_75M_Volhov", "S_75_ZIL", "SA-11 Buk CC 9S470M1", "SA-11 Buk LN 9A310M1", "SA-11 Buk SR 9S18M1", "SA-18 Igla comm", "SA-18 Igla manpad", "SA-18 Igla-S comm", "SA-18 Igla-S manpad", "Sandbox", "SAU 2-C9", "SAU Akatsia", "SAU Gvozdika", "SAU Msta", "Scud_B", "Sd_Kfz_234_2_Puma", "Sd_Kfz_251", "Sd_Kfz_2", "Sd_Kfz_7", "Silkworm_SR", "SK_C_28_naval_gun", "SKP-11", "Smerch_HE", "Smerch", "SNR_75V", "snr s-125 tr", "Soldier AK", "Soldier M249", "Soldier M4 GRG", "Soldier M4", "soldier_mauser98", "Soldier RPG", "Soldier stinger", "soldier_wwii_br_01", "soldier_wwii_us", "SON_9", "SpGH_Dana", "Stinger comm dsr", "Stinger comm", "Strela-10M3", "Strela-1 9P31", "Stug_III", "Stug_IV", "SturmPzIV", "Suidae", "T155_Firtina", "T-55", "T-72B3", "T-72B", "T-80UD", "T-90", "TACAN_beacon", "tacr2a", "Tankcartrinity", "Tetrarch", "Tiger_II_H", "Tiger_I", "Tigr_233036", "Tor 9A331", "TPZ", "Trolley bus", "tt_B8M1", "tt_DSHK", "tt_KORD", "tt_ZU-23", "TYPE-59", "TZ-22_KrAZ", "UAZ-469", "Uragan_BM-27", "Ural-375", "Ural-375 PBU", "Ural-375 ZU-23 Insurgent", "Ural-375 ZU-23", "Ural-4320-31", "Ural-4320 APA-5D", "Ural-4320T", "Ural ATsP-6", "v1_launcher", "VAB_Mephisto", "VAZ Car", "Vulcan", "Wellcarnsc", "Wespe124", "Willys_MB", "ZBD04A", "ZiL-131 APA-80", "ZIL-131 KUNG", "ZIL-135", "ZIL-4331", "ZSU-23-4 Shilka", "ZSU_57_2", "ZTZ96B", "ZU-23 Closed Insurgent", "ZU-23 Emplacement Closed", "ZU-23 Emplacement", "ZU-23 Insurgent"} + + pool.populateUnitTypes(ships, "boat") + pool.populateUnitTypes(planes, "plane") + pool.populateUnitTypes(helis, "heli") + pool.populateUnitTypes(ground, "armour") + +} + +func (pool *Pool) populateUnitTypes(units []string, name string) { + for _, i := range units { + pool.unitTypes[i] = name + } +} diff --git a/tcp_listener.go b/tcp_listener.go index 9782d23..4a10d5c 100644 --- a/tcp_listener.go +++ b/tcp_listener.go @@ -88,11 +88,11 @@ func (pool *Pool) handleRequest(conn net.Conn) { 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}) + SpeedInMps := pool.calcMps(pool.calcDistance(vvoor.Latitude, vvoor.Longitude, vna.Latitude, vna.Longitude), vvoor.AgeInSeconds-vna.AgeInSeconds) + SpeedInKnots := pool.calcKnots(SpeedInMps) + SpeedInKph := pool.calcKph(SpeedInMps) + SpeedInMph := pool.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, pool.rad2deg(vna.HeadingInRads), vna.PitchInRads, pool.rad2deg(vna.PitchInRads), vna.BankInRads, pool.rad2deg(vna.BankInRads), pool.coalition(vna.Coalition), pool.unitTypes[vna.Type]}) } } } diff --git a/types.go b/types.go index 5256409..0486d1f 100644 --- a/types.go +++ b/types.go @@ -11,6 +11,7 @@ type Pool struct { logger *log.Logger http_port string tcp_port string + unitTypes map[string]string } type json_units struct {