tac_scribe 0.7.0-java → 0.7.5-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 74ae9992c2a1db103b6b19fbfcfb298c505e8654138d0db9d673cc8fbf7651a2
4
- data.tar.gz: 104b3949d73dead8bdcbef52d85b4e56ad9c04a54a0fdb7338847018ccb95082
3
+ metadata.gz: 837f8e89a7c07cb133bd15855473059b7a630cdd6341f5b89576d3774efc05d0
4
+ data.tar.gz: 402347e87bbaeb545530b2aa34209fda090853c5edc7fbc83aef0d88b0cd4ad7
5
5
  SHA512:
6
- metadata.gz: 3df16168564a673864ce8eca754c76ace35221ef411473ea9056ff7f9af8420927b20d1eec751f3b3c6021264e14db1ad84131f1632cc6a351805b592a89de6b
7
- data.tar.gz: 8595fe735b69f74f012f1c64ec4888ce129f63ac142e3e17b073e0119238a0b414e32d13f8764f912ff26bd616c5a33facf50af3f7cabc1ad7eb20c910821dad
6
+ metadata.gz: 7a0e6b5b9d0d58c6c6fe080994a404e0e2d7bdbade7efc10187fb817055e7381e8d7225620d2d8e98f24470c1834bf7e8e2643194fdf22e31d433995513ea13b
7
+ data.tar.gz: c9e8978b9fe187d4a38d194ba2d4a763e3d84e8c703a430f5a463632f0c1c19c1aff1982b8834e5144e30aef909f156b86c8e8b6c85f3f46084ea096f74340ab
@@ -4,28 +4,56 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [0.6.2]
7
+ ## [Unreleased]
8
+
9
+ ## [0.7.5] - 2020-08-12
10
+ ### Changed
11
+ - Various fixes related to airfield population using CinC
12
+
13
+ ## [0.7.4] - 2020-08-10
14
+ ### Changed
15
+ - Fix typo that was causing all objects to be registered as airbases
16
+
17
+ ## [0.7.3] - 2020-08-10
18
+ ### Changed
19
+ - Bug fixes after adding CinC support
20
+
21
+ ## [0.7.2] - 2020-08-10
22
+ ### Added
23
+ - Support for "Commander-In-Chief" to get airbase information
24
+
25
+ ## [0.7.1] - 2020-08-10
26
+ ### Changed
27
+ - Fixed issue where "name" fields were not being populated
28
+ if airfields were not being loaded first
29
+
30
+ ## [0.7.0] - 2020-07-5
31
+ ### Changed
32
+ - Synced Lat/Lon calculations with DCS and fixed issue where
33
+ calculations were incorrect if only one value was updated
34
+
35
+ ## [0.6.2] - 2020-04-19
8
36
  ### Changed
9
37
  - Fixed typo causing app to fail
10
38
 
11
- ## [0.6.1]
39
+ ## [0.6.1] - 2020-04-19
12
40
  ### Changed
13
41
  - Test build for gem issue
14
42
 
15
- ## [0.6.0]
43
+ ## [0.6.0] - 2020-04-19
16
44
  ### Added
17
45
  - Calculates and stores speed of units
18
46
 
19
47
  ### Fixed
20
48
  - Made more robust against failures and more logging messages
21
49
 
22
- ## [0.5.0]
50
+ ## [0.5.0] - 2020-03-17
23
51
  ### Changed
24
52
  - Added missing db column to migration file
25
53
  - Clear the cache on server restart
26
54
  - Add more info to logging
27
55
 
28
- ## [0.4.0]
56
+ ## [0.4.0] - 2020-03-13
29
57
  ### Changed
30
58
  - Switch to periodic writing to the database
31
59
 
@@ -10,6 +10,8 @@ options = {
10
10
  tacview_port: 42_674,
11
11
  tacview_password: nil,
12
12
  tacview_client_name: 'TacScribe',
13
+ cinc_enabled: false,
14
+ cinc_port: 9000,
13
15
  db_host: 'localhost',
14
16
  db_port: 5432,
15
17
  db_name: 'tac_scribe',
@@ -43,6 +45,17 @@ OptionParser.new do |opts|
43
45
  options[:tacview_client_name] = v
44
46
  end
45
47
 
48
+ opts.separator "\nCommander-In-Chief Options"
49
+ opts.on('-b', '--enable-cinc',
50
+ 'Is Cinc enabled? (Default: false)') do |_v|
51
+ options[:cinc_enabled] = true
52
+ end
53
+ opts.on('-m', '--cinc-port=port',
54
+ 'Cinc server port (Default: 9001)') do |v|
55
+ options[:cinc_port] = v
56
+ end
57
+
58
+
46
59
  opts.separator "\nDatabase Options"
47
60
  opts.on('-o', '--db-host=host',
48
61
  'Postgresql server hostname / IP (Default: localhost)') do |v|
@@ -92,6 +105,11 @@ end.parse!
92
105
  exit(1)
93
106
  end
94
107
 
108
+ if(options[:populate_airfields] && options[:cinc_enabled])
109
+ puts "You cannot populate airfields AND enable Cinc at the same time"
110
+ exit(1)
111
+ end
112
+
95
113
  TacScribe::Daemon.new(
96
114
  tacview_host: options[:tacview_host],
97
115
  tacview_port: options[:tacview_port],
@@ -105,5 +123,7 @@ TacScribe::Daemon.new(
105
123
  verbose_logging: options[:verbose],
106
124
  thread_count: options[:threads].to_i,
107
125
  populate_airfields: options[:populate_airfields],
108
- whitelist: options[:whitelist]
126
+ whitelist: options[:whitelist],
127
+ cinc_enabled: options[:cinc_enabled],
128
+ cinc_port: options[:cinc_port]
109
129
  ).start_processing
@@ -23,11 +23,12 @@ module TacScribe
23
23
  end
24
24
 
25
25
  def write_object(object)
26
- if reference_latitude != 0 || reference_longitude != 0
26
+ if (reference_latitude != 0 || reference_longitude != 0) && object[:type] != "Ground+Static+Aerodrome"
27
27
  localize_position(object)
28
28
  end
29
29
 
30
30
  id = object[:object_id]
31
+ id ||= object[:id].to_s
31
32
  object[:id] = id
32
33
 
33
34
  cache_object = @@cache[id]
@@ -39,7 +40,9 @@ module TacScribe
39
40
  end
40
41
 
41
42
  # https://wiki.hoggitworld.com/view/DCS_singleton_coalition
42
- if object[:coalition]
43
+ # Tacview returns a string, CinC returns an integer so we
44
+ # only do the conversion if there is a string.
45
+ if object[:coalition] && object[:coalition].is_a?(String)
43
46
  object[:coalition] = case object[:coalition]
44
47
  when 'Enemies' # Enemies is Bluefor
45
48
  2
@@ -50,7 +53,15 @@ module TacScribe
50
53
  end
51
54
  end
52
55
 
53
- if cache_object
56
+ if object[:type] == "Ground+Static+Aerodrome"
57
+ object[:heading] = object[:wind_heading] ? object[:wind_heading] : -1
58
+ object[:speed] = object[:wind_speed] ? object[:wind_speed] : 0
59
+ object.delete(:wind_heading)
60
+ object.delete(:wind_speed)
61
+ object.delete(:category)
62
+ cache_object = object
63
+ # No-op
64
+ elsif cache_object
54
65
  object[:heading] = calculate_heading(cache_object, object)
55
66
  object[:speed] = calculate_speed(cache_object, object)
56
67
  cache_object.merge!(object)
@@ -60,6 +71,10 @@ module TacScribe
60
71
  cache_object = object
61
72
  end
62
73
 
74
+ # Hack to make sure the :name field is present so that it is included
75
+ # in the SQL
76
+ cache_object[:name] = nil unless cache_object.has_key?(:name)
77
+
63
78
  if !cache_object.key?(:altitude) || !cache_object[:altitude]
64
79
  cache_object[:altitude] = 0
65
80
  end
@@ -3,6 +3,7 @@
3
3
  require 'json'
4
4
  require 'tacview_client'
5
5
  require 'set'
6
+ require 'cinc'
6
7
  require_relative 'datastore'
7
8
  require_relative 'cache'
8
9
  require_relative 'event_queue'
@@ -15,7 +16,7 @@ module TacScribe
15
16
  def initialize(db_host:, db_port:, db_name:, db_user:, db_password:,
16
17
  tacview_host:, tacview_port:, tacview_password:,
17
18
  tacview_client_name:, verbose_logging:, thread_count:,
18
- populate_airfields:, whitelist: nil)
19
+ populate_airfields:, whitelist: nil, cinc_enabled:, cinc_port:)
19
20
  Datastore.instance.configure do |config|
20
21
  config.host = db_host
21
22
  config.port = db_port
@@ -34,13 +35,20 @@ module TacScribe
34
35
  @threads = {}
35
36
  @whitelist = Set.new(IO.read(whitelist).split) if whitelist
36
37
 
37
- @client = TacviewClient::Client.new(
38
+ @tacview_client = TacviewClient::Client.new(
38
39
  host: tacview_host,
39
40
  port: tacview_port,
40
41
  password: tacview_password,
41
42
  processor: @event_queue,
42
43
  client_name: tacview_client_name
43
44
  )
45
+
46
+ if cinc_enabled
47
+ @cinc_client = Cinc::Client.new(
48
+ host: tacview_host,
49
+ port: cinc_port
50
+ )
51
+ end
44
52
  end
45
53
 
46
54
  # Starts processing and reconnects if the client was disconnected.
@@ -55,13 +63,14 @@ module TacScribe
55
63
  Datastore.instance.truncate_table
56
64
  Cache.instance.clear
57
65
  start_processing_threads
66
+ start_cinc_thread
58
67
  start_db_sync_thread
59
68
  start_reporting_thread
60
69
  populate_airfields if @populate_airfields
61
70
  @threads.each_pair do |key, _value|
62
71
  puts "#{key} thread started"
63
72
  end
64
- @client.connect
73
+ @tacview_client.connect
65
74
  # If this code is executed it means we have been disconnected without
66
75
  # exceptions. We will still sleep to stop a retry storm. Just not as
67
76
  # long.
@@ -103,6 +112,31 @@ module TacScribe
103
112
  @threads[:processing] = event_processor_thread
104
113
  end
105
114
 
115
+ def start_cinc_thread
116
+ return unless @cinc_client
117
+ cinc_thread = Thread.new do
118
+ loop do
119
+ @cinc_client.connect
120
+ while true
121
+ @cinc_client.get_airbases.each do |airbase|
122
+ airbase[:type] = "Ground+Static+Aerodrome"
123
+ @event_queue.update_object Hash[airbase.map{ |k, v| [k.to_sym, v] }]
124
+ end
125
+ sleep 60
126
+ end
127
+ rescue StandardError => e
128
+ puts 'Exception in cinc thread'
129
+ puts e.message
130
+ puts e.backtrace
131
+ sleep 30
132
+ next
133
+ end
134
+ end
135
+
136
+ cinc_thread.name = 'Cinc Processor'
137
+ @threads[:cinc] = cinc_thread
138
+ end
139
+
106
140
  def start_db_sync_thread
107
141
  db_write_thread = Thread.new do
108
142
  loop do
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TacScribe
4
- VERSION = '0.7.0'
4
+ VERSION = '0.7.5'
5
5
  end
@@ -43,6 +43,7 @@ Gem::Specification.new do |spec|
43
43
  spec.add_dependency 'haversine', '~>0.3'
44
44
  spec.add_dependency 'sequel-postgis-georuby', '0.1.2'
45
45
  spec.add_dependency 'tacview_client', '~>0.1'
46
+ spec.add_dependency 'cinc', '~>0.1'
46
47
 
47
48
  spec.add_development_dependency 'bundler', '~> 2.0'
48
49
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -50,4 +51,5 @@ Gem::Specification.new do |spec|
50
51
  spec.add_development_dependency 'rubocop', '~>0.73'
51
52
  spec.add_development_dependency 'simplecov', '~>0.17'
52
53
  spec.add_development_dependency 'yard', '~>0.9'
54
+ spec.add_development_dependency 'pry-byebug', '~>3.9'
53
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tac_scribe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.5
5
5
  platform: java
6
6
  authors:
7
7
  - Jeffrey Jones
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-05 00:00:00.000000000 Z
11
+ date: 2020-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.1'
111
+ - !ruby/object:Gem::Dependency
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.1'
117
+ name: cinc
118
+ prerelease: false
119
+ type: :runtime
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.1'
111
125
  - !ruby/object:Gem::Dependency
112
126
  requirement: !ruby/object:Gem::Requirement
113
127
  requirements:
@@ -192,6 +206,20 @@ dependencies:
192
206
  - - "~>"
193
207
  - !ruby/object:Gem::Version
194
208
  version: '0.9'
209
+ - !ruby/object:Gem::Dependency
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '3.9'
215
+ name: pry-byebug
216
+ prerelease: false
217
+ type: :development
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '3.9'
195
223
  description: Write Tacview data to PostGIS database
196
224
  email:
197
225
  - jeff@jones.be