em-midori 0.0.9.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/em-midori.rb +4 -1
- data/lib/em-midori/api.rb +3 -5
- data/lib/em-midori/configure.rb +9 -0
- data/lib/em-midori/const.rb +6 -0
- data/lib/em-midori/core_ext/configurable.rb +32 -0
- data/lib/em-midori/runner.rb +51 -0
- data/lib/em-midori/server.rb +1 -1
- data/lib/em-midori/version.rb +2 -1
- metadata +5 -3
- data/lib/em-midori/em_midori.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6d10050423b7536832c5ef0b7d94ead6bb713a8
|
4
|
+
data.tar.gz: 949d87027c3feaece3ce05637b91569f37056978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69ee80d129f50421830b10c57dc3712211892d9cb5e047422e7b90e7b8bf2eb2bb01fb44b03c0d1d7b6424e1843a8861be7fa040d383b73dffa9cb22ca7bce5d
|
7
|
+
data.tar.gz: 1b97321457676354063864beb257e0b8ce43e5e873beb34b1dd9a08e6db0e00471ae3b99dc440071f3c561e984a608b215b0ad41f02fae2d6b4ea0d0c8dfeffb
|
data/lib/em-midori.rb
CHANGED
@@ -4,15 +4,16 @@ require 'eventmachine'
|
|
4
4
|
require 'fiber'
|
5
5
|
require 'logger'
|
6
6
|
require 'http/parser'
|
7
|
+
require 'socket'
|
7
8
|
|
8
9
|
require_relative 'em-midori/version'
|
10
|
+
require_relative 'em-midori/core_ext/configurable'
|
9
11
|
require_relative 'em-midori/string'
|
10
12
|
require_relative 'em-midori/promise'
|
11
13
|
require_relative 'em-midori/const'
|
12
14
|
require_relative 'em-midori/define_class'
|
13
15
|
require_relative 'em-midori/error'
|
14
16
|
require_relative 'em-midori/clean_room'
|
15
|
-
require_relative 'em-midori/em_midori'
|
16
17
|
require_relative 'em-midori/request'
|
17
18
|
require_relative 'em-midori/response'
|
18
19
|
require_relative 'em-midori/api'
|
@@ -21,3 +22,5 @@ require_relative 'em-midori/server'
|
|
21
22
|
require_relative 'em-midori/websocket'
|
22
23
|
require_relative 'em-midori/eventsource'
|
23
24
|
require_relative 'em-midori/middleware'
|
25
|
+
require_relative 'em-midori/configure'
|
26
|
+
require_relative 'em-midori/runner'
|
data/lib/em-midori/api.rb
CHANGED
@@ -235,11 +235,9 @@ class Midori::API
|
|
235
235
|
# @param [String] key 'Sec-WebSocket-Key' in request header
|
236
236
|
# @return [Hash] header
|
237
237
|
def websocket_header(key)
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
'Sec-WebSocket-Accept' => Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
|
242
|
-
}
|
238
|
+
header = Midori::Const::WEBSOCKET_HEADER.clone
|
239
|
+
header['Sec-WebSocket-Accept'] = Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
|
240
|
+
header
|
243
241
|
end
|
244
242
|
|
245
243
|
# Helper block for defining methods in APIs
|
data/lib/em-midori/const.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Midori
|
2
|
+
# Provide flexible configuration for Midori Server
|
3
|
+
module Configurable
|
4
|
+
# Modified from Sinatra
|
5
|
+
# Sets an option to the given value.
|
6
|
+
# @param [Symbol] option the name of config
|
7
|
+
# @param [Object] value value to the name
|
8
|
+
# @param [Boolean] read_only Generate option= method or not
|
9
|
+
def set(option, value = (not_set = true), read_only = false)
|
10
|
+
raise ArgumentError if not_set
|
11
|
+
|
12
|
+
setter = proc { |val| set option, val }
|
13
|
+
getter = proc { value }
|
14
|
+
|
15
|
+
define_singleton("#{option}=", setter) unless read_only
|
16
|
+
define_singleton(option, getter)
|
17
|
+
define_singleton("#{option}?", "!!#{option}") unless method_defined? "#{option}?"
|
18
|
+
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Dynamically defines a method on settings.
|
25
|
+
def define_singleton(name, content = Proc.new)
|
26
|
+
singleton_class.class_eval do
|
27
|
+
undef_method(name) if method_defined? name
|
28
|
+
String === content ? class_eval("def #{name}() #{content}; end") : define_method(name, &content)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
##
|
2
|
+
# Abstract runner class to control instance of Midori Server
|
3
|
+
class Midori::Runner
|
4
|
+
attr_reader :bind, :port
|
5
|
+
|
6
|
+
def initialize(api, configure = Midori::Configure)
|
7
|
+
@logger = configure.logger
|
8
|
+
@bind = configure.bind
|
9
|
+
@port = configure.port
|
10
|
+
|
11
|
+
@api = api
|
12
|
+
end
|
13
|
+
|
14
|
+
# Get Midori server whether running
|
15
|
+
# @return [Boolean] [true] running
|
16
|
+
# @return [Boolean] [false] not running
|
17
|
+
def running?
|
18
|
+
!!@server_signature
|
19
|
+
end
|
20
|
+
|
21
|
+
# Start the Midori server
|
22
|
+
# @note This is an async method, but no callback
|
23
|
+
def start
|
24
|
+
return if running?
|
25
|
+
|
26
|
+
EventMachine.set_simultaneous_accept_count(40) unless RUBY_PLATFORM == 'java'
|
27
|
+
EventMachine.run do
|
28
|
+
@logger.info "Midori #{Midori::VERSION} is now running on #{bind}:#{port}".blue
|
29
|
+
@server_signature = EventMachine.start_server bind, port, Midori::Server, @api, @logger
|
30
|
+
end
|
31
|
+
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
# Stop the Midori server
|
36
|
+
# @note This is an async method, but no callback
|
37
|
+
# @return [Boolean] [true] stop successfully
|
38
|
+
# @return [Boolean] [false] nothing to stop
|
39
|
+
def stop
|
40
|
+
if running?
|
41
|
+
@logger.info 'Goodbye Midori'.blue
|
42
|
+
EventMachine.stop_server(@server_signature)
|
43
|
+
@server_signature = nil
|
44
|
+
EM.stop
|
45
|
+
true
|
46
|
+
else
|
47
|
+
@logger.error 'Midori Server has NOT been started'.red
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/em-midori/server.rb
CHANGED
@@ -32,7 +32,7 @@ module Midori::Server
|
|
32
32
|
receive_new_request(data)
|
33
33
|
end
|
34
34
|
now_time = Time.now
|
35
|
-
@logger.info "#{@request.ip} - - \"#{@request.method} #{@request.path}\" #{@response.status} #{(now_time.to_f - start_time.to_f).round(6)}".green
|
35
|
+
@logger.info "#{@request.ip} - - \"#{@request.method} #{@request.path} HTTP/#{@request.protocol.join('.')}\" #{@response.status} #{(now_time.to_f - start_time.to_f).round(6)}".green
|
36
36
|
end)
|
37
37
|
end.call
|
38
38
|
end
|
data/lib/em-midori/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-midori
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HeckPsi Lab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -55,9 +55,10 @@ files:
|
|
55
55
|
- lib/em-midori.rb
|
56
56
|
- lib/em-midori/api.rb
|
57
57
|
- lib/em-midori/clean_room.rb
|
58
|
+
- lib/em-midori/configure.rb
|
58
59
|
- lib/em-midori/const.rb
|
60
|
+
- lib/em-midori/core_ext/configurable.rb
|
59
61
|
- lib/em-midori/define_class.rb
|
60
|
-
- lib/em-midori/em_midori.rb
|
61
62
|
- lib/em-midori/error.rb
|
62
63
|
- lib/em-midori/eventsource.rb
|
63
64
|
- lib/em-midori/middleware.rb
|
@@ -65,6 +66,7 @@ files:
|
|
65
66
|
- lib/em-midori/request.rb
|
66
67
|
- lib/em-midori/response.rb
|
67
68
|
- lib/em-midori/route.rb
|
69
|
+
- lib/em-midori/runner.rb
|
68
70
|
- lib/em-midori/server.rb
|
69
71
|
- lib/em-midori/string.rb
|
70
72
|
- lib/em-midori/version.rb
|
data/lib/em-midori/em_midori.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# The main module of Midori
|
3
|
-
module Midori
|
4
|
-
@logger = ::Logger.new(STDOUT)
|
5
|
-
# Start Midori Server instance
|
6
|
-
# @note This is an async method, but no callback
|
7
|
-
# @param [Class] api Inherit from +Midori::API+
|
8
|
-
# @param [String] ip The ip address to bind
|
9
|
-
# @param [Fixnum] port Port number
|
10
|
-
# @param [Logger] logger Ruby logger
|
11
|
-
# @return [nil] nil
|
12
|
-
def self.run(api = Midori::API, ip = '127.0.0.1', port = 8081, logger = ::Logger.new(STDOUT))
|
13
|
-
@logger = logger
|
14
|
-
EventMachine.set_simultaneous_accept_count(40) unless RUBY_PLATFORM == "java"
|
15
|
-
EventMachine.run do
|
16
|
-
@logger.info "Midori #{Midori::VERSION} is now running on #{ip}:#{port}".blue
|
17
|
-
@midori_server = EventMachine.start_server ip, port, Midori::Server, api, logger
|
18
|
-
end
|
19
|
-
nil
|
20
|
-
end
|
21
|
-
|
22
|
-
# Stop Midori Server instance
|
23
|
-
# @note This is an async method, but no callback
|
24
|
-
# @return [Boolean] [true] stop successfully
|
25
|
-
# @return [Boolean] [false] nothing to stop
|
26
|
-
def self.stop
|
27
|
-
if @midori_server.nil?
|
28
|
-
@logger.error 'Midori Server has NOT been started'.red
|
29
|
-
return false
|
30
|
-
else
|
31
|
-
EventMachine.stop_server(@midori_server)
|
32
|
-
@midori_server = nil
|
33
|
-
@logger.info 'Goodbye Midori'.blue
|
34
|
-
return true
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|