OSDN Git Service

* [shogi-server]
[shogi-server/shogi-server.git] / showgame / controller / main.rb
1 # Default url mappings are:
2 #  a controller called Main is mapped on the root of the site: /
3 #  a controller called Something is mapped on: /something
4 # If you want to override this, add a line like this inside the class
5 #  map '/otherurl'
6 # this will force the controller to be mounted on: /otherurl
7
8 require File.join(__DIR__, "..", "..", "shogi_server", "piece")
9 require File.join(__DIR__, "..", "..", "shogi_server", "board")
10 require File.join(__DIR__, "..", "..", "shogi_server", "usi")
11
12 $pos2img = "/home/daigo/cprojects/gpsshogi/gps/sample/graphic/pos2img"
13 $pos2img_out_dir = File.join(".", "public", "images")
14
15 class MainController < Ramaze::Controller
16   layout '/page'
17
18   # the index action is called automatically when no other action is specified
19   def index
20     @title = "Welcome to Ramaze!"
21   end
22
23   def game(csa_file)
24     csa_file.gsub!(" ", "+")
25     dir = "/home/daigo/rubyprojects/shogi-server"
26     files = Dir.glob(File.join(dir, "**", csa_file))
27     if files.empty?
28       redirect Rs()
29     end
30     board = ShogiServer::Board.new
31     board.initial
32     @moves = Array.new
33     teban = true
34     usi = ShogiServer::Usi.new
35     kifu = File.open(files.first) {|f| f.read}
36     kifu.each_line do |line|
37       #  Ramaze::Log.warn(line)
38       if /^([\+\-])(\d)(\d)(\d)(\d)([A-Z]{2})/ =~ line
39         board.handle_one_move(line)
40         sfen = usi.board2usi(board, teban)
41         sfen = ShogiServer::Usi.escape(sfen)
42         @moves << A(h(line), :href => Rs(:sfen, u(sfen)))
43         teban = teban ? false : true
44       end
45     end
46   end
47
48   def sfen(str)
49     sfen = "sfen %s" % [ShogiServer::Usi.unescape(str)]
50     Ramaze::Log.warn(sfen)
51     result = system($pos2img, "--dir", $pos2img_out_dir, sfen)
52     Ramaze::Log.warn("result fail") unless result
53     @img = "/images/%s.png" % [str]
54   end
55
56   # the string returned at the end of the function is used as the html body
57   # if there is no template for the action. if there is a template, the string
58   # is silently ignored
59   def notemplate
60     "there is no 'notemplate.xhtml' associated with this action"
61   end
62 end