OSDN Git Service

Record Floodgate games' history
[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 require File.join(__DIR__, "..", "gen-rb", "ShogiGraphic")
13 require 'thrift/transport/socket'
14 require 'thrift/protocol/tbinaryprotocol'
15
16 $pos2img_out_dir = File.join(".", "public", "images")
17
18 class MainController < Ramaze::Controller
19   layout '/page'
20
21   # the index action is called automatically when no other action is specified
22   def index
23     @title = "Welcome to Ramaze!"
24   end
25
26   def game(csa_file)
27     csa_file.gsub!(" ", "+")
28     dir = "/home/daigo/rubyprojects/shogi-server"
29     files = Dir.glob(File.join(dir, "**", csa_file))
30     if files.empty?
31       redirect Rs()
32     end
33     board = ShogiServer::Board.new
34     board.initial
35     @moves = Array.new
36     teban = true
37     usi = ShogiServer::Usi.new
38     kifu = File.open(files.first) {|f| f.read}
39     kifu.each_line do |line|
40       #  Ramaze::Log.warn(line)
41       if /^([\+\-])(\d)(\d)(\d)(\d)([A-Z]{2})/ =~ line
42         board.handle_one_move(line)
43         sfen = usi.board2usi(board, teban)
44         sfen = ShogiServer::Usi.escape(sfen)
45         @moves << A(h(line), :href => Rs(:sfen, u(sfen)))
46         teban = teban ? false : true
47       end
48     end
49   end
50
51   def sfen(str)
52     transport = Thrift::BufferedTransport.new(Thrift::Socket.new('localhost', 9090))
53     client    = ShogiGraphic::Client.new(Thrift::BinaryProtocol.new(transport))
54
55     transport.open
56     result = client.usi2png(str)
57     transport.close
58
59     Ramaze::Log.warn("result fail") unless result
60     @img = "/images/%s" % [result]
61   end
62
63   def images(str)
64     file = File.join($pos2img_out_dir, str)
65     send_file(file, mime_type = Ramaze::Tool::MIME.type_for(file))
66   end
67
68   # the string returned at the end of the function is used as the html body
69   # if there is no template for the action. if there is a template, the string
70   # is silently ignored
71   def notemplate
72     "there is no 'notemplate.xhtml' associated with this action"
73   end
74 end