Class: Narou::AppServer

Inherits:
Sinatra::Base
  • Object
show all
Defined in:
lib/web/appserver.rb

Constant Summary collapse

BOOKMARKLET_MODE =

ウィジット関係


%w(download insert_button)
ALLOW_HOSTS =
[].tap do |hosts|
  Downloader.load_settings.each do |s|
    hosts << s["domain"]
  end
  hosts.freeze
end
@@request_reboot =
false
@@already_update_system =
false
@@gem_update_last_log =
""

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAppServer

Returns a new instance of AppServer.



200
201
202
203
204
# File 'lib/web/appserver.rb', line 200

def initialize
  super
  puts_hello_messages
  start_device_ejectable_event
end

Class Method Details

.create_address(user_port = nil) ⇒ Object

サーバのアドレスを生成

portは初回起動時にランダムで設定する。次回からは同じ設定を引き継ぐ。 bindは自分で設定する場合は narou s server-bind=address で行う。 bindは設定しなかった場合は起動したPCのプライベートIPアドレスが設定される。 この場合はLAN内からアクセス出来る。 bindがlocalhostの場合は実際には127.0.0.1で処理される。(起動したPCでしか アクセス出来ない) 0.0.0.0 を指定した場合はアクセスに制限がかからない(外部からアクセス可能) セキュリティ上オススメ出来ない。



165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/web/appserver.rb', line 165

def self.create_address(user_port = nil)
  global_setting = Inventory.load("global_setting", :global)
  port, bind = global_setting["server-port"], global_setting["server-bind"]
  port = user_port if user_port
  ipaddress = my_ipaddress
  unless port
    port = rand(4000..65000)
    global_setting["server-port"] = port
    global_setting.save
  end
  bind = "127.0.0.1" if bind == "localhost"
  host = bind ? bind : ipaddress
  set :port, port
  set :bind, host
  {
    host: host,
    port: port
  }
end

.my_ipaddressObject

自分のIPアドレス取得

参考:qiita.com/saltheads/items/cc49fcf2af37cb277c4f



190
191
192
193
194
195
196
197
198
# File 'lib/web/appserver.rb', line 190

def self.my_ipaddress
  @@__ipaddress ||= -> {
    udp = UDPSocket.new
    udp.connect("128.0.0.0", 7)
    adrs = Socket.unpack_sockaddr_in(udp.getsockname)[1]
    udp.close
    adrs
  }.call
end

.push_serverObject



141
142
143
# File 'lib/web/appserver.rb', line 141

def self.push_server
  @@push_server
end

.push_server=(server) ⇒ Object



137
138
139
# File 'lib/web/appserver.rb', line 137

def self.push_server=(server)
  @@push_server = server
end

.request_rebootObject



145
146
147
# File 'lib/web/appserver.rb', line 145

def self.request_reboot
  @@request_reboot = true
end

.request_reboot?Boolean

Returns:

  • (Boolean)


149
150
151
# File 'lib/web/appserver.rb', line 149

def self.request_reboot?
  @@request_reboot
end

Instance Method Details

#puts_hello_messagesObject



206
207
208
# File 'lib/web/appserver.rb', line 206

def puts_hello_messages
  puts "<white>Narou.rb version #{::Version}</white>".termcolor
end

#start_device_ejectable_eventObject



210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/web/appserver.rb', line 210

def start_device_ejectable_event
  return unless Device.support_eject?
  Thread.new do
    loop do
      if @@push_server.connections.count > 0
        device = Narou.get_device
        @@push_server.send_all(:"device.ejectable" => device && device.ejectable?)
      end

      sleep 2
    end
  end
end