この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回に引き続きBlazeDSです。
Push通信する際にサーバサイドで何か処理をしたい場合はServiceAdapterを拡張したクラスを作ります。
先日作ったサンプルはクライアント間でメッセージをやりとりするだけでしたが、今回はメッセージの後に時刻を表示してみます。
先日作ったPush通信のサンプルは以下になります。
BlazeDSの設定とAMF通信のサンプル
サーバ側のソースになります。
SampleBlazeDS/WEB-INF/src/adapter以下に実装して下さい。
package adapter;
import java.text.SimpleDateFormat;
import java.util.Date;
import flex.messaging.messages.Message;
import flex.messaging.services.MessageService;
import flex.messaging.services.ServiceAdapter;
public class CustomServiceAdapter extends ServiceAdapter {
@Override
public Object invoke(Message message) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
message.setBody(message.getBody() + " " + sdf.format(new Date()));
MessageService msgService = (MessageService)getDestination().getService();
msgService.pushMessageToClients(message, true);
msgService.sendPushMessageFromPeer(message, true);
return null;
}
}
次にSampleBlazeDS/WEB-INF/flex以下にあるmessaging-config.xmlを修正します。
修正点は
①adaptersタグの中でアダプターを定義する。
②destinationタグの中で定義したアダプターと紐づける。
の2点です。
<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service"
class="flex.messaging.services.MessageService">
<adapters>
<adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
<!-- <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> -->
<adapter-definition id="customAdapter" class="adapter.CustomServiceAdapter"/>
</adapters>
<default-channels>
<channel ref="my-polling-amf"/>
</default-channels>
<destination id="sample2">
<channels>
<channel ref="my-polling-amf"/>
</channels>
<adapter ref="customAdapter"/>
</destination>
</service>
Tomcatを再起動してからPush通信のサンプルクライアントのボタンを押して、
Hello World2! の後に時刻が表示されたら成功です。