sikuli-server 0.0.1
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.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/SikuliServer/.gitignore +2 -0
- data/SikuliServer/compile.sh +3 -0
- data/SikuliServer/manifest +2 -0
- data/SikuliServer/src/Main.java +16 -0
- data/SikuliServer/src/NanoHTTPD.java +1117 -0
- data/SikuliServer/src/SikuliServer.java +54 -0
- data/lib/sikuli-server.rb +5 -0
- data/lib/sikuli-server/client.rb +63 -0
- data/lib/sikuli-server/version.rb +3 -0
- data/sikuli-server.gemspec +22 -0
- data/test/test.rb +5 -0
- metadata +95 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
import java.util.Properties;
|
2
|
+
import java.io.File;
|
3
|
+
import java.io.IOException;
|
4
|
+
|
5
|
+
import com.google.gson.Gson;
|
6
|
+
|
7
|
+
import java.io.PrintWriter;
|
8
|
+
import java.io.StringWriter;
|
9
|
+
import java.io.Writer;
|
10
|
+
|
11
|
+
import org.sikuli.script.*;
|
12
|
+
|
13
|
+
public class SikuliServer extends NanoHTTPD
|
14
|
+
{
|
15
|
+
private boolean serverRunning = false;
|
16
|
+
private Screen screen;
|
17
|
+
|
18
|
+
public SikuliServer() throws IOException
|
19
|
+
{
|
20
|
+
super(7114, new File("."));
|
21
|
+
screen = new Screen();
|
22
|
+
serverRunning = true;
|
23
|
+
}
|
24
|
+
|
25
|
+
public boolean getServerRunning()
|
26
|
+
{
|
27
|
+
return serverRunning;
|
28
|
+
}
|
29
|
+
|
30
|
+
public Response serve(String uri, String method, Properties header, Properties params, Properties files )
|
31
|
+
{
|
32
|
+
if (uri.endsWith("/execute"))
|
33
|
+
{
|
34
|
+
String methodName = params.getProperty("method");
|
35
|
+
String[] parameters = new Gson().fromJson(params.getProperty("parameters"), String[].class);
|
36
|
+
if (methodName.equals("focus"))
|
37
|
+
{
|
38
|
+
App app = new App(parameters[0]);
|
39
|
+
app.focus();
|
40
|
+
return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, methodName);
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, "sikuli-server");
|
45
|
+
}
|
46
|
+
|
47
|
+
private NanoHTTPD.Response showException(Throwable throwable)
|
48
|
+
{
|
49
|
+
final Writer result = new StringWriter();
|
50
|
+
final PrintWriter printWriter = new PrintWriter(result);
|
51
|
+
throwable.printStackTrace(printWriter);
|
52
|
+
return new NanoHTTPD.Response(HTTP_OK, MIME_HTML, "error: " + throwable.getMessage() + "\n" + result.toString());
|
53
|
+
}
|
54
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module SikuliServer
|
4
|
+
class Client
|
5
|
+
def initialize
|
6
|
+
download_jars
|
7
|
+
launch_server
|
8
|
+
end
|
9
|
+
|
10
|
+
def server_url
|
11
|
+
"http://localhost:7114"
|
12
|
+
end
|
13
|
+
|
14
|
+
def focus title
|
15
|
+
HTTParty.post("#{server_url}/execute", :body => {
|
16
|
+
:method => "focus",
|
17
|
+
:parameters => [title].to_json
|
18
|
+
}).body
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def launch_server
|
24
|
+
require "fileutils"
|
25
|
+
server_path = File.expand_path(File.join(File.dirname(__FILE__), "../../SikuliServer"))
|
26
|
+
FileUtils.mkdir_p File.join(server_path, "bin")
|
27
|
+
Dir.chdir server_path do
|
28
|
+
sikuli_script_jar = [
|
29
|
+
"/Applications/Sikuli-IDE.app/Contents/Resources/Java/sikuli-script.jar"
|
30
|
+
].find {|f| File.exist?(f)}
|
31
|
+
|
32
|
+
system "javac -d bin -sourcepath src -cp \"lib/gson-2.2.2.jar:#{sikuli_script_jar}\" src/*.java"
|
33
|
+
require "childprocess"
|
34
|
+
@process = ChildProcess.build("java", "-cp", "bin:lib/gson-2.2.2.jar:#{sikuli_script_jar}", "Main")
|
35
|
+
@process.io.inherit!
|
36
|
+
@process.start
|
37
|
+
loop do
|
38
|
+
response = HTTParty.get("#{server_url}/version").body rescue nil
|
39
|
+
break if response
|
40
|
+
end
|
41
|
+
at_exit do
|
42
|
+
@process.stop
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def download_jars
|
48
|
+
gson_path = File.expand_path(File.join(File.dirname(__FILE__), "../../SikuliServer/lib/gson-2.2.2.jar"))
|
49
|
+
|
50
|
+
require "httparty"
|
51
|
+
require "tempfile"
|
52
|
+
gson_response = HTTParty.get("http://google-gson.googlecode.com/files/google-gson-2.2.2-release.zip")
|
53
|
+
temp_file = Tempfile.new("gson.zip")
|
54
|
+
temp_file << gson_response.body
|
55
|
+
|
56
|
+
require "zip/zip"
|
57
|
+
zip = Zip::ZipFile.open(temp_file.path)
|
58
|
+
File.open(gson_path, "w") do |gson_file|
|
59
|
+
gson_file.write(zip.read("google-gson-2.2.2/gson-2.2.2.jar"))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sikuli-server/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "sikuli-server"
|
8
|
+
gem.version = SikuliServer::VERSION
|
9
|
+
gem.authors = ["Andrew Vos"]
|
10
|
+
gem.email = ["andrew.vos@gmail.com"]
|
11
|
+
gem.description = %q{}
|
12
|
+
gem.summary = %q{}
|
13
|
+
gem.homepage = "https://github.com/AndrewVos/sikuli-server"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency "httparty"
|
21
|
+
gem.add_dependency "childprocess"
|
22
|
+
end
|
data/test/test.rb
ADDED
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sikuli-server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Andrew Vos
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: childprocess
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: ''
|
47
|
+
email:
|
48
|
+
- andrew.vos@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- Gemfile
|
55
|
+
- LICENSE.txt
|
56
|
+
- README.md
|
57
|
+
- Rakefile
|
58
|
+
- SikuliServer/.gitignore
|
59
|
+
- SikuliServer/compile.sh
|
60
|
+
- SikuliServer/manifest
|
61
|
+
- SikuliServer/src/Main.java
|
62
|
+
- SikuliServer/src/NanoHTTPD.java
|
63
|
+
- SikuliServer/src/SikuliServer.java
|
64
|
+
- lib/sikuli-server.rb
|
65
|
+
- lib/sikuli-server/client.rb
|
66
|
+
- lib/sikuli-server/version.rb
|
67
|
+
- sikuli-server.gemspec
|
68
|
+
- test/test.rb
|
69
|
+
homepage: https://github.com/AndrewVos/sikuli-server
|
70
|
+
licenses: []
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 1.8.23
|
90
|
+
signing_key:
|
91
|
+
specification_version: 3
|
92
|
+
summary: ''
|
93
|
+
test_files:
|
94
|
+
- test/test.rb
|
95
|
+
has_rdoc:
|