sikuli-server 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,5 @@
1
+ require "sikuli-server/version"
2
+ require "sikuli-server/client"
3
+
4
+ module SikuliServer
5
+ end
@@ -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,3 @@
1
+ module SikuliServer
2
+ VERSION = "0.0.1"
3
+ 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
@@ -0,0 +1,5 @@
1
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "../lib")))
2
+ require "sikuli-server"
3
+
4
+ client = SikuliServer::Client.new
5
+ client.focus("Google Chrome.app")
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: