atome 0.1.00006 → 0.1.00009
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/exe/atome +19 -4
- data/lib/atome/version.rb +1 -1
- data/vendor/assets/index.rb +153 -122
- data/vendor/assets/server/atome_server.rb +11 -315
- metadata +3 -31
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f4b48cdeb89c228abfd54f7ff8a986bf57b856ee448248f8bc72d350f2102f92
|
|
4
|
+
data.tar.gz: 684ee3dbfb0c2f8a630203b70c76fee2c4bbc38e668236eb39ce4031fce07ad0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: abce3a0481ef173040bff4c5753ddc0da3429b62b9d25c6b60b3dd87751b582d3c917fb84ed56b97b684fe8066ff99882f7be57a1530529f32eee02666fa2781
|
|
7
|
+
data.tar.gz: e1addd8946eed935d0becf3b612969387f6107271819913fc62a8fe0f633ed13f485974195f77f74f28c03e95c412af39171336efcde841683e3ee84337eef29
|
data/exe/atome
CHANGED
|
@@ -3,7 +3,21 @@
|
|
|
3
3
|
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
|
|
6
|
-
def
|
|
6
|
+
def delete_all(dir)
|
|
7
|
+
Dir.foreach(dir) do |e|
|
|
8
|
+
# Don't bother with . and ..
|
|
9
|
+
next if %w[. ..].include? e
|
|
10
|
+
fullname = dir + File::Separator + e
|
|
11
|
+
if FileTest.directory?(fullname)
|
|
12
|
+
delete_all(fullname)
|
|
13
|
+
else
|
|
14
|
+
File.delete(fullname)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
Dir.delete(dir)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def run(option = :browser, location = nil)
|
|
7
21
|
case option
|
|
8
22
|
when :server
|
|
9
23
|
require 'atome'
|
|
@@ -19,17 +33,15 @@ def run option = :browser, location = nil
|
|
|
19
33
|
`cd ./build;open index.html`
|
|
20
34
|
end
|
|
21
35
|
when :osx
|
|
22
|
-
puts `pwd`
|
|
23
36
|
require 'webview_ruby'
|
|
24
37
|
webview = WebviewRuby::Webview.new
|
|
25
|
-
webview.set_title(
|
|
38
|
+
webview.set_title('atome')
|
|
26
39
|
webview.set_size(480, 360)
|
|
27
40
|
if location
|
|
28
41
|
webview.navigate("file:/#{`pwd`}/#{location}/build/index.html")
|
|
29
42
|
else
|
|
30
43
|
webview.navigate("file:#{`pwd`.chomp}/build/index.html")
|
|
31
44
|
end
|
|
32
|
-
|
|
33
45
|
webview.run
|
|
34
46
|
else
|
|
35
47
|
# nothing for now
|
|
@@ -40,6 +52,8 @@ end
|
|
|
40
52
|
case ARGV[0]
|
|
41
53
|
when 'create'
|
|
42
54
|
project_name = ARGV[1]
|
|
55
|
+
force = ARGV[2]
|
|
56
|
+
delete_all(project_name) if force == 'force'
|
|
43
57
|
Dir.mkdir project_name.to_s
|
|
44
58
|
current_path = `pwd`.chomp
|
|
45
59
|
gem_assets_location = File.join(File.dirname(__FILE__), '../vendor/assets/')
|
|
@@ -53,6 +67,7 @@ when 'create'
|
|
|
53
67
|
end
|
|
54
68
|
# now run the rake task to build the needed libraries (atome, renderers, etc...)
|
|
55
69
|
`cd #{app_builder_helpers};rake system_builder #{current_path}/#{project_name}`
|
|
70
|
+
run(:server, project_name)
|
|
56
71
|
when 'run'
|
|
57
72
|
case ARGV[1]
|
|
58
73
|
when 'android'
|
data/lib/atome/version.rb
CHANGED
data/vendor/assets/index.rb
CHANGED
|
@@ -1,135 +1,166 @@
|
|
|
1
|
-
def toto(e)
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# def toto(e)
|
|
2
|
+
# e.prevent
|
|
3
|
+
# e.on.inner_text = "Super Clicked!"
|
|
4
|
+
# end
|
|
5
|
+
#
|
|
6
|
+
# $document.on(:mousedown, "#good") do |e|
|
|
7
|
+
# toto(e)
|
|
8
|
+
# end
|
|
9
|
+
# $document.on(:touchstart, "#good") do |e|
|
|
10
|
+
# toto(e)
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# verif = <<-STR
|
|
14
|
+
# $document.ready do
|
|
15
|
+
# DOM {
|
|
16
|
+
# div.info {
|
|
17
|
+
# span.red "Opal eval cooked up!"
|
|
18
|
+
# }
|
|
19
|
+
# }.append_to($document.body)
|
|
20
|
+
# end
|
|
21
|
+
# STR
|
|
22
|
+
#
|
|
23
|
+
# eval(verif)
|
|
24
|
+
#
|
|
25
|
+
#
|
|
26
|
+
# $document.body.style.apply {
|
|
27
|
+
# background color: 'black'
|
|
28
|
+
# color 'orange'
|
|
29
|
+
# font family: 'Verdana'
|
|
30
|
+
# }
|
|
31
|
+
# $document.ready do
|
|
32
|
+
# DOM {
|
|
33
|
+
# div.info {
|
|
34
|
+
# i=0
|
|
35
|
+
# while i< 20
|
|
36
|
+
# i+=1
|
|
37
|
+
# span(id: "good").red "Opal cooked up, click me #{i}"
|
|
38
|
+
# div(id: "hook").red "lllll#{i} --"
|
|
39
|
+
# end
|
|
40
|
+
# }
|
|
41
|
+
# }.append_to($document["user_view"])
|
|
42
|
+
#
|
|
43
|
+
# # alert($document.body.id)
|
|
44
|
+
# # $document.getElementById("hook").style.color("red")
|
|
45
|
+
# # bb=$document.find('header')
|
|
46
|
+
# bb=`document.getElementById('hook')`
|
|
47
|
+
# # a= $document.get_element_by_id(:hook)
|
|
48
|
+
# a= $document[:hook]
|
|
49
|
+
#
|
|
50
|
+
# elem = $document.at_css(".red").style(color: :yellow)
|
|
51
|
+
#
|
|
52
|
+
# $document.on :click do |e|
|
|
53
|
+
# elem.style(color: :yellowgreen)
|
|
54
|
+
# # elem.style.apply {
|
|
55
|
+
# # background color: 'blue'
|
|
56
|
+
# # color 'green'
|
|
57
|
+
# # font family: 'Verdana'
|
|
58
|
+
# # }
|
|
59
|
+
# # a.style.apply {
|
|
60
|
+
# # background color: 'red'
|
|
61
|
+
# # color 'black'
|
|
62
|
+
# # font family: 'Verdana'
|
|
63
|
+
# # }
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# # bb =$document.id='hook'
|
|
67
|
+
# # bb= $document["hook"]
|
|
68
|
+
# # bb.on.inner_text"jsqhdgfjqhsdgfjqhsgdjhqsg Clicked!"
|
|
69
|
+
# # bb.style.apply {
|
|
70
|
+
# # background color: 'black'
|
|
71
|
+
# # color 'orange'
|
|
72
|
+
# # font family: 'Verdana'
|
|
73
|
+
# # }
|
|
74
|
+
#
|
|
75
|
+
# end
|
|
76
|
+
#
|
|
77
|
+
# $document.body.style.apply {
|
|
78
|
+
# background color: 'black'
|
|
79
|
+
# color 'orange'
|
|
80
|
+
# font family: 'Verdana'
|
|
81
|
+
# }
|
|
82
|
+
#
|
|
83
|
+
#
|
|
84
|
+
# def box(params={})
|
|
85
|
+
# DOM do
|
|
86
|
+
# el=div(id: "hook")
|
|
87
|
+
# el( ",jb,jb")
|
|
88
|
+
# end.append_to($document["user_view"])
|
|
89
|
+
#
|
|
90
|
+
# end
|
|
91
|
+
#
|
|
92
|
+
# box
|
|
93
|
+
#
|
|
94
|
+
# e=$document.at_css("#hook")
|
|
95
|
+
# e.style { background color: 'lime' }
|
|
96
|
+
# $document.at_css("#hook").style(color: :red)
|
|
97
|
+
# # Example 2
|
|
98
|
+
# DOM do
|
|
99
|
+
# div(id: "hook").red "lllll"
|
|
100
|
+
# div(id: "poil").red "kool"
|
|
101
|
+
# end.append_to($document["user_view"])
|
|
102
|
+
# elem = $document.css("#poil").style(color: :orange)
|
|
103
|
+
#
|
|
104
|
+
# # #Example 3
|
|
105
|
+
# def box(params = {})
|
|
106
|
+
# params = { color: :pink, width: 100, height: 100 }.merge(params)
|
|
107
|
+
# DOM do
|
|
108
|
+
# div(id: "hook",
|
|
109
|
+
# class: :toto,
|
|
110
|
+
# style: "background-color: #{params[:color]};
|
|
111
|
+
# width: #{params[:width]}px;
|
|
112
|
+
# height: #{params[:height]}px;
|
|
113
|
+
# box-shadow: #{params[:shadow]};
|
|
114
|
+
# ")
|
|
115
|
+
# .the_class
|
|
116
|
+
# end.append_to($document["user_view"])
|
|
117
|
+
# end
|
|
118
|
+
#
|
|
119
|
+
# window_height= $window.view.height/12
|
|
120
|
+
# window_width= $window.view.width/12
|
|
121
|
+
# box({ color: :green, shadow: "0px 0px 10px black;" })
|
|
122
|
+
# $document.body['foo'] = 'bar'
|
|
123
|
+
#
|
|
124
|
+
#
|
|
125
|
+
# $window.on :resize do |e|
|
|
126
|
+
# puts $window.view.height
|
|
127
|
+
# puts $window.view.width
|
|
128
|
+
# puts "------"
|
|
129
|
+
# # alert $document.body.width
|
|
130
|
+
# end
|
|
131
|
+
#
|
|
132
|
+
# puts $document.search('div').size
|
|
133
|
+
# # $document.search('div')['foo'] = 'bar'
|
|
134
|
+
#
|
|
135
|
+
#
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
# require 'browser/socket'
|
|
140
|
+
|
|
141
|
+
ws =Browser::Socket.new 'ws://127.0.0.1:9292'
|
|
142
|
+
ws.on :open do
|
|
4
143
|
end
|
|
5
144
|
|
|
6
|
-
|
|
7
|
-
|
|
145
|
+
ws.on :message do |e|
|
|
146
|
+
alert e.data
|
|
8
147
|
end
|
|
9
|
-
$document.on(:touchstart, "#good") do |e|
|
|
10
|
-
toto(e)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
verif = <<-STR
|
|
14
|
-
$document.ready do
|
|
15
|
-
DOM {
|
|
16
|
-
div.info {
|
|
17
|
-
span.red "Opal eval cooked up!"
|
|
18
|
-
}
|
|
19
|
-
}.append_to($document.body)
|
|
20
|
-
end
|
|
21
|
-
STR
|
|
22
|
-
|
|
23
|
-
eval(verif)
|
|
24
|
-
|
|
25
148
|
|
|
26
|
-
$document.body.style.apply {
|
|
27
|
-
background color: 'black'
|
|
28
|
-
color 'orange'
|
|
29
|
-
font family: 'Verdana'
|
|
30
|
-
}
|
|
31
|
-
$document.ready do
|
|
32
|
-
DOM {
|
|
33
|
-
div.info {
|
|
34
|
-
i=0
|
|
35
|
-
while i< 20
|
|
36
|
-
i+=1
|
|
37
|
-
span(id: "good").red "Opal cooked up, click me #{i}"
|
|
38
|
-
div(id: "hook").red "lllll#{i} --"
|
|
39
|
-
end
|
|
40
|
-
}
|
|
41
|
-
}.append_to($document["user_view"])
|
|
42
149
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
elem = $document.at_css(".red").style(color: :yellow)
|
|
51
|
-
|
|
52
|
-
$document.on :click do |e|
|
|
53
|
-
elem.style(color: :yellowgreen)
|
|
54
|
-
# elem.style.apply {
|
|
55
|
-
# background color: 'blue'
|
|
56
|
-
# color 'green'
|
|
57
|
-
# font family: 'Verdana'
|
|
58
|
-
# }
|
|
59
|
-
# a.style.apply {
|
|
60
|
-
# background color: 'red'
|
|
61
|
-
# color 'black'
|
|
62
|
-
# font family: 'Verdana'
|
|
63
|
-
# }
|
|
150
|
+
def send_message(socket,msg)
|
|
151
|
+
if socket.alive?
|
|
152
|
+
socket.send(msg )
|
|
153
|
+
else
|
|
154
|
+
after 0.1 do
|
|
155
|
+
send_message(socket,msg)
|
|
64
156
|
end
|
|
65
|
-
|
|
66
|
-
# bb =$document.id='hook'
|
|
67
|
-
# bb= $document["hook"]
|
|
68
|
-
# bb.on.inner_text"jsqhdgfjqhsdgfjqhsgdjhqsg Clicked!"
|
|
69
|
-
# bb.style.apply {
|
|
70
|
-
# background color: 'black'
|
|
71
|
-
# color 'orange'
|
|
72
|
-
# font family: 'Verdana'
|
|
73
|
-
# }
|
|
74
|
-
|
|
75
157
|
end
|
|
76
158
|
|
|
77
|
-
$document.body.style.apply {
|
|
78
|
-
background color: 'black'
|
|
79
|
-
color 'orange'
|
|
80
|
-
font family: 'Verdana'
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def box(params={})
|
|
85
|
-
DOM do
|
|
86
|
-
el=div(id: "hook")
|
|
87
|
-
el( ",jb,jb")
|
|
88
|
-
end.append_to($document["user_view"])
|
|
89
|
-
|
|
90
159
|
end
|
|
91
160
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
e.style { background color: 'lime' }
|
|
96
|
-
$document.at_css("#hook").style(color: :red)
|
|
97
|
-
# Example 2
|
|
98
|
-
DOM do
|
|
99
|
-
div(id: "hook").red "lllll"
|
|
100
|
-
div(id: "poil").red "kool"
|
|
101
|
-
end.append_to($document["user_view"])
|
|
102
|
-
elem = $document.css("#poil").style(color: :orange)
|
|
103
|
-
|
|
104
|
-
# #Example 3
|
|
105
|
-
def box(params = {})
|
|
106
|
-
params = { color: :pink, width: 100, height: 100 }.merge(params)
|
|
107
|
-
DOM do
|
|
108
|
-
div(id: "hook",
|
|
109
|
-
class: :toto,
|
|
110
|
-
style: "background-color: #{params[:color]};
|
|
111
|
-
width: #{params[:width]}px;
|
|
112
|
-
height: #{params[:height]}px;
|
|
113
|
-
box-shadow: #{params[:shadow]};
|
|
114
|
-
")
|
|
115
|
-
.the_class
|
|
116
|
-
end.append_to($document["user_view"])
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
window_height= $window.view.height/12
|
|
120
|
-
window_width= $window.view.width/12
|
|
121
|
-
box({ color: :green, shadow: "0px 0px 10px black;" })
|
|
122
|
-
$document.body['foo'] = 'bar'
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
$window.on :resize do |e|
|
|
126
|
-
puts $window.view.height
|
|
127
|
-
puts $window.view.width
|
|
128
|
-
puts "------"
|
|
129
|
-
# alert $document.body.width
|
|
130
|
-
end
|
|
161
|
+
my_msg={ foo: "bar" }
|
|
162
|
+
my_msg=JSON.generate(my_msg)
|
|
163
|
+
send_message(ws,my_msg)
|
|
131
164
|
|
|
132
|
-
puts $document.search('div').size
|
|
133
|
-
# $document.search('div')['foo'] = 'bar'
|
|
134
165
|
|
|
135
166
|
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
+
# atome server
|
|
2
3
|
|
|
3
|
-
# instructions to install :
|
|
4
|
-
# gem install bundler roda sqlite3 sequel rack-unreloader faye-websocket websocket-extensions websocket-driver puma -N
|
|
5
|
-
# important if crash the gem install rack-unreloader -v 1.7.0 gem install roda -v 2.26.0
|
|
6
|
-
# bundle update
|
|
7
|
-
# bundle install
|
|
8
|
-
# to run: rackup --server puma --port 4567 or without puma : rackup -p 4567
|
|
9
|
-
|
|
10
|
-
# puts RUBY_VERSION
|
|
11
4
|
if RUBY_PLATFORM == "x64-mingw32"
|
|
12
5
|
require "em/pure_ruby"
|
|
13
6
|
end
|
|
@@ -19,9 +12,6 @@ require "json"
|
|
|
19
12
|
require "securerandom"
|
|
20
13
|
require "mail"
|
|
21
14
|
require "digest"
|
|
22
|
-
require "filewatcher"
|
|
23
|
-
require "artoo"
|
|
24
|
-
|
|
25
15
|
|
|
26
16
|
class String
|
|
27
17
|
def is_json?
|
|
@@ -34,12 +24,6 @@ class String
|
|
|
34
24
|
end
|
|
35
25
|
|
|
36
26
|
class App < Roda
|
|
37
|
-
|
|
38
|
-
@@channels = {}
|
|
39
|
-
@@user
|
|
40
|
-
@@test_socket = []
|
|
41
|
-
|
|
42
|
-
#plugin :mail_processor
|
|
43
27
|
eden = Sequel.connect("sqlite://eden.sqlite3")
|
|
44
28
|
unless File.exist?("eden.sqlite3")
|
|
45
29
|
eden.create_table :objects do
|
|
@@ -50,247 +34,28 @@ class App < Roda
|
|
|
50
34
|
String :content
|
|
51
35
|
end
|
|
52
36
|
end
|
|
53
|
-
|
|
54
37
|
index_content = File.read("../build/index.html")
|
|
55
38
|
|
|
56
|
-
# index_content = index_content.gsub('<script type="text/javascript" src="../cordova.js"></script>', "")
|
|
57
|
-
# below an attempt to load atome in pure ruby not opal
|
|
58
39
|
require 'atome'
|
|
59
40
|
opts[:root] = '../build'
|
|
60
41
|
plugin :static, %w[/css /js /medias], root: '../build'
|
|
61
|
-
# plugin "faye/websocket"
|
|
62
42
|
route do |r|
|
|
63
43
|
if Faye::WebSocket.websocket?(env)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
@@test_socket[0] = ws
|
|
67
|
-
ws.on :message do |event|
|
|
44
|
+
websocket = Faye::WebSocket.new(env)
|
|
45
|
+
websocket.on :message do |event|
|
|
68
46
|
client_data = event.data
|
|
69
47
|
if client_data.is_json?
|
|
70
|
-
data = JSON.parse(client_data)
|
|
71
|
-
|
|
72
|
-
case data["type"]
|
|
73
|
-
when "login"
|
|
74
|
-
user_id = data["username"]
|
|
75
|
-
# @user_id[user_id]=ws
|
|
76
|
-
# @user[data["username"]] = ws
|
|
77
|
-
# ws.send()
|
|
78
|
-
# message_back = "text ({content: '#{data["username"]} with id : #{data["id"]} is connected!', y:330})"
|
|
79
|
-
# message_back={id: data["id"], log: true}
|
|
80
|
-
#
|
|
81
|
-
session_id = SecureRandom.uuid
|
|
82
|
-
message_back = JSON.generate({ type: :response, request_id: data["request_id"], session_id: session_id, log: true })
|
|
83
|
-
ws.send(message_back)
|
|
84
|
-
|
|
85
|
-
when "start_channel"
|
|
86
|
-
channel_id = SecureRandom.uuid
|
|
87
|
-
# self.channels(channel_id)
|
|
88
|
-
@@channels[channel_id] = []
|
|
89
|
-
# @session[data["username"]] =session_id
|
|
90
|
-
message_back = JSON.generate({ type: :response, request_id: data["request_id"], channel_id: channel_id })
|
|
91
|
-
ws.send(message_back)
|
|
92
|
-
when "list_channels"
|
|
93
|
-
message_back = JSON.generate({ type: :response, request_id: data["request_id"], channels: @@channels.keys })
|
|
94
|
-
ws.send(message_back)
|
|
95
|
-
when "connect_channel"
|
|
96
|
-
channel_id = data["channel_id"]
|
|
97
|
-
@@channels[channel_id] << ws
|
|
98
|
-
message_back = JSON.generate({ type: :response, request_id: data["request_id"], connected: true })
|
|
99
|
-
ws.send(message_back)
|
|
100
|
-
when "push_to_channel"
|
|
101
|
-
channel_id = data["channel_id"]
|
|
102
|
-
message_received = data["message"]
|
|
103
|
-
#fixme the type depend on the kind if received message
|
|
104
|
-
message_to_push = JSON.generate({ type: :code, content: message_received })
|
|
105
|
-
@@channels[channel_id].each do |ws_found|
|
|
106
|
-
# we exclude the sender from the recipient
|
|
107
|
-
unless ws_found == ws
|
|
108
|
-
ws_found.send(message_to_push)
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
message_back = JSON.generate({ type: :response, request_id: data["request_id"], pushed: true })
|
|
112
|
-
ws.send(message_back)
|
|
113
|
-
when "read"
|
|
114
|
-
file_content = File.read(data["file"])
|
|
115
|
-
hashed_content = { content: file_content }
|
|
116
|
-
hashed_options = { options: data["options"].to_s }
|
|
117
|
-
message_to_push = JSON.generate({ type: :read, atome: data["atome"], target: data["target"], content: hashed_content, options: hashed_options })
|
|
118
|
-
ws.send(message_to_push)
|
|
119
|
-
when "set"
|
|
120
|
-
msg = { type: :monitor, atome: data["atome"], target: data["target"], output: data["output"], content: data["content"],options: data["options"] }
|
|
121
|
-
set_output msg
|
|
122
|
-
when "monitor"
|
|
123
|
-
# file = data["file"]
|
|
124
|
-
# monitor "public/medias/e_projects/chambon/code.rb"
|
|
125
|
-
# puts file.class
|
|
126
|
-
# if !file.instance_of?(Array)
|
|
127
|
-
# file=[file]
|
|
128
|
-
# end
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
# @@threads << Thread.new do
|
|
132
|
-
# puts "hello from thread"
|
|
133
|
-
# Filewatcher.new(file).watch do |changes|
|
|
134
|
-
# file_content = file
|
|
135
|
-
# hashed_content = { content: data["file"] }
|
|
136
|
-
# hashed_options = { options: data["options"].to_s }
|
|
137
|
-
if data["file"]
|
|
138
|
-
msg = { type: :monitor, atome: data["atome"], target: data["target"], content: data["file"], options: data["options"] }
|
|
139
|
-
monitor msg
|
|
140
|
-
else
|
|
141
|
-
msg = { type: :monitor, atome: data["atome"], target: data["target"], input: data["input"], options: data["options"] }
|
|
142
|
-
capture_input msg
|
|
143
|
-
end
|
|
144
|
-
# puts "------"
|
|
145
|
-
# puts file.class
|
|
146
|
-
# puts "------"
|
|
147
|
-
# message_to_push = JSON.generate({ type: :monitor, atome: data["atome"], target: data["target"], content: hashed_content, options: hashed_options })
|
|
148
|
-
# # puts ws.inspect
|
|
149
|
-
# # puts "---"
|
|
150
|
-
# puts "hashed_content : #{hashed_content}}"
|
|
151
|
-
# puts "hashed_options : #{hashed_options}}"
|
|
152
|
-
# puts "message_to_push : #{message_to_push}}"
|
|
153
|
-
# ws.send(message_to_push)
|
|
154
|
-
# # @@channels[channel_id].each do |ws_found|
|
|
155
|
-
# # # we exclude the sender from the recipient
|
|
156
|
-
# # unless ws_found == ws
|
|
157
|
-
# # ws_found.send(message_to_push)
|
|
158
|
-
# # end
|
|
159
|
-
# # end
|
|
160
|
-
# end
|
|
161
|
-
# puts "koolll!!!!"
|
|
162
|
-
# end
|
|
163
|
-
# @@threads.each(&:join)
|
|
164
|
-
|
|
165
|
-
# t= Thread.new do
|
|
166
|
-
# puts "hello from thread"
|
|
167
|
-
# Filewatcher.new(file).watch do |changes|
|
|
168
|
-
# # file_content = File.read(changes)
|
|
169
|
-
# hashed_content = { content: file_content }
|
|
170
|
-
# hashed_options = { options: data["options"].to_s }
|
|
171
|
-
# message_to_push = JSON.generate({ type: :monitor, atome: data["atome"], target: data["target"], content: hashed_content, options: hashed_options })
|
|
172
|
-
# # puts ws.inspect
|
|
173
|
-
# # puts "---"
|
|
174
|
-
# puts "hashed_content : #{hashed_content}}"
|
|
175
|
-
# puts "hashed_options : #{hashed_options}}"
|
|
176
|
-
# puts "message_to_push : #{message_to_push}}"
|
|
177
|
-
# ws.send(message_to_push)
|
|
178
|
-
# # @@channels[channel_id].each do |ws_found|
|
|
179
|
-
# # # we exclude the sender from the recipient
|
|
180
|
-
# # unless ws_found == ws
|
|
181
|
-
# # ws_found.send(message_to_push)
|
|
182
|
-
# # end
|
|
183
|
-
# # end
|
|
184
|
-
# end
|
|
185
|
-
#
|
|
186
|
-
# end
|
|
187
|
-
#
|
|
188
|
-
# t.join
|
|
189
|
-
|
|
190
|
-
# # ugly patch below needs to use filewatcher above instead
|
|
191
|
-
# t=Thread.new do
|
|
192
|
-
# sleep 12
|
|
193
|
-
# puts file = data["file"]
|
|
194
|
-
# end
|
|
195
|
-
# t.join
|
|
196
|
-
# if @file_require == (Digest::SHA256.hexdigest File.read data["file"])
|
|
197
|
-
# @file_require = Digest::SHA256.hexdigest File.read data["file"]
|
|
198
|
-
# else
|
|
199
|
-
# @file_require = Digest::SHA256.hexdigest File.read data["file"]
|
|
200
|
-
# # file_content = File.read()
|
|
201
|
-
# file = data["file"]
|
|
202
|
-
# hashed_file = { content: file }
|
|
203
|
-
# hashed_options = { options: data["options"].to_s }
|
|
204
|
-
# message_to_push = JSON.generate({ type: :monitor, atome: data["atome"], target: data["target"], file: hashed_file, options: hashed_options })
|
|
205
|
-
# ws.send(message_to_push)
|
|
206
|
-
# end
|
|
207
|
-
when "list"
|
|
208
|
-
files_found = Dir[data["path"] + "/*"]
|
|
209
|
-
hashed_content = { content: files_found }
|
|
210
|
-
hashed_options = { options: data["options"].to_s }
|
|
211
|
-
message_to_push = JSON.generate({ type: :read, target: data["target"], content: hashed_content, options: hashed_options })
|
|
212
|
-
ws.send(message_to_push)
|
|
213
|
-
when "write"
|
|
214
|
-
File.write(data["file"], data["content"])
|
|
215
|
-
hashed_content = { content: data["content"].to_s }
|
|
216
|
-
hashed_options = { options: data["options"].to_s }
|
|
217
|
-
message_to_push = JSON.generate({ type: :read, target: data["target"], content: hashed_content, options: hashed_options })
|
|
218
|
-
ws.send(message_to_push)
|
|
219
|
-
when "copy"
|
|
220
|
-
FileUtils.cp data["source"], data["dest"]
|
|
221
|
-
when "delete"
|
|
222
|
-
File.delete(data["file"])
|
|
223
|
-
hashed_content = { content: data["file"].to_s }
|
|
224
|
-
hashed_options = { options: data["options"].to_s }
|
|
225
|
-
message_to_push = JSON.generate({ type: :read, target: data["target"], content: hashed_content, options: hashed_options })
|
|
226
|
-
ws.send(message_to_push)
|
|
227
|
-
when "mail"
|
|
228
|
-
if data["from"]
|
|
229
|
-
sender = data["from"]
|
|
230
|
-
else
|
|
231
|
-
sender = "contact@atome.one"
|
|
232
|
-
end
|
|
233
|
-
receiver = data["to"]
|
|
234
|
-
mail_subject = data["subject"]
|
|
235
|
-
content = data["content"]
|
|
236
|
-
attachment = data["attachment"]
|
|
237
|
-
attachments = []
|
|
238
|
-
if attachment
|
|
239
|
-
if attachment.instance_of?(Array)
|
|
240
|
-
attachment.each do |file|
|
|
241
|
-
filename = File.basename(file)
|
|
242
|
-
attachments << { file: file, filename: filename }
|
|
243
|
-
end
|
|
244
|
-
else
|
|
245
|
-
filename = File.basename(attachment)
|
|
246
|
-
attachments << { file: attachment, filename: filename }
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
# puts "----- + -----"
|
|
250
|
-
# puts "sender: #{sender}"
|
|
251
|
-
# puts "receiver: #{receiver}"
|
|
252
|
-
# puts "mail_subject: #{mail_subject}"
|
|
253
|
-
# puts "content: #{content}"
|
|
254
|
-
# puts "attachments: #{attachments}"
|
|
255
|
-
# puts "----- - -----"
|
|
256
|
-
mail = Mail.new do
|
|
257
|
-
from sender
|
|
258
|
-
to receiver
|
|
259
|
-
subject mail_subject
|
|
260
|
-
body content
|
|
261
|
-
attachments.each do |file_to_add|
|
|
262
|
-
file = file_to_add[:file]
|
|
263
|
-
filename = file_to_add[:filename]
|
|
264
|
-
add_file :filename => filename, :content => File.read(file)
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
mail.delivery_method :sendmail
|
|
269
|
-
|
|
270
|
-
mail.deliver
|
|
271
|
-
when "atome"
|
|
272
|
-
message_to_push = JSON.generate({ type: :atome, target: data["target"], atome: data["atome"], content: data["content"] })
|
|
273
|
-
ws.send(message_to_push)
|
|
274
|
-
when "code"
|
|
275
|
-
message_to_push = JSON.generate({ type: :code, content: data["content"] })
|
|
276
|
-
ws.send(message_to_push)
|
|
277
|
-
when "command"
|
|
278
|
-
file_content = `#{data["content"]}`
|
|
279
|
-
# hashed_content = { content: file_content }.merge(data["options"])
|
|
280
|
-
message_to_push = JSON.generate({ type: :command, target: data["target"], atome: data["atome"], content: file_content })
|
|
281
|
-
ws.send(message_to_push)
|
|
282
|
-
else
|
|
283
|
-
# ws.send("unknown message received")
|
|
284
|
-
end
|
|
48
|
+
# to get hash from data: data_to_hash = JSON.parse(client_data)
|
|
49
|
+
websocket.send(client_data)
|
|
285
50
|
end
|
|
286
51
|
end
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
52
|
+
websocket.on :open do
|
|
53
|
+
# websocket.send(event.data)
|
|
54
|
+
end
|
|
55
|
+
websocket.on :close do
|
|
56
|
+
# websocket.send(event.data)
|
|
292
57
|
end
|
|
293
|
-
|
|
58
|
+
websocket.rack_response
|
|
294
59
|
end
|
|
295
60
|
r.root do
|
|
296
61
|
r.redirect "/index"
|
|
@@ -298,78 +63,9 @@ class App < Roda
|
|
|
298
63
|
r.on "index" do
|
|
299
64
|
r.is do
|
|
300
65
|
r.get do
|
|
301
|
-
#sleep 7
|
|
302
|
-
#box()
|
|
303
66
|
index_content
|
|
304
67
|
end
|
|
305
68
|
end
|
|
306
69
|
end
|
|
307
70
|
end
|
|
308
|
-
|
|
309
|
-
def self.monitor_callback(val, params)
|
|
310
|
-
ws = @@test_socket[0]
|
|
311
|
-
file_content = File.read(val)
|
|
312
|
-
params[:content] = val
|
|
313
|
-
msg = { "type": "eval", "atome": "text", "target": "tryout", "content": { "content": file_content }, "options": "clear" }
|
|
314
|
-
params[:content] = { "content": { "content": file_content } }
|
|
315
|
-
message_to_push = JSON.generate(msg)
|
|
316
|
-
ws.send(message_to_push)
|
|
317
|
-
end
|
|
318
|
-
|
|
319
|
-
def self.device_output_callback( params)
|
|
320
|
-
ws = @@test_socket[0]
|
|
321
|
-
file_content = params[:content]
|
|
322
|
-
msg = { "type": "read", "atome": "text", "target": "tryout", "content": { "content": file_content }, "options": "clear" }
|
|
323
|
-
params[:content] = { "content": { "content": file_content } }
|
|
324
|
-
message_to_push = JSON.generate(msg)
|
|
325
|
-
ws.send(message_to_push)
|
|
326
|
-
end
|
|
327
71
|
end
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
# Update all connections in a single thread
|
|
333
|
-
def monitor(params)
|
|
334
|
-
Thread.new do
|
|
335
|
-
Filewatcher.new(params[:content]).watch do |changes|
|
|
336
|
-
App.monitor_callback(changes, params)
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
@bbb_ready = false
|
|
342
|
-
@bbb_thread = false
|
|
343
|
-
|
|
344
|
-
def capture_input params
|
|
345
|
-
unless @bbb_ready
|
|
346
|
-
@bbb_ready = true
|
|
347
|
-
puts "bbb is ready"
|
|
348
|
-
# require "./beagleboard"
|
|
349
|
-
|
|
350
|
-
end
|
|
351
|
-
if @bbb_thread
|
|
352
|
-
@bbb_thread.exit
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
@bbb_thread = Thread.new do
|
|
356
|
-
|
|
357
|
-
i = 0
|
|
358
|
-
while i < 2000
|
|
359
|
-
puts i
|
|
360
|
-
sleep 1
|
|
361
|
-
i += 1
|
|
362
|
-
end
|
|
363
|
-
end
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
def set_output params
|
|
368
|
-
App.device_output_callback( params)
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
# capture_input(1, { my_condition: :callback })
|
|
373
|
-
#
|
|
374
|
-
# capture_input(1, { my_condition: :callback })
|
|
375
|
-
# capture_input(1, { my_condition: :callback })
|
metadata
CHANGED
|
@@ -1,29 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: atome
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.00009
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jean-Eric Godard
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-04-
|
|
11
|
+
date: 2022-04-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: artoo
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.8'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.8'
|
|
27
13
|
- !ruby/object:Gem::Dependency
|
|
28
14
|
name: faye-websocket
|
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,23 +262,9 @@ dependencies:
|
|
|
276
262
|
- - "~>"
|
|
277
263
|
- !ruby/object:Gem::Version
|
|
278
264
|
version: '0.1'
|
|
279
|
-
- !ruby/object:Gem::Dependency
|
|
280
|
-
name: webview_ruby
|
|
281
|
-
requirement: !ruby/object:Gem::Requirement
|
|
282
|
-
requirements:
|
|
283
|
-
- - "~>"
|
|
284
|
-
- !ruby/object:Gem::Version
|
|
285
|
-
version: '0.1'
|
|
286
|
-
type: :runtime
|
|
287
|
-
prerelease: false
|
|
288
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
289
|
-
requirements:
|
|
290
|
-
- - "~>"
|
|
291
|
-
- !ruby/object:Gem::Version
|
|
292
|
-
version: '0.1'
|
|
293
265
|
description: the creative framework.
|
|
294
266
|
email:
|
|
295
|
-
- jeezs@
|
|
267
|
+
- jeezs@atopme.one
|
|
296
268
|
executables:
|
|
297
269
|
- atome
|
|
298
270
|
extensions: []
|