low_loop 0.3.2 → 0.4.0
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/lib/events/file_event.rb +1 -1
- data/lib/low_loop.rb +9 -5
- data/lib/support/config_loader.rb +7 -0
- data/lib/support/low_frame.rb +54 -0
- data/lib/version.rb +1 -1
- metadata +3 -3
- data/lib/support/config_support.rb +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3d9fa2d555e127ad470c1eb71573c076d3484b08b833e184aa5c052b0de5a6af
|
|
4
|
+
data.tar.gz: 7a56cc04f846739e4dd957f66d6d558e40ab98c1fc69408fe82a6675f6101dec
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1e6d8044eee477441056a43a895c1314cbe14e99d170244ed9d75477c50b614c5ea29a6ac2dd245172dab8870cdca6d70bfec5b9c4ca2065dce8468be5b12e8c
|
|
7
|
+
data.tar.gz: 1923f95b047d33bccd17fe9b48b63a84dfa80ac30497d25b5989bdffdf1ff50f554898b0e2a5d7fcdc4ceda175f02f4da6dff6dca0c60d94f063a5801d45e9f2
|
data/lib/events/file_event.rb
CHANGED
data/lib/low_loop.rb
CHANGED
|
@@ -10,19 +10,21 @@ require_relative 'factories/response_factory'
|
|
|
10
10
|
require_relative 'requests/request_parser'
|
|
11
11
|
require_relative 'responses/response_builder'
|
|
12
12
|
require_relative 'servers/file_server'
|
|
13
|
+
require_relative 'support/low_frame'
|
|
13
14
|
|
|
14
15
|
class LowLoop
|
|
15
16
|
include Observers
|
|
16
17
|
|
|
17
18
|
attr_reader :config
|
|
18
19
|
|
|
19
|
-
def initialize(config:, router: nil)
|
|
20
|
+
def initialize(config:, router: nil, renderer: nil, show_output: true)
|
|
20
21
|
@config = config
|
|
22
|
+
@frame = LowFrame.new(renderer:, fps: 30, show_output:)
|
|
21
23
|
|
|
22
|
-
observers << Low::FileServer.new(web_root: config.web_root, content_types: config.content_types)
|
|
23
|
-
observers << router if router
|
|
24
|
+
observers(Low::Events::RequestEvent) << Low::FileServer.new(web_root: config.web_root, content_types: config.content_types)
|
|
25
|
+
observers(Low::Events::RequestEvent) << router if router
|
|
24
26
|
|
|
25
|
-
observers.push(
|
|
27
|
+
observers.push(Low::Events::RequestEvent, action: :mirror) if config.mirror_mode
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
def start
|
|
@@ -34,9 +36,11 @@ class LowLoop
|
|
|
34
36
|
loop do
|
|
35
37
|
socket = server.accept
|
|
36
38
|
|
|
39
|
+
@frame.render if @frame.renderer
|
|
40
|
+
|
|
37
41
|
Fiber.schedule do
|
|
38
42
|
request = Low::RequestParser.parse(socket:, host: config.host, port: config.port)
|
|
39
|
-
response_event =
|
|
43
|
+
response_event = Low::Events::RequestEvent.take(request:)
|
|
40
44
|
response = response_event.response
|
|
41
45
|
|
|
42
46
|
Low::ResponseBuilder.respond(config:, socket:, response:)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'io/console'
|
|
4
|
+
|
|
5
|
+
class LowFrame
|
|
6
|
+
attr_reader :screen_size, :renderer
|
|
7
|
+
|
|
8
|
+
def initialize(renderer:, fps: 30, show_output: true)
|
|
9
|
+
@renderer = renderer
|
|
10
|
+
@show_output = show_output
|
|
11
|
+
|
|
12
|
+
# Millisecond duration of each frame. We lose a small amount of precision dropping the decimal.
|
|
13
|
+
@frame_time = ((1.0 / fps) * 1000).to_i
|
|
14
|
+
|
|
15
|
+
row_count, column_count = IO.console.winsize
|
|
16
|
+
@screen_size = { row_count:, column_count: }
|
|
17
|
+
|
|
18
|
+
@last_frame = nil
|
|
19
|
+
|
|
20
|
+
setup if renderer && show_output
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def render
|
|
24
|
+
if @last_frame.nil? || (current_timestamp - @last_frame) >= @frame_time
|
|
25
|
+
system 'clear' if @show_output
|
|
26
|
+
|
|
27
|
+
@last_frame = current_timestamp
|
|
28
|
+
@renderer.render(screen_size: @screen_size)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def setup
|
|
33
|
+
print "\e[?25l" # Hide cursor.
|
|
34
|
+
system 'clear'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def reset
|
|
38
|
+
print "\e[?25h\e[0m" # Show cursor and reset colors.
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def exit
|
|
42
|
+
trap('INT') {
|
|
43
|
+
reset
|
|
44
|
+
system 'clear'
|
|
45
|
+
exit
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def current_timestamp
|
|
52
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: low_loop
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -124,7 +124,7 @@ files:
|
|
|
124
124
|
- lib/servers/file_server.rb
|
|
125
125
|
- lib/states/file_state.rb
|
|
126
126
|
- lib/support/config_loader.rb
|
|
127
|
-
- lib/support/
|
|
127
|
+
- lib/support/low_frame.rb
|
|
128
128
|
- lib/version.rb
|
|
129
129
|
homepage: https://github.com/low-rb/low_loop
|
|
130
130
|
licenses: []
|
|
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
145
145
|
- !ruby/object:Gem::Version
|
|
146
146
|
version: '0'
|
|
147
147
|
requirements: []
|
|
148
|
-
rubygems_version:
|
|
148
|
+
rubygems_version: 4.0.6
|
|
149
149
|
specification_version: 4
|
|
150
150
|
summary: An event-driven event loop
|
|
151
151
|
test_files: []
|