glottis 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: 13566b8129e3820451ffdbeceac479488ee0c7c5
4
- data.tar.gz: c35a76b88803bcd3441f13dd67cd513e62fbd1ff
3
+ metadata.gz: 2884f76bb99f4bdec3dd3f76388f9938767ae903
4
+ data.tar.gz: 7c765d282c0826521fb4eb2bc9eb3e638676935c
5
5
  SHA512:
6
- metadata.gz: 6c03142ff57480a928bb64ee71a0065dc9fbfcde3fd595111f6978c8633ad54fdccc2b38e146f2fdb6c65f59fc04bb9f077a049d91bbb99d1508ca05afb884f3
7
- data.tar.gz: a49d9b2a97e3fd40764964c5ec6dba856235cdd499e22553f8909b7727a868a1c3bacd20c398dfa41d49d48f8a5e4702b90cc7877248b91e9f421444841a9bcf
6
+ metadata.gz: 1c37f77138f8fd920f199023a2cc41091b55df36dabb27901491e0dfc14e9815d033af075c4dc378fcdc8b287bf9dfbdbce281e287cf2714b84a1367c13e7fd5
7
+ data.tar.gz: 83e91d51ae13a21ab278c7e9697e5e55dffed2c488cb5c2a794830c266f873e581781a05ca42feaccdcf9e01da32d0f1bc762c05fb15b97f951d19d55993bd4a
data/README.md CHANGED
@@ -17,3 +17,5 @@ To install this gem onto your local machine, run `bundle exec rake install`.
17
17
  ## Contributing
18
18
 
19
19
  Bug reports and pull requests are welcome on GitHub at https://github.com/maxdeliso/glottis.
20
+
21
+ [![Gem Version](https://badge.fury.io/rb/glottis.svg)](https://badge.fury.io/rb/glottis)
@@ -2,7 +2,8 @@ require 'thread'
2
2
  require 'logger'
3
3
  require 'glottis/handlers/console_input_handler'
4
4
  require 'glottis/handlers/console_output_handler'
5
- require 'glottis/handlers/remote_handler'
5
+ require 'glottis/handlers/remote_input_handler'
6
+ require 'glottis/handlers/remote_output_handler'
6
7
 
7
8
  module Glottis
8
9
  # Client class, used to interact with the host specified.
@@ -26,7 +27,8 @@ module Glottis
26
27
  @handlers = [
27
28
  Handlers::ConsoleInputHandler.new(@outgoing),
28
29
  Handlers::ConsoleOutputHandler.new(@incoming),
29
- Handlers::RemoteHandler.new(@outgoing, @incoming, @host, @port)
30
+ Handlers::RemoteInputHandler.new(@incoming, @host, @port),
31
+ Handlers::RemoteOutputHandler.new(@outgoing, @host, @port)
30
32
  ]
31
33
 
32
34
  @handlers.each(&:join)
@@ -0,0 +1,53 @@
1
+ require 'logger'
2
+ require 'uri'
3
+ require 'net/http'
4
+ require 'json'
5
+
6
+ module Glottis
7
+ module Handlers
8
+ # This class manages a TCP connection with a valyx server.
9
+ class RemoteInputHandler < Thread
10
+ PROTOCOL = 'http'.freeze
11
+ STREAM_DELIMITER = "\0".freeze
12
+ READ_TIMEOUT = 3600 # this needs to be high
13
+ REMOTE_PATHS = {
14
+ get_message_stream: '/api/messages/stream'
15
+ }.freeze
16
+
17
+ def initialize(incoming, host, port)
18
+ @incoming = incoming
19
+ @host = host
20
+ @port = port
21
+
22
+ setup_http
23
+
24
+ super do
25
+ @http.start
26
+ read_loop
27
+ end
28
+ end
29
+
30
+ def cleanup
31
+ @http.finish if @http.started?
32
+ end
33
+
34
+ private
35
+
36
+ def setup_http
37
+ @http = Net::HTTP.new(@host, @port)
38
+ @http.open_timeout = 1
39
+ @http.read_timeout = READ_TIMEOUT
40
+ end
41
+
42
+ def read_loop
43
+ Client.logger.info('reading stream...')
44
+ @http.get(REMOTE_PATHS.fetch(:get_message_stream)) do |chunk|
45
+ Client.logger.debug("got chunk of length: #{chunk.length}")
46
+ chunk.split(STREAM_DELIMITER).each do |msg_data|
47
+ @incoming.push(JSON.parse(msg_data))
48
+ end # each
49
+ end # get
50
+ end # read_loop
51
+ end # RemoteInputHandler
52
+ end # Handlers
53
+ end # Glottis
@@ -6,22 +6,19 @@ require 'json'
6
6
  module Glottis
7
7
  module Handlers
8
8
  # This class manages a TCP connection with a valyx server.
9
- class RemoteHandler < Thread
9
+ class RemoteOutputHandler < Thread
10
10
  POLL_INTERVAL = 0.1
11
11
  PROTOCOL = 'http'.freeze
12
12
 
13
13
  REMOTE_PATHS = {
14
14
  get_session: '/api/session',
15
- get_messages: '/api/messages',
16
15
  post_message: '/api/message'
17
16
  }.freeze
18
17
 
19
- def initialize(outgoing, incoming, host, port)
18
+ def initialize(outgoing, host, port)
20
19
  @outgoing = outgoing
21
- @incoming = incoming
22
20
  @host = host
23
21
  @port = port
24
- @received_count = 0
25
22
 
26
23
  setup_http
27
24
 
@@ -30,10 +27,7 @@ module Glottis
30
27
  request_session
31
28
 
32
29
  loop do
33
- request_messages
34
30
  send_queued
35
-
36
- sleep POLL_INTERVAL
37
31
  end
38
32
  end
39
33
  end
@@ -49,7 +43,6 @@ module Glottis
49
43
  # TODO: make these configurable somewhere
50
44
  @http.open_timeout = 1
51
45
  @http.read_timeout = 1
52
- @http.continue_timeout = 1
53
46
  end
54
47
 
55
48
  def request_session
@@ -94,30 +87,21 @@ module Glottis
94
87
  process_new_messages(messages_req.body)
95
88
  end
96
89
 
97
- def process_new_messages(messages_data)
98
- new_messages = JSON.parse(messages_data)
99
- Client.logger.debug("received #{new_messages.size} new messages")
100
- @received_count += new_messages.size
101
- new_messages.each { |msg| @incoming.push(msg) }
102
- end
103
-
104
90
  def send_queued
105
- while @outgoing.size > 0
106
- Client.logger.info("processing message with #{@outgoing.size} messages outgoing")
91
+ Client.logger.info("processing message with #{@outgoing.size} messages outgoing")
107
92
 
108
- message_data = {
109
- from: @sid,
110
- to: '*',
111
- msg: @outgoing.pop
112
- }.to_json
93
+ message_data = {
94
+ from: @sid,
95
+ to: '*',
96
+ msg: @outgoing.pop
97
+ }.to_json
113
98
 
114
- post_req = @http.post(REMOTE_PATHS.fetch(:post_message), message_data)
99
+ post_req = @http.post(REMOTE_PATHS.fetch(:post_message), message_data)
115
100
 
116
- if_not_ok(post_req) do |err|
117
- Client.logger.warn("failed to post message: #{err}")
118
- end
101
+ if_not_ok(post_req) do |err|
102
+ Client.logger.warn("failed to post message: #{message_data} #{err}")
119
103
  end
120
104
  end # send_queued
121
- end # RemoteHandler
105
+ end # RemoteOutputHandler
122
106
  end # Handlers
123
107
  end # Glottis
@@ -1,4 +1,4 @@
1
1
  # Autogenerated version module.
2
2
  module Glottis
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glottis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max DeLiso
@@ -118,7 +118,8 @@ files:
118
118
  - lib/glottis/exceptions/user_exited_exception.rb
119
119
  - lib/glottis/handlers/console_input_handler.rb
120
120
  - lib/glottis/handlers/console_output_handler.rb
121
- - lib/glottis/handlers/remote_handler.rb
121
+ - lib/glottis/handlers/remote_input_handler.rb
122
+ - lib/glottis/handlers/remote_output_handler.rb
122
123
  - lib/glottis/version.rb
123
124
  homepage: https://github.com/maxdeliso/glottis
124
125
  licenses: