AIR+Blaze+Ruby
- 4. masuidrive
現在フリーランス
10分Railsムービー
アバウトミー / PingKing
PukiWiki
3月に起業で渡米
- 31. AIR AIR ブラウザ
BlazeDS
JRuby on Rails
- 32. 言语 UI
AIR
(Flash) ActionScript3 MXML
AIR
(HTML) Javascript HTML
BlazeDS Java ー
Rails Ruby HTML
- 33. 言语 UI
AIR
(Flash) ActionScript3 MXML
AIR
(HTML) Javascript HTML
BlazeDS Java ー
Rails Ruby HTML
- 34. 言语 UI
AIR
まて。
(Flash)
AIR
ActionScript3 MXML
(HTML) Javascript HTML
全部違わないか?
BlazeDS Java ー
Rails Ruby HTML
- 44. $ cp -R tomcat/webapps/blazeds
tomcat/webapps/instantmessenger
ひな形をコピー後
service-con?g.xml
messaging-con?g.xmlを
書き換える
- 45. messaging-con?g.xml
<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service" class="?ex.messaging.services.MessageSer
vice">
<adapters>
<adapter-de?nition id="actionscript" class="?ex.messaging.services.me
ssaging.adapters.ActionScriptAdapter" default="true" />
<adapter-de?nition id="jms" class="?ex.messaging.services.messaging
.adapters.JMSAdapter"/>
</adapters>
<default-channels>
<channel ref="my-streaming-amf"/>
<channel ref="my-polling-amf"/>
</default-channels>
<destination id="chat"/>
</service>
- 55. AIR AIR AIR
steam steam polling
chat
BlazeDS
- 70. AIR AIR AIR
steam steam polling
chat
BlazeDS
- 71. AIR AIR AIR
Producer Consumer Consumer
steam steam polling
chat
BlazeDS
- 73. AIR
channel
steam polling
BlazeDS
- 74. AIR
channel
Producer steam polling
BlazeDS
- 77. channels
steam polling
private var channels:Array = [];
var streaming_amf:StreamingAMFChannel =
new StreamingAMFChannel("my-streaming-amf", "http://127.0.0.1:
8400/instantmessenger/messagebroker/streamingamf");
channels.push(streaming_amf);
var polling_amf:AMFChannel =
new AMFChannel("my-polling-amf", "http://127.0.0.1:8400/instant
messenger/messagebroker/amfpolling");
polling_amf.pollingEnabled = true;
polling_amf.pollingInterval = 3000;
channels.push(polling_amf);
- 79. Producer
channels
(chat)
var prod:Producer = new Producer();
prod.destination = "chat";
prod.channelSet = new ChannelSet();
for(index in channels) {
prod.channelSet.addChannel(channels[index]);
}
prod.connect();
- 81. Producer
{ message: “hoge” }
(chat)
var message:IMessage = new AsyncMessage();
message.body = new Object();
message.body.message = "hoge";
prod.send(message);
- 86. AIR
channel
steam polling
BlazeDS
chat
- 87. AIR
channel
Consumer steam polling
BlazeDS
chat
- 89. log.value += message
ハンドラー登録
AIR
channel
Consumer steam polling
BlazeDS
{ message: “hoge” }
chat
- 90. log.value += message
ハンドラー登録
AIR
呼び出し
channel
Consumer steam polling
BlazeDS
{ message: “hoge” }
chat
- 91. Consumer
messageHandler channels
(chat)
var cons:Consumer cons = new Consumer();
cons.destination = "chat";
cons.channelSet = new ChannelSet();
for(var index:String in channels) {
cons.channelSet.addChannel(channels[index]);
}
cons.addEventListener(MessageEvent.MESSAGE,
messageHandler);
- 111. メッセージ送信部分
broker = MessageBroker.getMessageBroker(nil)
msg = AsyncMessage.new
msg.setDestination "chat"
msg.setClientId UUIDUtils.createUUID
msg.setMessageId UUIDUtils.createUUID
msg.setTimestamp Time.now.to_f*1000
message_body = req.get_parameter("message") ?? ""
msg.setBody({'message' => message_body})
broker.routeMessageToService(msg, nil)