pusshlet学習二
2876 ワード
pusshletの公式サイトには多くの例があります.http://www.pushlets.com/pushlet/examples/pushlet.htmlを参照してください.この中にwebimの例があります.これはチャットルームの機能です.ポイントのチャットモードに変更したらどうしますか?
大体二つの方法があります.
クライアントjsを修正すると、メッセージを入手して、受信者の表示と現在のユーザが一致しているかどうかを判断し、一致しない場合は表示しない.
第二に、pusshletのソースコードを修正して、ソースコードをよく調べたら分かります.Session Manager.javaの中でcreateSession方法は、乱数でsession idを生成したものです.乱数のsession id idは明らかに正確な検索要求を満たすことができません.このコードを書き換える必要があります.loginameはurlのパラメータ形式で伝達され、元の方法を以下に変更します.
/**
* Create new Session (but add later).
*/
public Session createSession(Event anEvent) throws PushletException {
// Trivial
//return Session.create(createSessionId()); , session id
return Session.create(anEvent.getField("uid"));
}
Controller.javaの中のdoPublishの方法を更に調べます.
protected void doPublish(Command aCommand) {
Event responseEvent = null;
try {
String subject = aCommand.reqEvent.getField(Protocol.P_SUBJECT);
if (subject == null) {
// Return error response
responseEvent = new Event(E_NACK);
responseEvent.setField(P_ID, session.getId());
responseEvent.setField(P_REASON, "no subject provided");
} else {
aCommand.reqEvent.setField(P_FROM, session.getId());
aCommand.reqEvent.setField(P_EVENT, E_DATA);
// Event may be targeted to specific user (p_to field)
String to = aCommand.reqEvent.getField(P_TO);
if (to != null) {
Dispatcher.getInstance().unicast(aCommand.reqEvent, to);
} else {
// No to: multicast
debug("doPublish() event=" + aCommand.reqEvent);
Dispatcher.getInstance().multicast(aCommand.reqEvent);
}
// Acknowledge
responseEvent = new Event(E_PUBLISH_ACK);
}
} catch (Throwable t) {
responseEvent = new Event(E_NACK);
responseEvent.setField(P_ID, session.getId());
responseEvent.setField(P_REASON, "unexpected error: " + t);
warn("doPublish() error: " + t);
t.printStackTrace();
} finally {
// Always set response event in command
aCommand.setResponseEvent(responseEvent);
}
}
その中の
String to = aCommand.reqEvent.getField(P_TO);
if (to != null) {
Dispatcher.getInstance().unicast(aCommand.reqEvent, to);
}
メッセージを送るときに送信する人を指定すると、その人に単独で送信され、ラジオで送信されないことを表明しました.このように、pusshletのsession IDの生成方式を変更するだけで、メッセージが受信者を指定するsession IDであることを送信すると、メッセージの定点送信が可能になる.