亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pushletclient.java

?? Java下Comet的實現(xiàn)框架Pushlet例子。 實現(xiàn)實時推送數(shù)據(jù)到客戶端。 服務器每隔30-500MS產生一個隨機數(shù)
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
			// Stop and report error.
			warn("doControl() exception", t);
			throw new PushletException(" error parsing response from" + controlURL, t);
		}
	}

	/**
	 * Util: print.
	 */
	private void p(String s) {
		if (debug) {
			System.out.println("[PushletClient] " + s);
		}
	}

	/**
	 * Util: warn.
	 */
	private void warn(String s) {
		warn(s, null);
	}

	/**
	 * Util: warn with exception.
	 */
	private void warn(String s, Throwable t) {
		System.err.println("[PushletClient] - WARN - " + s + " ex=" + t);

		if (t != null) {
			t.printStackTrace();
		}
	}

	/**
	 * Internal listener for the Pushlet data channel.
	 */
	private class DataEventListener implements Runnable {
		/**
		 * Client's listener that gets called back on events.
		 */
		private PushletClientListener listener;

		/**
		 * Receiver receiveThread.
		 */
		private Thread receiveThread = null;
		private Reader reader;
		private String refreshURL;
		private String listenURL;

		public DataEventListener(PushletClientListener aListener, String aListenURL) {
			listener = aListener;
			listenURL = aListenURL;
		}

		public void start() {
			// All ok: start a receiver receiveThread
			receiveThread = new Thread(this);
			receiveThread.start();

		}

		/**
		 * Stop listening; may restart later with start().
		 */
		public void stop() {
			p("In stop()");
			bailout();
		}

		/**
		 * Receive event objects from server and callback listener.
		 */
		public void run() {
			p("Start run()");
			try {
				while (receiveThread != null && receiveThread.isAlive()) {
					// Connect to server
					reader = openURL(listenURL);

					synchronized (this) {
						// Inform the calling thread we're ready to receive events.
						// Suggestion by Jeff Nowakowski 29.oct.2006
						this.notify();
					}

					// Get events while we're alive.
					while (receiveThread != null && receiveThread.isAlive()) {
						Event event = null;
						try {
							// p("Getting event...");
							// Get next event from server
							event = EventParser.parse(reader);
							
							//就是這。每次OnData 和 OnHeartBeat時都輸出event
							//p("Event received " + event);
						} catch (Throwable t) {

							// Stop and report error.
							// warn("Stop run() on exception", t);
							if (listener != null) {
								listener.onError("exception during receive: " + t);
							}

							break;
						}

						// Handle event by calling listener
						if (event != null && listener != null) {
							// p("received: " + event.toXML());
							String eventType = event.getEventType();
							if (eventType.equals(E_HEARTBEAT)) {
								listener.onHeartbeat(event);
							} else if (eventType.equals(E_DATA)) {
								listener.onData(event);
							} else if (eventType.equals(E_JOIN_LISTEN_ACK)) {
								id = event.getField(P_ID);
							} else if (eventType.equals(E_LISTEN_ACK)) {
								p("Listen ack ok");
							} else if (eventType.equals(E_REFRESH_ACK)) {
								// ignore
							} else if (eventType.equals(E_ABORT)) {
								listener.onAbort(event);
								listener = null;
								break;
							} else if (eventType.equals(E_REFRESH)) {
								refresh(event);
							} else {
								warn("unsupported event type received: " + eventType);
							}
						}
					}
				}
			} catch (Throwable t) {
				warn("Exception in run() ", t);
				// bailout();
			}
		}

		private void disconnect() {
			p("start disconnect()");
			if (reader != null) {
				try {
					// this blocks, find another way
					// reader.close();
					p("Closed reader ok");
				} catch (Exception ignore) {
				} finally {
					reader = null;
				}
			}
			p("end disconnect()");
		}

		/**
		 * Stop receiver receiveThread.
		 */
		public void stopThread() {
			p("In stopThread()");

			// Keep a reference such that we can kill it from here.
			Thread targetThread = receiveThread;

			receiveThread = null;

			// This should stop the main loop for this receiveThread.
			// Killing a receiveThread on a blcing read is tricky.
			// See also http://gee.cs.oswego.edu/dl/cpj/cancel.html
			if ((targetThread != null) && targetThread.isAlive()) {

				targetThread.interrupt();

				try {

					// Wait for it to die
					targetThread.join(500);
				} catch (InterruptedException ignore) {
				}

				// If current receiveThread refuses to die,
				// take more rigorous methods.
				if (targetThread.isAlive()) {

					// Not preferred but may be needed
					// to stop during a blocking read.
					targetThread.stop();

					// Wait for it to die
					try {
						targetThread.join(500);
					} catch (Throwable ignore) {
					}
				}

				p("Stopped receiveThread alive=" + targetThread.isAlive());

			}
		}

		/**
		 * Stop listening on stream from server.
		 */
		public void bailout() {
			p("In bailout()");
			stopThread();
			disconnect();
		}

		/**
		 * Handle refresh, by pausing.
		 */
		private void refresh(Event aRefreshEvent) throws PushletException {
			try {
				// Wait for specified time.
				Thread.sleep(Long.parseLong(aRefreshEvent.getField(P_WAIT)));
			} catch (Throwable t) {
				warn("abort while refresing");
				refreshURL = null;
				return;
			}

			// If stopped during sleep, don't proceed
			if (receiveThread == null) {
				return;
			}

			// Create url to refresh
			refreshURL = pushletURL
					+ "?" + P_ID + "=" + id
					+ "&" + P_EVENT + "=" + E_REFRESH
					;

			if (reader != null) {
				try {
					reader.close();

				} catch (IOException ignore) {

				}
				reader = null;
			}

			reader = openURL(refreshURL);
		}
	}

	/**
	 * Authenticator
	 */
	private static class HTTPAuthenticateProxy extends Authenticator {

		/**
		 * Contributed by Dele Olajide
		 * See http://groups.yahoo.com/group/pushlet/message/634
		 */

		private String thePassword = "";
		private String theUser = "";

		public HTTPAuthenticateProxy(String username, String password) {

			thePassword = password;
			theUser = username;
		}

		protected PasswordAuthentication getPasswordAuthentication() {
			// System.out.println("[HttpAuthenticateProxy] Username = " + theUser);
			// System.out.println("[HttpAuthenticateProxy] Password = " + thePassword);

			return new PasswordAuthentication(theUser, thePassword.toCharArray());
		}

	}

}

/*
 * $Log: PushletClient.java,v $
 * Revision 1.18  2007/11/10 13:52:47  justb
 * make startDataEventListener method protected to allow overriding
 *
 * Revision 1.17  2006/10/29 16:47:57  justb
 * included patch from Jeff Nowakowski: wait until listener thread runs
 *
 * Revision 1.16  2005/05/06 20:08:20  justb
 * client enhancements
 *
 * Revision 1.15  2005/03/27 17:42:27  justb
 * enhancements
 *
 * Revision 1.14  2005/03/25 23:54:04  justb
 * *** empty log message ***
 *
 * Revision 1.13  2005/02/28 16:59:40  justb
 * fixes for leave and disconnect
 *
 * Revision 1.12  2005/02/28 15:57:54  justb
 * added SimpleListener example
 *
 * Revision 1.11  2005/02/21 12:31:44  justb
 * added proxy contribution from Dele Olajide
 *
 * Revision 1.10  2005/02/20 13:05:32  justb
 * removed the Postlet (integrated in Pushlet protocol)
 *
 * Revision 1.9  2005/02/18 10:07:23  justb
 * many renamings of classes (make names compact)
 *
 * Revision 1.8  2005/02/18 09:54:12  justb
 * refactor: rename Publisher Dispatcher and single Subscriber class
 *
 * Revision 1.7  2005/02/15 15:46:30  justb
 * client API improves
 *
 * Revision 1.6  2005/02/15 13:28:56  justb
 * first quick rewrite adapt for v2 protocol
 *
 * Revision 1.5  2004/10/25 21:23:44  justb
 * *** empty log message ***
 *
 * Revision 1.4  2004/10/24 13:52:51  justb
 * small fixes in client lib
 *
 * Revision 1.3  2004/10/24 12:58:18  justb
 * revised client and test classes for new protocol
 *
 * Revision 1.2  2004/09/03 22:35:37  justb
 * Almost complete rewrite, just checking in now
 *
 * Revision 1.1  2004/03/10 20:14:17  justb
 * renamed all *JavaPushletClient* to *PushletClient*
 *
 * Revision 1.10  2004/03/10 15:45:55  justb
 * many cosmetic changes
 *
 * Revision 1.9  2003/08/17 20:30:20  justb
 * cosmetic changes
 *
 * Revision 1.8  2003/08/15 08:37:40  justb
 * fix/add Copyright+LGPL file headers and footers
 *
 *
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合免费观看高清完整版在线 | 日韩国产欧美一区二区三区| 国产精品乱人伦中文| 日韩精品中午字幕| 欧美日韩一卡二卡三卡| 欧美这里有精品| 在线电影国产精品| 欧美草草影院在线视频| 成人午夜视频免费看| 精品一二线国产| 国产精品中文字幕一区二区三区| 国产福利一区二区三区视频在线 | 国产人成一区二区三区影院| 精品88久久久久88久久久| 久久精品一区二区三区四区| 国产精品二三区| 日韩二区在线观看| 成人美女在线观看| 日韩一区二区在线观看视频| 国产欧美一区二区三区网站| 一区二区三区不卡视频在线观看| 麻豆91精品视频| 99在线精品视频| 精品国内片67194| 一区二区三区中文免费| 国产精品99久| 日韩欧美国产午夜精品| 亚洲精品国产高清久久伦理二区| 免费观看在线色综合| 欧美视频在线观看一区| 国产精品成人免费在线| 美女视频第一区二区三区免费观看网站| 成人精品国产一区二区4080| 日韩免费高清电影| 亚洲永久精品大片| 97精品久久久久中文字幕| 国产精品乱码人人做人人爱 | 国产女人aaa级久久久级| 日本vs亚洲vs韩国一区三区 | 免费成人在线观看| 欧美三级资源在线| 亚洲国产精品欧美一二99| 色综合天天天天做夜夜夜夜做| 国产区在线观看成人精品| 国产麻豆一精品一av一免费| 精品伦理精品一区| 丁香激情综合五月| 亚洲三级电影全部在线观看高清| 92精品国产成人观看免费| 尤物av一区二区| 3d动漫精品啪啪| 婷婷中文字幕综合| 欧美性猛片aaaaaaa做受| 午夜欧美一区二区三区在线播放| 国产成人午夜精品影院观看视频 | 欧美激情一区二区在线| 成人免费三级在线| 亚洲综合免费观看高清完整版 | 青草国产精品久久久久久| 日韩三级电影网址| 国产成人免费在线观看不卡| 亚洲人快播电影网| 日韩美女一区二区三区四区| 高清不卡在线观看av| 亚洲va韩国va欧美va| 久久久精品免费观看| 在线看日韩精品电影| 国产激情精品久久久第一区二区| 亚洲欧美视频一区| 国产日韩精品久久久| 日韩一区二区精品葵司在线| 成人av综合在线| 九一久久久久久| 精品国产成人在线影院 | 一片黄亚洲嫩模| 精品精品国产高清a毛片牛牛 | 男男gaygay亚洲| 亚洲国产日产av| 亚洲国产日韩a在线播放性色| 国产精品毛片久久久久久| 久久久影院官网| 亚洲精品在线免费观看视频| 欧美色男人天堂| 精品视频一区二区不卡| 色婷婷av久久久久久久| 成人国产精品视频| 中文字幕在线观看一区二区| 日韩三级电影网址| 欧美三级视频在线观看| 国产成人精品免费网站| 激情av综合网| 青青草91视频| 国模冰冰炮一区二区| 男人的天堂久久精品| 美女一区二区久久| 日本aⅴ精品一区二区三区 | 国产高清不卡二三区| 极品尤物av久久免费看| 久久精品国产亚洲高清剧情介绍| 亚洲最大的成人av| 亚洲一区二区在线观看视频| 中文字幕精品一区二区三区精品| 国产传媒久久文化传媒| 国产二区国产一区在线观看| av在线播放不卡| 91黄色在线观看| 日韩一区二区三区视频在线观看| 日韩午夜小视频| 一区二区三区日本| 色8久久精品久久久久久蜜| 极品少妇xxxx精品少妇偷拍| 成人av在线影院| 欧美日韩一区二区在线观看| 538prom精品视频线放| 亚洲国产精品成人久久综合一区| 国产精品福利在线播放| 五月综合激情日本mⅴ| 国产精品亚洲视频| 欧美三级在线看| 国产蜜臀97一区二区三区| 夜夜嗨av一区二区三区中文字幕 | 国产精品久久久久久久裸模| 国产精品久久精品日日| 日韩精品每日更新| 99久久精品免费精品国产| 欧美精品视频www在线观看| 久久综合色天天久久综合图片| 亚洲国产一区二区三区| 亚洲精品国产a| 成人小视频免费在线观看| 日韩一级黄色大片| 一区二区三区久久久| eeuss影院一区二区三区| 欧美成人一区二区三区| 亚洲一二三四区| 99国产精品一区| 综合久久给合久久狠狠狠97色| 激情综合一区二区三区| 精品日韩一区二区| 精品一区二区免费看| 欧美日韩国产经典色站一区二区三区| 国产人久久人人人人爽| 国产精品一区不卡| 国产性色一区二区| 国产精品一区二区久久精品爱涩| 精品成人免费观看| 精品一区二区三区的国产在线播放 | 成人免费观看av| 亚洲激情中文1区| 欧美性一区二区| 日韩二区三区四区| 欧美极品少妇xxxxⅹ高跟鞋 | 美国精品在线观看| 国产亚洲精品免费| 色综合一区二区三区| 亚洲一区二区视频在线| 日韩午夜中文字幕| 懂色av中文字幕一区二区三区| 国产精品不卡一区二区三区| 91美女在线观看| 精品午夜久久福利影院| 亚洲国产精品99久久久久久久久| 91久久精品一区二区三区| 日韩中文字幕一区二区三区| 久久美女高清视频| 欧美三级日韩在线| 国产精品自在在线| 日韩精品一级二级 | 国产精品美女久久久久久2018| 在线观看三级视频欧美| 国产成人免费在线| 青青草精品视频| 亚洲国产精品欧美一二99| 久久精品夜色噜噜亚洲a∨| 欧美中文字幕一区二区三区亚洲| 国产成人av影院| 欧美一级片免费看| 亚洲一区二区不卡免费| 国产亚洲精品超碰| 欧美电影免费观看高清完整版在 | 91色综合久久久久婷婷| 国产一区二区女| 蜜臀av性久久久久av蜜臀妖精| 亚洲精品中文字幕在线观看| 久久久av毛片精品| 欧美大片日本大片免费观看| 91搞黄在线观看| 91福利国产成人精品照片| 97精品久久久午夜一区二区三区 | 色狠狠av一区二区三区| 免费在线观看日韩欧美| 日韩精品电影在线| 精品一区免费av| 麻豆91小视频| 国产一区二区三区观看| 国产精品99久久久久久似苏梦涵| 国产成人免费视频网站| av亚洲精华国产精华精| 国产一区欧美日韩| 91亚洲午夜精品久久久久久|