gt06_server 0.1.5 → 0.1.6
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 +4 -4
- data/Gemfile +1 -3
- data/Gemfile.lock +4 -29
- data/LICENSE +20 -0
- data/README.md +49 -1
- data/_config.yml +1 -0
- data/gt06_server.gemspec +5 -5
- data/lib/gt06_server.rb +1 -0
- data/lib/gt06_server/crc.rb +1 -0
- data/lib/gt06_server/messages/alarm_packet.rb +1 -0
- data/lib/gt06_server/messages/date_time_information.rb +1 -0
- data/lib/gt06_server/messages/gps_information.rb +10 -1
- data/lib/gt06_server/messages/gps_query_address.rb +1 -0
- data/lib/gt06_server/messages/lbs_information.rb +1 -0
- data/lib/gt06_server/messages/location_data.rb +1 -0
- data/lib/gt06_server/messages/login_message.rb +1 -0
- data/lib/gt06_server/messages/status_information.rb +1 -0
- data/lib/gt06_server/packet.rb +1 -0
- data/lib/gt06_server/protocol.rb +1 -0
- data/lib/gt06_server/server.rb +36 -39
- data/lib/gt06_server/session.rb +9 -7
- data/lib/gt06_server/session_sweeper.rb +20 -14
- data/lib/gt06_server/version.rb +2 -1
- data/lib/libcrc16.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cee3e4400c1b60c86ccb4629c86300b646a6a76a
|
|
4
|
+
data.tar.gz: 7f913c5eda74b44085cc70b631af583e32aa143d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6f8b6500efbb1144cea48af2efb24d05a8b7f4f7ee64470bb1cef8024ab27b913f3f91f2bbccbcb75467762c2f28575d8a5fb70e4e91009bc1496f899763835c
|
|
7
|
+
data.tar.gz: 631680d9ccaad0c0a7846a0dc835e76f16a35d24af6ebb928d7ab4326edc2a8fc92a93639eaf05dada8840a45dca0ce4d451b251c2957cdc7dd9302e4879b4dc
|
data/Gemfile
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
source 'https://rubygems.org'
|
|
3
4
|
|
|
4
5
|
# Specify your gem's dependencies in gt06_server.gemspec
|
|
@@ -16,7 +17,4 @@ group :development do
|
|
|
16
17
|
gem 'pry-byebug'
|
|
17
18
|
gem 'rubocop', require: false
|
|
18
19
|
gem 'reek', require: false
|
|
19
|
-
gem 'capistrano'
|
|
20
|
-
gem 'capistrano-rbenv'
|
|
21
|
-
gem 'capistrano-bundler'
|
|
22
20
|
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
gt06_server (0.1.
|
|
4
|
+
gt06_server (0.1.6)
|
|
5
5
|
bindata (~> 2.3)
|
|
6
6
|
celluloid-io (~> 0.17.3)
|
|
7
7
|
concurrent-ruby (~> 1.0)
|
|
@@ -9,8 +9,6 @@ PATH
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
airbrussh (1.0.2)
|
|
13
|
-
sshkit (>= 1.6.1, != 1.7.0)
|
|
14
12
|
ast (2.3.0)
|
|
15
13
|
axiom-types (0.1.1)
|
|
16
14
|
descendants_tracker (~> 0.0.4)
|
|
@@ -18,19 +16,6 @@ GEM
|
|
|
18
16
|
thread_safe (~> 0.3, >= 0.3.1)
|
|
19
17
|
bindata (2.3.4)
|
|
20
18
|
byebug (9.0.5)
|
|
21
|
-
capistrano (3.5.0)
|
|
22
|
-
airbrussh (>= 1.0.0)
|
|
23
|
-
capistrano-harrow
|
|
24
|
-
i18n
|
|
25
|
-
rake (>= 10.0.0)
|
|
26
|
-
sshkit (>= 1.9.0)
|
|
27
|
-
capistrano-bundler (1.1.4)
|
|
28
|
-
capistrano (~> 3.1)
|
|
29
|
-
sshkit (~> 1.2)
|
|
30
|
-
capistrano-harrow (0.5.2)
|
|
31
|
-
capistrano-rbenv (2.0.4)
|
|
32
|
-
capistrano (~> 3.1)
|
|
33
|
-
sshkit (~> 1.3)
|
|
34
19
|
celluloid (0.17.3)
|
|
35
20
|
celluloid-essentials
|
|
36
21
|
celluloid-extras
|
|
@@ -59,23 +44,19 @@ GEM
|
|
|
59
44
|
coderay (1.1.1)
|
|
60
45
|
coercible (1.0.0)
|
|
61
46
|
descendants_tracker (~> 0.0.1)
|
|
62
|
-
concurrent-ruby (1.0.
|
|
47
|
+
concurrent-ruby (1.0.5)
|
|
63
48
|
descendants_tracker (0.0.4)
|
|
64
49
|
thread_safe (~> 0.3, >= 0.3.1)
|
|
65
50
|
docile (1.1.5)
|
|
66
51
|
equalizer (0.0.11)
|
|
67
52
|
ffi (1.9.10-java)
|
|
68
53
|
hitimes (1.2.4)
|
|
69
|
-
i18n (0.7.0)
|
|
70
54
|
ice_nine (0.11.2)
|
|
71
55
|
json (1.8.3)
|
|
72
56
|
json (1.8.3-java)
|
|
73
57
|
method_source (0.8.2)
|
|
74
58
|
minitest (5.9.0)
|
|
75
|
-
|
|
76
|
-
net-ssh (>= 2.6.5)
|
|
77
|
-
net-ssh (3.2.0)
|
|
78
|
-
nio4r (1.2.1)
|
|
59
|
+
nio4r (2.1.0)
|
|
79
60
|
parser (2.3.1.2)
|
|
80
61
|
ast (~> 2.2)
|
|
81
62
|
powerpack (0.1.1)
|
|
@@ -112,9 +93,6 @@ GEM
|
|
|
112
93
|
slop (3.6.0)
|
|
113
94
|
spoon (0.0.4)
|
|
114
95
|
ffi
|
|
115
|
-
sshkit (1.11.1)
|
|
116
|
-
net-scp (>= 1.1.2)
|
|
117
|
-
net-ssh (>= 2.8.0)
|
|
118
96
|
thread_safe (0.3.5)
|
|
119
97
|
thread_safe (0.3.5-java)
|
|
120
98
|
timers (4.1.2)
|
|
@@ -132,9 +110,6 @@ PLATFORMS
|
|
|
132
110
|
|
|
133
111
|
DEPENDENCIES
|
|
134
112
|
bundler (~> 1.11)
|
|
135
|
-
capistrano
|
|
136
|
-
capistrano-bundler
|
|
137
|
-
capistrano-rbenv
|
|
138
113
|
codeclimate-test-reporter
|
|
139
114
|
gt06_server!
|
|
140
115
|
minitest
|
|
@@ -145,4 +120,4 @@ DEPENDENCIES
|
|
|
145
120
|
rubocop
|
|
146
121
|
|
|
147
122
|
BUNDLED WITH
|
|
148
|
-
1.
|
|
123
|
+
1.14.3
|
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2017 CoolElvis
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
|
@@ -33,7 +33,7 @@ sleep
|
|
|
33
33
|
|
|
34
34
|
````
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Status message:
|
|
37
37
|
|
|
38
38
|
````ruby
|
|
39
39
|
{
|
|
@@ -60,5 +60,53 @@ The message is a Hash like:
|
|
|
60
60
|
:serial_number => 48
|
|
61
61
|
}
|
|
62
62
|
````
|
|
63
|
+
|
|
64
|
+
Location message:
|
|
65
|
+
```ruby
|
|
66
|
+
{
|
|
67
|
+
:packet_length => 31,
|
|
68
|
+
:protocol_number => 18,
|
|
69
|
+
:message_type => :location_data,
|
|
70
|
+
:information_content =>
|
|
71
|
+
{
|
|
72
|
+
:date_time => '2011-08-29 17:46:16 +0400',
|
|
73
|
+
:gps =>
|
|
74
|
+
{
|
|
75
|
+
:quantity_satellites =>
|
|
76
|
+
{
|
|
77
|
+
:length_gps => 12, :satellites => 12
|
|
78
|
+
},
|
|
79
|
+
:latitude => 23.111668333333334,
|
|
80
|
+
:longitude => 114.409285,
|
|
81
|
+
:speed => 0,
|
|
82
|
+
:course_status =>
|
|
83
|
+
{
|
|
84
|
+
:null_1 => 0,
|
|
85
|
+
:null_2 => 0,
|
|
86
|
+
:gps_positioning_type => 0,
|
|
87
|
+
:is_gps_positioning => 1,
|
|
88
|
+
:longitude_bit => 0,
|
|
89
|
+
:latitude_bit => 1,
|
|
90
|
+
:course => 143
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
:lbs =>
|
|
94
|
+
{
|
|
95
|
+
:mcc => 460,
|
|
96
|
+
:mnc => 0,
|
|
97
|
+
:lac => 10365,
|
|
98
|
+
:cell_id => 8120
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
:serial_number => 3
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
63
105
|
The content of 'information_content' depends on 'message_type'
|
|
64
106
|
See lib/gt06_server/messages for details
|
|
107
|
+
|
|
108
|
+
###Copyright
|
|
109
|
+
|
|
110
|
+
Copyright (c) 2016 CoolElvis and contributors.
|
|
111
|
+
|
|
112
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
data/_config.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
theme: jekyll-theme-minimal
|
data/gt06_server.gemspec
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
3
3
|
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
|
4
4
|
require 'gt06_server/version'
|
|
5
5
|
|
|
@@ -9,10 +9,10 @@ Gem::Specification.new do |spec|
|
|
|
9
9
|
spec.authors = ['CoolElvis']
|
|
10
10
|
spec.email = ['elvisplus2@gmail.com']
|
|
11
11
|
|
|
12
|
-
spec.summary
|
|
13
|
-
spec.description
|
|
14
|
-
spec.homepage
|
|
15
|
-
spec.license
|
|
12
|
+
spec.summary = 'TCP server for gt06(TK100) gps tracker'
|
|
13
|
+
spec.description = 'TCP server for gt06(TK100) gps tracker'
|
|
14
|
+
spec.homepage = 'https://github.com/CoolElvis/gt06_server'
|
|
15
|
+
spec.license = 'MIT'
|
|
16
16
|
|
|
17
17
|
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.' unless spec.respond_to?(:metadata)
|
|
18
18
|
|
data/lib/gt06_server.rb
CHANGED
data/lib/gt06_server/crc.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Gt06Server
|
|
3
4
|
module Messages
|
|
4
5
|
class GpsInformation < BinData::Record
|
|
@@ -14,7 +15,7 @@ module Gt06Server
|
|
|
14
15
|
uint32be :coord
|
|
15
16
|
|
|
16
17
|
def get
|
|
17
|
-
coord.to_f / 30_000 / 60
|
|
18
|
+
(coord.to_f / 30_000 / 60).round(6)
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
# TODO
|
|
@@ -39,5 +40,13 @@ module Gt06Server
|
|
|
39
40
|
bit10 :course
|
|
40
41
|
end
|
|
41
42
|
end
|
|
43
|
+
|
|
44
|
+
def lat
|
|
45
|
+
latitude_bit ? latitude : (latitude * -1)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def lon
|
|
49
|
+
longitude_bit ? longitude : (longitude * -1)
|
|
50
|
+
end
|
|
42
51
|
end
|
|
43
52
|
end
|
data/lib/gt06_server/packet.rb
CHANGED
data/lib/gt06_server/protocol.rb
CHANGED
data/lib/gt06_server/server.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
require 'celluloid/current'
|
|
3
4
|
require 'celluloid/io'
|
|
4
5
|
require 'logger'
|
|
@@ -11,41 +12,30 @@ module Gt06Server
|
|
|
11
12
|
attr_reader :host, :port, :sessions
|
|
12
13
|
finalizer :shutdown
|
|
13
14
|
|
|
14
|
-
class RunError < StandardError;
|
|
15
|
-
end
|
|
15
|
+
class RunError < StandardError; end
|
|
16
16
|
|
|
17
17
|
# @param [String] host
|
|
18
18
|
# @param [Integer] port
|
|
19
|
-
# @param [
|
|
19
|
+
# @param [Hash] options
|
|
20
20
|
# @yields [Hash] information_content of packet
|
|
21
21
|
def self.run(host, port, options: {}, &block)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if actor&.alive?
|
|
22
|
+
if Celluloid::Actor['Gt06Server']&.alive?
|
|
25
23
|
raise RunError, 'Attempt to run more than one the Gt06Server'
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
Gt06Server::Server.supervise(
|
|
29
27
|
as: 'Gt06Server',
|
|
30
|
-
args: [host, port, block, options: {logger: Logger.new(STDOUT)}.merge(options)
|
|
28
|
+
args: [host, port, block, options: { logger: Logger.new(STDOUT) }.merge(options)]
|
|
31
29
|
)
|
|
32
30
|
end
|
|
33
31
|
|
|
34
|
-
def initialize(host, port, handler, options: {}
|
|
35
|
-
@logger
|
|
36
|
-
@host
|
|
37
|
-
@port
|
|
38
|
-
|
|
32
|
+
def initialize(host, port, handler, options: {})
|
|
33
|
+
@logger = options.fetch(:logger, Logger.new(STDOUT))
|
|
34
|
+
@host = host
|
|
35
|
+
@port = port
|
|
39
36
|
@sessions = Concurrent::Map.new
|
|
40
37
|
|
|
41
|
-
|
|
42
|
-
@sessions,
|
|
43
|
-
options.fetch(:session_timeout, nil),
|
|
44
|
-
interval: options.fetch(:sweep_interval, nil),
|
|
45
|
-
logger: @logger
|
|
46
|
-
)
|
|
47
|
-
sweeper.run
|
|
48
|
-
|
|
38
|
+
sessions_sweeper_run(@sessions, options)
|
|
49
39
|
async.run handler
|
|
50
40
|
end
|
|
51
41
|
|
|
@@ -53,32 +43,39 @@ module Gt06Server
|
|
|
53
43
|
|
|
54
44
|
def run(handler)
|
|
55
45
|
@server = TCPServer.new(@host, @port)
|
|
56
|
-
@logger.info "Gt06Server has been run on host:#{@host} port: #{@port}
|
|
46
|
+
@logger.info "Gt06Server has been run on host:#{@host} port: #{@port}"
|
|
57
47
|
loop { async.handle_connection(@server.accept, handler) }
|
|
58
48
|
end
|
|
59
49
|
|
|
50
|
+
def sessions_sweeper_run(sessions, options)
|
|
51
|
+
SessionSweeper.new(
|
|
52
|
+
sessions,
|
|
53
|
+
timeout: options.fetch(:session_timeout, nil),
|
|
54
|
+
interval: options.fetch(:sweep_interval, nil),
|
|
55
|
+
logger: options.fetch(:logger, Logger.new(STDOUT))
|
|
56
|
+
).run
|
|
57
|
+
end
|
|
58
|
+
|
|
60
59
|
def shutdown
|
|
61
|
-
@server
|
|
60
|
+
@server&.close
|
|
62
61
|
end
|
|
63
62
|
|
|
64
63
|
def handle_connection(socket, handler)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
@logger.info "Disconnect #{addr}"
|
|
81
|
-
end
|
|
64
|
+
addr = socket.peeraddr
|
|
65
|
+
@logger.info "Connect #{addr}"
|
|
66
|
+
|
|
67
|
+
session = Session.new(socket, logger: @logger)
|
|
68
|
+
@sessions[session.object_id] = session
|
|
69
|
+
|
|
70
|
+
session.run(&handler)
|
|
71
|
+
rescue EOFError => exception
|
|
72
|
+
@logger.warn "#{addr} #{exception.message}"
|
|
73
|
+
rescue StandardError => exception
|
|
74
|
+
@logger.error exception.message
|
|
75
|
+
@logger.error exception.backtrace
|
|
76
|
+
ensure
|
|
77
|
+
socket&.close
|
|
78
|
+
@logger.info "Disconnect #{addr}"
|
|
82
79
|
end
|
|
83
80
|
end
|
|
84
81
|
end
|
data/lib/gt06_server/session.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
|
|
2
3
|
module Gt06Server
|
|
3
4
|
class Session
|
|
4
5
|
class SessionError < RuntimeError; end
|
|
@@ -6,11 +7,12 @@ module Gt06Server
|
|
|
6
7
|
attr_reader :terminal_id, :socket, :info, :logger, :addr
|
|
7
8
|
|
|
8
9
|
# @param socket [TCPSocket]
|
|
10
|
+
# @param logger [Logger]
|
|
9
11
|
def initialize(socket, logger: Logger.new(STDOUT))
|
|
10
12
|
@socket = socket
|
|
11
13
|
@addr = socket.peeraddr
|
|
12
14
|
@terminal_id = ''
|
|
13
|
-
@info = { received_count: 0, sent_count: 0, last_received_at: Time.now}
|
|
15
|
+
@info = { received_count: 0, sent_count: 0, last_received_at: Time.now }
|
|
14
16
|
@logger = logger
|
|
15
17
|
|
|
16
18
|
logger.debug 'New session has been created'
|
|
@@ -50,14 +52,14 @@ module Gt06Server
|
|
|
50
52
|
@info[:received_count] += 1
|
|
51
53
|
@info[:last_received_at] = Time.now
|
|
52
54
|
|
|
53
|
-
|
|
54
|
-
block.yield({terminal_id: @terminal_id}.merge!(pack.payload.snapshot))
|
|
55
|
+
block.yield({ terminal_id: @terminal_id }.merge!(pack.payload.snapshot))
|
|
55
56
|
|
|
56
57
|
ack_pack = Protocol.replay_on(pack)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
|
|
59
|
+
return unless ack_pack
|
|
60
|
+
|
|
61
|
+
@socket.write(ack_pack.to_binary_s)
|
|
62
|
+
@info[:sent_count] += 1
|
|
61
63
|
end
|
|
62
64
|
end
|
|
63
65
|
end
|
|
@@ -1,29 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'concurrent'
|
|
4
|
+
|
|
2
5
|
module Gt06Server
|
|
3
6
|
class SessionSweeper
|
|
4
|
-
attr_reader :sessions
|
|
7
|
+
attr_reader :sessions, :info, :timeout, :interval, :logger
|
|
8
|
+
|
|
9
|
+
DEFAULT_TIMEOUT = 60
|
|
10
|
+
DEFAULT_INTERVAL = 30
|
|
5
11
|
|
|
6
12
|
# @param sessions[Array<Session>]
|
|
7
|
-
def initialize(sessions, timeout
|
|
13
|
+
def initialize(sessions, timeout: DEFAULT_TIMEOUT, interval: DEFAULT_INTERVAL, logger: Logger.new(STDOUT))
|
|
8
14
|
@sessions = sessions
|
|
9
|
-
@timeout = timeout
|
|
10
|
-
@interval = interval
|
|
11
|
-
@info = {killed: 0, live:0, count:0}
|
|
15
|
+
@timeout = timeout
|
|
16
|
+
@interval = interval
|
|
17
|
+
@info = { killed: 0, live: 0, count: 0 }
|
|
12
18
|
@logger = logger
|
|
13
19
|
end
|
|
14
20
|
|
|
15
21
|
def run
|
|
16
22
|
timer = Concurrent::TimerTask.new(execution_interval: @interval) do
|
|
17
23
|
@sessions.each_pair do |key, session|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
@info[:killed] += 1
|
|
24
|
-
@sessions.delete(key)
|
|
25
|
-
@logger.debug "Session #{session.inspect} has been killed"
|
|
24
|
+
next unless expired_session?(session)
|
|
25
|
+
|
|
26
|
+
unless session.socket.closed?
|
|
27
|
+
session.socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, [1, 0].pack('ii'))
|
|
28
|
+
session.socket.close
|
|
26
29
|
end
|
|
30
|
+
|
|
31
|
+
@info[:killed] += 1
|
|
32
|
+
@sessions.delete(key)
|
|
33
|
+
@logger.debug "Session #{session.inspect} has been killed"
|
|
27
34
|
end
|
|
28
35
|
|
|
29
36
|
@info[:live] = @sessions.size
|
|
@@ -58,6 +65,5 @@ module Gt06Server
|
|
|
58
65
|
end
|
|
59
66
|
end
|
|
60
67
|
end
|
|
61
|
-
|
|
62
68
|
end
|
|
63
69
|
end
|
data/lib/gt06_server/version.rb
CHANGED
data/lib/libcrc16.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gt06_server
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- CoolElvis
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-11-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bindata
|
|
@@ -95,9 +95,11 @@ files:
|
|
|
95
95
|
- ".travis.yml"
|
|
96
96
|
- Gemfile
|
|
97
97
|
- Gemfile.lock
|
|
98
|
+
- LICENSE
|
|
98
99
|
- Note.md
|
|
99
100
|
- README.md
|
|
100
101
|
- Rakefile
|
|
102
|
+
- _config.yml
|
|
101
103
|
- gt06_server.gemspec
|
|
102
104
|
- lib/ext/CMakeLists.txt
|
|
103
105
|
- lib/ext/crc_16.cpp
|