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であることを送信すると、メッセージの定点送信が可能になる.