dragongoserver 0.0.1 → 0.0.3
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/History.txt +7 -2
- data/Manifest.txt +1 -0
- data/bin/dgs +118 -3
- data/lib/dragongoserver.rb +4 -4
- data/lib/dragongoserver/dragongoserver.rb +145 -0
- data/lib/dragongoserver/version.rb +1 -1
- data/test/test_dragongoserver.rb +32 -2
- metadata +3 -2
data/History.txt
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
== 0.0.
|
2
|
-
|
1
|
+
== 0.0.3 2008-01-01
|
2
|
+
* 1 enhancement:
|
3
|
+
* new option -ml/--missing-loop in dgs script
|
4
|
+
== 0.0.2 2007-12-29
|
5
|
+
* 1 bug-fix:
|
6
|
+
* missing file dragongoserver/dragongoserver.rb fixed
|
7
|
+
== 0.0.1 2007-12-29
|
3
8
|
* 1 major enhancement:
|
4
9
|
* Initial release
|
data/Manifest.txt
CHANGED
data/bin/dgs
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require '
|
5
|
-
require 'lib/dragongoserver/dragongoserver'
|
4
|
+
require 'dragongoserver'
|
6
5
|
require 'choice'
|
7
6
|
|
8
7
|
version = Dragongoserver::VERSION::STRING
|
9
|
-
#oputs "dgs 0.1.0"
|
10
8
|
Choice.options do
|
11
9
|
header ''
|
12
10
|
header 'Specific options:'
|
@@ -36,10 +34,24 @@ Choice.options do
|
|
36
34
|
desc 'Show waiting games'
|
37
35
|
end
|
38
36
|
|
37
|
+
option :waitingloop do
|
38
|
+
short '-wl'
|
39
|
+
long '--waiting-loop'
|
40
|
+
desc 'Show waiting games in an intelligent endless loop'
|
41
|
+
end
|
42
|
+
|
43
|
+
option :running do
|
44
|
+
short '-r'
|
45
|
+
long '--running'
|
46
|
+
desc 'Show running games'
|
47
|
+
end
|
48
|
+
|
39
49
|
end
|
40
50
|
|
41
51
|
#p Choice.choices
|
42
52
|
opt_waiting = Choice.choices['waiting'] # true/false
|
53
|
+
opt_running = Choice.choices['running'] # true/false
|
54
|
+
opt_waitingloop = Choice.choices['waitingloop'] # true/false
|
43
55
|
if opt_waiting
|
44
56
|
dgs = Dgs.new
|
45
57
|
waiting_games = dgs.waiting_games
|
@@ -48,3 +60,106 @@ if opt_waiting
|
|
48
60
|
puts game_id
|
49
61
|
}
|
50
62
|
end
|
63
|
+
if opt_running
|
64
|
+
dgs = Dgs.new
|
65
|
+
running_games = dgs.running_games
|
66
|
+
if running_games.size > 0
|
67
|
+
puts "you have a total of #{running_games.size} running games"
|
68
|
+
puts "running games:"
|
69
|
+
running_games.each { |game_id|
|
70
|
+
puts game_id
|
71
|
+
}
|
72
|
+
else
|
73
|
+
puts "you have no running games"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
def plural(n)
|
77
|
+
if n == 1
|
78
|
+
""
|
79
|
+
else
|
80
|
+
"s"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
def neue_zuege?(dgs)
|
84
|
+
|
85
|
+
w = dgs.waiting_games
|
86
|
+
p w
|
87
|
+
#if dgs.waiting_games.size > 0 # @page.body.include?(NO_GAMES)
|
88
|
+
if w.size > 0 # @page.body.include?(NO_GAMES)
|
89
|
+
true
|
90
|
+
else
|
91
|
+
false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def dringende_zuege(dgs=nil)
|
96
|
+
false # TODO:
|
97
|
+
end
|
98
|
+
|
99
|
+
$nur_dringende = false # TODO:
|
100
|
+
$min_secs = 60*1
|
101
|
+
$secs = $min_secs
|
102
|
+
$count = 0
|
103
|
+
|
104
|
+
def schleife
|
105
|
+
dgs = Dgs.new
|
106
|
+
# dgs.login
|
107
|
+
#page = dgs.page
|
108
|
+
$dringend = false
|
109
|
+
changes = false
|
110
|
+
if $nur_dringende
|
111
|
+
if dringende_zuege?(dgs)
|
112
|
+
$dringend = true
|
113
|
+
changes = true
|
114
|
+
else
|
115
|
+
changes = false
|
116
|
+
end
|
117
|
+
elsif neue_zuege? dgs
|
118
|
+
changes = true
|
119
|
+
else
|
120
|
+
# puts "keine neuen Zuege"
|
121
|
+
puts "no waiting moves"
|
122
|
+
#
|
123
|
+
end
|
124
|
+
if changes
|
125
|
+
$count = 0
|
126
|
+
# puts "neue Zuege, neue Methode"
|
127
|
+
puts "waiting games"
|
128
|
+
$secs = $secs / 2
|
129
|
+
if $secs < $min_secs
|
130
|
+
$secs = $min_secs
|
131
|
+
end
|
132
|
+
# puts "vermindere Abfrageintervall auf #{$secs} Sekunden(n)"
|
133
|
+
puts "decreasing request interval to #{$secs} seconds"
|
134
|
+
# puts "neue Zuege"
|
135
|
+
puts "waiting games"
|
136
|
+
if $dringend
|
137
|
+
$osd.puts("DRINGENDE Spiele")
|
138
|
+
end
|
139
|
+
# puts("Deine Mitspieler bei Dragon Go Server warten auf deine Spielzuege")
|
140
|
+
puts("Your opponents at Dragon Go Server are waiting for your moves")
|
141
|
+
#-- $osd.puts("Deine Mitspieler bei Dragon Go Server warten auf deine Spielzuege")
|
142
|
+
#-- $osd.flush
|
143
|
+
else
|
144
|
+
$count+=1
|
145
|
+
if $count >= 3
|
146
|
+
$secs = $secs*2
|
147
|
+
# puts "erhoehe Abfrageintervall auf #{$secs} Sekunden(n)"
|
148
|
+
puts "increasing request interval to #{$secs} seconds"
|
149
|
+
$count = 0
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
if opt_waitingloop
|
154
|
+
while 1
|
155
|
+
# $osd = IO.popen("osd_cat -p middle -f -adobe-helvetica-*-*-*-*-24-*-*-*- *-*-*-* -s 3 -S lightgray --delay=60","w+")
|
156
|
+
#-- $osd = IO.popen("osd_cat -p middle -f -sony-fixed-medium-*-normal-*-24-*-* -*-*-*-*-* -s 3 -S lightgray --delay=60","w+")
|
157
|
+
schleife
|
158
|
+
#-- $osd.close_write
|
159
|
+
#-- $osd.close
|
160
|
+
# puts "warte #{$secs} Sekunden (#{$secs/60} Minuten)"
|
161
|
+
puts "waiting #{$secs} seconds (#{$secs/60} minute#{plural($secs/60)})"
|
162
|
+
sleep($secs)
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
data/lib/dragongoserver.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# $:.unshift File.dirname(__FILE__)
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
module Dragongoserver
|
4
|
+
end
|
5
5
|
|
6
|
-
require 'dragongoserver/version
|
7
|
-
require 'dragongoserver/dragongoserver
|
6
|
+
require 'dragongoserver/version'
|
7
|
+
require 'dragongoserver/dragongoserver'
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mechanize'
|
3
|
+
require 'gorank'
|
4
|
+
|
5
|
+
class Dgs
|
6
|
+
LOGGED_IN="Sorry, you have to be logged in to do that"
|
7
|
+
YOUR_TURN="Your turn to move in the following games"
|
8
|
+
DGS_STATUS_PAGE = 'http://www.dragongoserver.net/status.php/'
|
9
|
+
DGS_INDEX_PAGE = 'http://www.dragongoserver.net/index.php'
|
10
|
+
USER_AGENT_ALIAS = 'Mac Safari' # should work with every browser type
|
11
|
+
|
12
|
+
attr_reader :username
|
13
|
+
|
14
|
+
def initialize(username=nil,password=nil)
|
15
|
+
@username = username
|
16
|
+
@password = password
|
17
|
+
if @username == nil or @password == nil
|
18
|
+
@username = ENV['DGS_USERNAME']
|
19
|
+
@password = ENV['DGS_PASSWORD']
|
20
|
+
if @username == nil or @password == nil
|
21
|
+
raise "username and/or password not set"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def waiting_games
|
27
|
+
games = []
|
28
|
+
@home = DGS_STATUS_PAGE
|
29
|
+
agent = WWW::Mechanize.new
|
30
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
31
|
+
|
32
|
+
page = agent.get(@home)
|
33
|
+
if page.body.include?(LOGGED_IN)
|
34
|
+
# dann erst zum Einloggen gehen
|
35
|
+
page = login(agent)
|
36
|
+
end
|
37
|
+
|
38
|
+
# muss kommen, sonst sind wir noch nicht auf der richtigen Seite
|
39
|
+
if !page.body.include?(YOUR_TURN)
|
40
|
+
raise "PageError: #{DGS_STATUS_PAGE} not found"
|
41
|
+
end
|
42
|
+
page.body.each {|line|
|
43
|
+
if line =~ /gid=([0-9]+)"/
|
44
|
+
games << $1.to_i
|
45
|
+
end
|
46
|
+
}
|
47
|
+
# aus Bequemlichkeitsgruenden (gid= kommt mehrfach vor): uniq
|
48
|
+
games.uniq
|
49
|
+
end
|
50
|
+
|
51
|
+
# http://www.dragongoserver.net/show_games.php?uid=10737
|
52
|
+
def running_games
|
53
|
+
games = []
|
54
|
+
@home = 'http://www.dragongoserver.net/show_games.php?uid=10737' #TODO:
|
55
|
+
agent = WWW::Mechanize.new
|
56
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
57
|
+
|
58
|
+
page = agent.get(@home)
|
59
|
+
if page.body.include?(LOGGED_IN)
|
60
|
+
page = login(agent)
|
61
|
+
end
|
62
|
+
|
63
|
+
if !page.body.include?(YOUR_TURN)
|
64
|
+
raise "PageError: #{DGS_STATUS_PAGE} not found"
|
65
|
+
end
|
66
|
+
|
67
|
+
page = agent.click page.links.text('Show running games')
|
68
|
+
page.body.each {|line|
|
69
|
+
if line =~ /gid=([0-9]+)"/
|
70
|
+
games << $1.to_i
|
71
|
+
end
|
72
|
+
}
|
73
|
+
# aus Bequemlichkeitsgruenden (gid= kommt mehrfach vor): uniq
|
74
|
+
games.uniq
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_rank
|
78
|
+
@home = DGS_STATUS_PAGE
|
79
|
+
agent = WWW::Mechanize.new
|
80
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
81
|
+
|
82
|
+
page = agent.get(@home)
|
83
|
+
if page.body.include?(LOGGED_IN)
|
84
|
+
page = login(agent)
|
85
|
+
end
|
86
|
+
|
87
|
+
if !page.body.include?(YOUR_TURN)
|
88
|
+
raise "PageError: #{DGS_STATUS_PAGE} not found"
|
89
|
+
end
|
90
|
+
a = show_regexp(page.body, /(\d+) (kyu|dan)/)
|
91
|
+
num = a[0]
|
92
|
+
what = a[1].to_sym
|
93
|
+
myRank = GoRank.new num, what
|
94
|
+
myRank
|
95
|
+
end
|
96
|
+
|
97
|
+
def userid
|
98
|
+
@home = DGS_STATUS_PAGE
|
99
|
+
agent = WWW::Mechanize.new
|
100
|
+
agent.user_agent_alias = USER_AGENT_ALIAS
|
101
|
+
|
102
|
+
page = agent.get(@home)
|
103
|
+
if page.body.include?(LOGGED_IN)
|
104
|
+
page = login(agent)
|
105
|
+
end
|
106
|
+
|
107
|
+
if !page.body.include?(YOUR_TURN)
|
108
|
+
raise "PageError: #{DGS_STATUS_PAGE} not found"
|
109
|
+
end
|
110
|
+
# Link 'http://www.dragongoserver.net/ratinggraph.php?uid=10737'
|
111
|
+
# enthaelt die Userid
|
112
|
+
#p page.links
|
113
|
+
page.links.each { |link|
|
114
|
+
if link.href =~ /ratinggraph/
|
115
|
+
p link
|
116
|
+
a = show_regexp(link.href, /^ratinggraph.php\?uid=(\d+)$/)
|
117
|
+
@userid = a[0].to_i
|
118
|
+
break
|
119
|
+
end
|
120
|
+
}
|
121
|
+
@userid
|
122
|
+
end
|
123
|
+
|
124
|
+
private
|
125
|
+
|
126
|
+
def show_regexp(a, re)
|
127
|
+
if a =~ re
|
128
|
+
return ["#$1", "#$2"]
|
129
|
+
else
|
130
|
+
"no match"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def login(agent)
|
135
|
+
@home = DGS_INDEX_PAGE
|
136
|
+
page = agent.get(@home)
|
137
|
+
form = page.forms.with.name("loginform").first
|
138
|
+
form.fields.find {|f| f.name == 'userid'}.value = @username
|
139
|
+
form.fields.find {|f| f.name == 'passwd'}.value = @password
|
140
|
+
page = agent.submit(form, form.buttons.first)
|
141
|
+
return page
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
end
|
data/test/test_dragongoserver.rb
CHANGED
@@ -48,6 +48,11 @@ class TestDragongoserver < Test::Unit::TestCase
|
|
48
48
|
assert_equal zlist.uniq, zlist
|
49
49
|
end
|
50
50
|
|
51
|
+
def test_bug_duplicate_numbers_running_games
|
52
|
+
zlist = @dgs.running_games
|
53
|
+
assert_equal zlist.uniq, zlist
|
54
|
+
end
|
55
|
+
|
51
56
|
def test_running_games
|
52
57
|
zlist = @dgs.running_games
|
53
58
|
assert zlist.kind_of?(Array)
|
@@ -55,8 +60,8 @@ class TestDragongoserver < Test::Unit::TestCase
|
|
55
60
|
|
56
61
|
# programm 'dgs' should be found
|
57
62
|
def test_bin_dgs_version
|
58
|
-
assert_equal "dgs
|
59
|
-
assert_equal "dgs
|
63
|
+
assert_equal "dgs " + Dragongoserver::VERSION::STRING + "\n", `#{BIN_PREFIX}dgs -v`
|
64
|
+
assert_equal "dgs " + Dragongoserver::VERSION::STRING + "\n", `#{BIN_PREFIX}dgs --version`
|
60
65
|
end
|
61
66
|
|
62
67
|
# test waiting moves for me
|
@@ -68,4 +73,29 @@ class TestDragongoserver < Test::Unit::TestCase
|
|
68
73
|
def test_dgs_userid
|
69
74
|
assert_equal MY_USERID, @dgs.userid, "userid should be #{MY_USERID}"
|
70
75
|
end
|
76
|
+
|
77
|
+
# test my running games
|
78
|
+
def test_bin_dgs_running
|
79
|
+
expected = "you have a total of 29 running games
|
80
|
+
366511
|
81
|
+
372651
|
82
|
+
366534
|
83
|
+
340021
|
84
|
+
244839
|
85
|
+
366494
|
86
|
+
369415
|
87
|
+
369412
|
88
|
+
369306
|
89
|
+
369303
|
90
|
+
366535"
|
91
|
+
|
92
|
+
assert_equal expected, `#{BIN_PREFIX}dgs -r`
|
93
|
+
assert_equal expected, `#{BIN_PREFIX}dgs -running`
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_bin_dgs_add_game
|
97
|
+
assert_equal "Games was added to the waitingroom", `#{BIN_PREFIX}dgs --add-game`
|
98
|
+
|
99
|
+
end
|
100
|
+
|
71
101
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dragongoserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Preymesser
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2008-01-01 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- config/hoe.rb
|
52
52
|
- config/requirements.rb
|
53
53
|
- lib/dragongoserver.rb
|
54
|
+
- lib/dragongoserver/dragongoserver.rb
|
54
55
|
- lib/dragongoserver/version.rb
|
55
56
|
- log/debug.log
|
56
57
|
- script/destroy
|