OSDN Git Service

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