FlexとRubyでrubyamfを使ってAMF通信

またしても前回に引き続き、AMF通信をします。w
今回はRubyです。
使用するモジュールはrubyamfです。
(ほかにもMidnightCoders WebORB for Railsというものもあるそうです。)

RubyAMF

  • まずはRailsプロジェクトの作成
$ rails hellorubyamf
$ cd hellorubyamf
(Railsが入ってない方は、「$gem install rails」でインストールしてね)
  • インストール
$ ruby script/plugin install http://rubyamf.googlecode.com/svn/tags/current/rubyamf
  • Webサーバを起動し、ブラウザでチェック
$ ruby script/server

http://localhost:3000/rubyamf/gateway にアクセス!
正常にインストールされていれば、RubyAMFのロゴ画像が表示されます。

Rails

  • app/controllersに移動し、service_controller.rbを作成
$ vi service_controller.rb
class ServiceController < ApplicationController
        def returnName
                render :amf => params[0] + "さん、こんにちわ"
        end
end

Flex

今回も前回Flexのソースとほぼ一緒で、connection先が変わるだけ。

connection.connect("http://localhost:3000/rubyamf/gateway");

完全なソースは下記に記します

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import flash.net.*;

            // データ送信
			private function doRequest():void{
				// レスポンダーを作成
				var responder:Responder = new Responder(onSuccess, onFault);
				// コネクションの作成
				var connection:NetConnection = new NetConnection();
				
				// コネクト
				connection.connect("http://localhost:3000/rubyamf/gateway");

				connection.objectEncoding = ObjectEncoding.AMF3;

				// ServiceクラスのreturnNameメソッドを呼び出す
				connection.call("Service.returnName", responder, nameText.text);
			}
			
			// データ取得成功
			private function onSuccess(e:*):void{
				// 返却値をAlertで表示
				Alert.show(e.toString());
			}
			
			// データ取得失敗
			private function onFault(e:*):void{
				Alert.show("通信失敗");
			}
			
			
		]]>
	</mx:Script>
	<mx:TextInput x="10" y="36" id="nameText" />
	<mx:Button label="Submit" id="idTest" click="doRequest()" x="10" y="66"/>
	<mx:Label x="10" y="10" text="name" color="#FFFFFF"/>
</mx:Application>