DDE for Javaで楽天RSS

JavaPartのツールでサンプルを作ってみた。
DDE for Java楽天RSSのDDEサーバと通信するコード。こんな感じ。

サービスがRSS、トピックが銘柄コード(+市場コード)、アイテムが現在値とか出来高とかになるらしい。


コールドリンクは、
Conversation#requestの戻り値に値がかえってきて、
ホットリンクは
Conversation#startAdviceで取得を開始し、値は変更されたときにDDEEventListenerに通知される。


なお、ツール付属サンプルの他に、以下の記事を参考にしました。
C#+オリジナルdllですが、サンプルおよび解説がわかりやすい。


DdeUtils サンプル解説
http://blog.livedoor.jp/motta500/archives/cat_50035390.html



import java.util.ArrayList;
import java.util.List;

import com.javaparts.dde.AsyncCompletedEvent;
import com.javaparts.dde.Conversation;
import com.javaparts.dde.DDEClient;
import com.javaparts.dde.DDEEvent;
import com.javaparts.dde.DDEEventListener;
import com.javaparts.dde.ItemChangedEvent;

public class RssDdeSample {

public static void main(String[] args) throws Exception {
DDEClient client = DDEClient.getInstance();
List conversations = new ArrayList();

try {
client.addDDEEventListener(new DDEEventListener(){

@Override
public void onAsyncCompleted(AsyncCompletedEvent arg0) {
System.out.println("onAsyncCompleted");
}

@Override
public void onDisconnect(DDEEvent arg0) {
System.out.println("onDisconnect");
}

@Override
public void onItemChanged(ItemChangedEvent event) {
System.out.println("Topic=" + event.getConversation().getTopic()
+ ",ItemName=" + event.getItemName()
+ ",ItemValue=" + new String(event.getItemValue()));
}});

String[] codes = new String[]{
"4751.T",
"2337.OJ"
};
String[] names = new String[]{
"銘柄名称",
"現在値",
"出来高",
};

for (String code : codes) {
Conversation conversation = client.connect("RSS", code);

for (String name : names) {
//コールドリンクで値を取得
byte[] value = conversation.request(name, 1000 * 10);
System.out.println("result,topic=" + code
+ ",name=" + name + ",value=" + new String(value));

//ホットリンクで値を取得。結果はリスナーに通知
conversation.startAdvice(name);
}
conversations.add(conversation);
}

System.in.read();//何か待機処理

} finally{

for (Conversation conversation : conversations) {
try {conversation.close();} catch (Exception ignore) {}
}

client.close();
}

System.out.println("end");
}

}