tac_scribe 0.7.1 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '099cde73f8075ae6ce15559bb91931382992c4182f78656beab7846adb7a7ba4'
4
- data.tar.gz: ffd9790d498398f6bb4777d50fecb2aeb426af5484d766be55c3f04aa18934cb
3
+ metadata.gz: 76f453b7dfa20a53d06f6ba792814502878629b83bb700eb64e25a8da02b0e4b
4
+ data.tar.gz: a6c043ed66acb31ef14a8c486a8566e801e8c5774b3914c59ad4e830c698bcff
5
5
  SHA512:
6
- metadata.gz: 74ff0905ea7250214c73287bd17b85d82002c3bcaa74c13618a7887a20298ba0b4e0f2b54476a4cc36f0f2d579dced61c63b345e4fbe4892de91ac235343c16d
7
- data.tar.gz: 607fb4c5f77035783ec06fe0382aad023d45e26c3b08dc163a2293e957a3937c298107dd80613dc74b5e21d04283fa557bdbcfddee4fd9bf179c068a844d8a5f
6
+ metadata.gz: 6ff217c229d9a42e58a7ae37195bb37c20e282b78145d8c90aab130ac50c7353de912cbad0cb4892d6d987f65e11fe8dbccceb4a6a364ca3ac5daf07acbfa00e
7
+ data.tar.gz: 6395e585cf49f4260960ef06098af879090dd79ba83edaa57d1ad41a548c29072332a8a1f1b492ccfb4bbb979a8e645c9e6914bd7a55e2bcc64c2a37869e826c
@@ -4,38 +4,60 @@ 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.7.1]
7
+ ## [Unreleased]
8
+
9
+ ## [0.7.6] - 2020-08-13
10
+ ### Changed
11
+ - Fix the default port number
12
+
13
+ ## [0.7.5] - 2020-08-12
14
+ ### Changed
15
+ - Various fixes related to airfield population using CinC
16
+
17
+ ## [0.7.4] - 2020-08-10
18
+ ### Changed
19
+ - Fix typo that was causing all objects to be registered as airbases
20
+
21
+ ## [0.7.3] - 2020-08-10
22
+ ### Changed
23
+ - Bug fixes after adding CinC support
24
+
25
+ ## [0.7.2] - 2020-08-10
26
+ ### Added
27
+ - Support for "Commander-In-Chief" to get airbase information
28
+
29
+ ## [0.7.1] - 2020-08-10
8
30
  ### Changed
9
31
  - Fixed issue where "name" fields were not being populated
10
32
  if airfields were not being loaded first
11
33
 
12
- ## [0.7.0]
34
+ ## [0.7.0] - 2020-07-5
13
35
  ### Changed
14
36
  - Synced Lat/Lon calculations with DCS and fixed issue where
15
37
  calculations were incorrect if only one value was updated
16
38
 
17
- ## [0.6.2]
39
+ ## [0.6.2] - 2020-04-19
18
40
  ### Changed
19
41
  - Fixed typo causing app to fail
20
42
 
21
- ## [0.6.1]
43
+ ## [0.6.1] - 2020-04-19
22
44
  ### Changed
23
45
  - Test build for gem issue
24
46
 
25
- ## [0.6.0]
47
+ ## [0.6.0] - 2020-04-19
26
48
  ### Added
27
49
  - Calculates and stores speed of units
28
50
 
29
51
  ### Fixed
30
52
  - Made more robust against failures and more logging messages
31
53
 
32
- ## [0.5.0]
54
+ ## [0.5.0] - 2020-03-17
33
55
  ### Changed
34
56
  - Added missing db column to migration file
35
57
  - Clear the cache on server restart
36
58
  - Add more info to logging
37
59
 
38
- ## [0.4.0]
60
+ ## [0.4.0] - 2020-03-13
39
61
  ### Changed
40
62
  - Switch to periodic writing to the database
41
63
 
@@ -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: 9001,
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
@@ -68,9 +68,6 @@ module TacScribe
68
68
  def update_object(event, time)
69
69
  return if ignore_unit?(event)
70
70
 
71
- # Hack to make sure the :name field is present so that it is included
72
- # in the SQL
73
- event[:name] = "" unless event.has_key?(:name)
74
71
  event[:game_time] = time
75
72
 
76
73
  self.events_processed += 1
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TacScribe
4
- VERSION = '0.7.1'
4
+ VERSION = '0.7.6'
5
5
  end
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.add_dependency 'activerecord-jdbcpostgresql-adapter'
33
33
  else
34
34
  spec.add_dependency 'pg', '~>1.1'
35
+ spec.add_development_dependency 'pry-byebug', '~>3.9'
35
36
  end
36
37
 
37
38
  spec.add_dependency 'georuby', '~>2.5'
@@ -43,6 +44,7 @@ Gem::Specification.new do |spec|
43
44
  spec.add_dependency 'haversine', '~>0.3'
44
45
  spec.add_dependency 'sequel-postgis-georuby', '0.1.2'
45
46
  spec.add_dependency 'tacview_client', '~>0.1'
47
+ spec.add_dependency 'cinc', '~>0.1'
46
48
 
47
49
  spec.add_development_dependency 'bundler', '~> 2.0'
48
50
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -50,5 +52,4 @@ Gem::Specification.new do |spec|
50
52
  spec.add_development_dependency 'rubocop', '~>0.73'
51
53
  spec.add_development_dependency 'simplecov', '~>0.17'
52
54
  spec.add_development_dependency 'yard', '~>0.9'
53
- spec.add_development_dependency 'pry-byebug', '~>3.9'
54
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.1
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeffrey Jones
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-09 00:00:00.000000000 Z
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry-byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.9'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: georuby
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: cinc
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.1'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.1'
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: bundler
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -192,20 +220,6 @@ dependencies:
192
220
  - - "~>"
193
221
  - !ruby/object:Gem::Version
194
222
  version: '0.9'
195
- - !ruby/object:Gem::Dependency
196
- name: pry-byebug
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '3.9'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '3.9'
209
223
  description: Write Tacview data to PostGIS database
210
224
  email:
211
225
  - jeff@jones.be