Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2005-04-24

[開発ログ]ログイン画面完成

ユーザー作成とユーザーログインの WEB ページができた。

これが Jewel-mmo サービスの最小構成か。

--

テンプレートはこうした。テンプレート内に含めるロジックをファイルの先頭に移動。これならこのままでもやっていけそうだ。

<%
  name = @cgi.params['name'].first
  pass = @cgi.params['pass'].first
  sid = nil
  error = nil
  if name
    begin
      require 'command/login.rb'
      raise Core_Error unless (com = Login.new(nil, name, pass)).result
      sid = com.result
      @cgi_header["cookie"] = CGI::Cookie::new({"name" => "sid", "value" => [sid]})
    rescue Core_Error
      error = $!.inspect
    end
  end
%>

<html lang="ja">
<head>
<meta http-equiv="Content-type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-script-type" content="text/javascript">
<title>ログイン</title>
</head>
<body>

<h1>ログイン</h1>

<% if sid %>
  <head><meta http-equiv="refresh" content="5;url=<%= jmp_url('usermain') %>"></head>
  <p>Wait or <a href="<%= jmp_url('usermain') %>">Click here!</a></p>
<% else %>
  <% if error %>
    <p>Error : <%= h(error) %></p>
  <% end %>
  <form action="<%= jmp_url %>" method="post" class="login_form">
     <input type="hidden" name="tmpl" value="<%= h(@tmpl) %>" />
     user name : <input type="text" size="10" name="name" value="<%= h(name) %>"/>
     password : <input type="pass" size="10" name="pass" value="<%= h(pass) %>"/>
     <input type="submit" value="login" />
  </form>
  <p><a href="<%= jmp_url('useradd') %>">ユーザー登録画面</a></p>
<% end %>

</body>
</html>

現状のランチャーは以下。

#!/usr/bin/env ruby
require 'cgi'
require 'erb'
include ERB::Util

def jmp_url(tmpl=nil, params=nil)
  url = $0
  url += "?tmpl=#{tmpl}" if tmpl
  h(url)
end

@cgi_header = {}
@cgi = CGI.new("html3")
begin
  $:.unshift '../core/'
  require 'jewelcore.rb'
  include JewelCore

  @sid = @cgi.cookies['sid'].empty? ? nil : @cgi.cookies['sid'].value.first
  @tmpl = @cgi.params['tmpl'].first
  raise @tmpl if @tmpl =~ /[^\w_-]/

  html = ERB.new(File.read("./#{@tmpl}.htm")).result(binding)
rescue Exception
  html = "<H2>Error</H2>\n#{h($!.inspect)}"
  html += '<PRE>' + $@.map{|s| h(s) }.join("\n") + '</PRE>'
end

@cgi.out(@cgi_header) { html }