Hatena::ブログ(Diary)

IT素人がIT機器を弄ったり妄想したりする日記

2012-03-26

[]流行のスクリプト言語を使うウェブアプリケーションフレームワークで遊んでみた。 22:01 流行のスクリプト言語を使うウェブアプリケーションフレームワークで遊んでみた。を含むブックマーク

OSC2012 愛媛でEjectコマンドユーザ会の展示を見てインスパイアされた(ことにする)。

方眼紙に飽きたとか言わない。

 

Ejectコマンドユーザ会

http://eject.kokuda.org/

 

イケメンの某氏と立ち話で「Windowsとか安い端末で実装されてるといいよね。」などと

OSCらしくない他力本願寺なことを零してしまったので、反省して自分で実装することにした。

#EjectコマンドがLinuxのコマンドだと後で知ったくらいなので申し訳ない。

 

Windows上でサーバを立てることになるわけだけど

本家がPHPLinuxコマンドを叩いているのもあって

流行りのP系言語のフレームワークとか使うのがカッコイイよねぇと思う。

 

ということで探してみた。

 

PowerShell Ad-Hoc Web Server (paws)

http://paws.codeplex.com/

 

これが何かというと今最もホットなスクリプト言語であるPowerShellのみで実装された

Webフレームワークである。

Windows7上であればこのスクリプトだけでサービスが提供できる(らしい)。

#素のPowerShellでソケット叩いてます。

 

解凍したらすぐ動くと期待していたのだが色々エラーが出た。

スクリプト文字コードが違うらしい。

ってことで秀丸欧州コードで読んでUTF-16で保存する応急処置。

 

そうすると普通に動いた。すばらしい。

 

で、「run-test-form.ps1」と「WebApp.TestForm.ps1」を改変してサーバアプリを書いてみた。

「WebApp.Eject.ps1」が以下のようになる。

EjectにShell.Applicationを使うのが定番らしいのだが、Closeが出来なかったので

VB4以来COM好きの私としてはWMPlayer.OCXを使用した。

 

もし、興味がある人は試してください。

必要ないと思いますが、要望あれば他のソースも出すかもしれません。

 



. .\Lib.WebPage.ps1


#====================================================================
#
#		EJECT WEB APPLICATION
#
#====================================================================


#--------------------------------------------------------------------
Function Get-HtmlEjectForm
{
@"
<FORM action="eject-form" method="GET">
<P>
	<INPUT type="submit" value="Eject">
</P>
</FORM>
"@
}

#--------------------------------------------------------------------
Function Get-HtmlCloseForm
{
@"
<FORM action="close-form" method="GET">
<P>
	<INPUT type="submit" value="Close">
</P>
</FORM>
"@
}

#--------------------------------------------------------------------
Function Let-CDROM-Eject
{
$wmp = New-object -COM WMPlayer.OCX
for($i = 0; $i -lt $wmp.cdromcollection.count; $i++) {
  $wmp.cdromcollection.item($i).eject()
}
}

#--------------------------------------------------------------------
Function Let-CDROM-Close
{
$wmp = New-object -COM WMPlayer.OCX
for($i = 0; $i -lt $wmp.cdromcollection.count; $i++) {
  $wmp.cdromcollection.item($i).eject()
  $wmp.cdromcollection.item($i).eject()
}
}

#--------------------------------------------------------------------
Function Process-Web-GET
{
	param
	(
		  [psobject] $WebRequest
	)

	[psobject] $WebResponse = New-WebResponse
	$WebResponse.WebRequest		= $WebRequest
	$WebResponse.Resource		= $null
	$WebResponse.ResponseCode	= "501 Not Implemented"

	# Construct the request path.
	[string] $ResourcePath = $WebRequest.WebServer.ApplicationFolder
	[string] $ResourceName = $WebRequest.ResourceName
	[string] $html = ""

	if( $ResourceName -eq "" )
	{
		# Show the test form.
		$html = ""
		$html += Get-HtmlHeader $WebRequest "Test Form" ""
		$html += Get-HtmlEjectForm
		$html += Get-HtmlFooter $WebRequest ""
	}
	elseif( $ResourceName -eq "eject-form" )
	{
		# Eject !
		Let-CDROM-Eject
		$html = ""
		$html += Get-HtmlHeader $WebRequest "Test Form" ""
		$html += Get-HtmlCloseForm
		$html += Get-HtmlFooter $WebRequest ""

	}
	elseif( $ResourceName -eq "close-form" )
	{
		# Close !
		Let-CDROM-Close
		$html = ""
		$html += Get-HtmlHeader $WebRequest "Test Form" ""
		$html += Get-HtmlEjectForm
		$html += Get-HtmlFooter $WebRequest ""

	}

	if( $html -ne "" )
	{
		$WebResponse.Resource = New-Resource
		$WebResponse.Resource.Root = ""
		$WebResponse.Resource.Path = $WebRequest.ResourceName
		$WebResponse.Resource.Name = ""
		$WebResponse.Resource.Mime = "text/html"
		$WebResponse.Resource.Data = AsciiString2Bytes( $html )
		$WebResponse.Resource.Size = $WebResponse.Resource.Data.Length
		$WebResponse.ResponseCode = "200 OK"
	}
	else
	{
		$WebResponse.ResponseCode = "404 Not Found"
	}


	if( $WebResponse.Resource -eq $null )
	{
		# Not found
		$WebResponse.ResponseCode = "404 Not Found"
	}
	
	# Send the response.
	[bool] $b = Send-WebResponse $WebResponse $true
	if( $b -eq $false ) { return $false }

	# Return, OK
	return $true
}


 

---

Powershell習作「EjectコマンドをWindows上に実装してみた」が仮タイトルでした。

タイトルでネタバレはねぇ。

トラックバック - http://d.hatena.ne.jp/the48/20120326/1332766915
リンク元