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

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

?? testeventpushsourcesrfid.java

?? Java下Comet的實現框架Pushlet例子。 實現實時推送數據到客戶端。 服務器每隔30-500MS產生一個隨機數
?? JAVA
字號:
// Copyright (c) 2000 Just Objects B.V. <just@justobjects.nl>
// Distributable under LGPL license. See terms of license at gnu.org.

package nl.justobjects.pushlet.test;

import nl.justobjects.pushlet.core.Dispatcher;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.EventSource;
import nl.justobjects.pushlet.util.Rand;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.StringTokenizer;
import java.util.Vector;

/**
 * Event sources that push events (for testing).
 *
 * @author Just van den Broecke - Just Objects &copy;
 * @version $Id: TestEventPushSources.java,v 1.10 2007/11/09 13:16:57 justb Exp $
 */
public class TestEventPushSourcesRFID {

	static public class AEXStocksEventPushSourceABNRFID {
		String pageURL ="HTTP://www.RFID.com";
//		String pageURL = "http://ri2.rois.com/E36msPtnZC0e15CVb4KT97JAGfGSfCcrvv6*FcyZIoNyh/CTIB/RI2APISNAP?RIC=0%23.AEX&FORMAT=XML";
		// This could be further expanded: getting the Reuters AEX stocks
		// as XML from ABN with this URL, but we may get into legal problems...
	}

	/**
	 * Produces events from REAL stocks from the AEX.
	 */
	static public class AEXStocksEventPushSourceRFID implements EventSource, Runnable {
		/**
		 * Here we get our stocks from.
		 */
		String pageURL ="HTTP://www.RFID.com";
//		String pageURL = "http://www.debeurs.nl/koersen/aex.asp";
		Thread thread = null;
		volatile boolean active = false;

		// Since Baan has been thrown out...         
		public final static int NR_OF_STOCKS = 20;

		public final static String EMPTY = "wait...";
		private int restarts = 1;

		class Stock {
			public String name = EMPTY;
			public String rate = EMPTY;
			volatile public boolean modified = false;
		}

		Vector stocksCache = new Vector(NR_OF_STOCKS);

		public AEXStocksEventPushSourceRFID() {
			for (int i = 0; i < NR_OF_STOCKS; i++) {
				stocksCache.addElement(new Stock());
			}
			 updateCache();
		}

		/**
		 * Activate the event source.
		 */
		synchronized public void activate() {
			e("activating...");
			// Stop a possibly running thread
			stopThread();

			// Start new thread and
			thread = new Thread(this, "AEXStocksPublisher-" + (restarts++));
			active = true;
			thread.start();
			e("activated");
		}

		/**
		 * Deactivate the event source.
		 */
		synchronized public void passivate() {
			e("passivating...");
			active = false;
			stopThread();

			// Mark the cache modified so we'll send the contents
			// on the next activation.
			for (int i = 0; i < NR_OF_STOCKS; i++) {
				((Stock) stocksCache.elementAt(i)).modified = true;
			}

			e("passivated");
		}


		/**
		 * Deactivate the event source.
		 */
		synchronized public void stop() {
		}

		public void run() {
			// Publish cache content (if any) first.
			publishStocks();

			int count = 5; // enforce update first
			while (active) {

				// Only do work if active
				// Update cache every 10 secs.
				if (count == 5) {
					updateCache();
					count = 0;
				}
				count++;

				// Do updates for changed stock rates
				sendUpdates();

				// If we were interrupted just return.
				if (thread == null || thread.isInterrupted()) {
					break;
				}

				// Sleep 2 secs before sending next updates
				try {
					Thread.sleep(1000);
				} catch (InterruptedException ie) {
					break;
				}
			}

			// Loop terminated: reset vars
			thread = null;
			active = false;
		}

		private String getStocksLine() {
			BufferedReader br = null;
			InputStream is = null;
			String nextLine = "";

			// Read line from server
			try {
				is = new URL(pageURL).openStream();
				br = new BufferedReader(new InputStreamReader(is));
				boolean foundLine = false;
				while (!foundLine) {
					nextLine = br.readLine();
					if (nextLine == null) {
						return "";
					}
					foundLine = (nextLine.indexOf("details.asp?iid=14053&parent=aex") != -1);
				}
			} catch (Exception e) {
				e("could not open or read URL pageURL=" + pageURL + " ex=" + e);
				return "";
			} finally {
				try {
					if (is != null) is.close();
				} catch (IOException ignore) {
				}
			}
			return nextLine;
		}

		private void publishStocks() {
			// Publish only modified stocks from the cache
			for (int i = 0; i < NR_OF_STOCKS; i++) {
				Stock nextStock = (Stock) stocksCache.elementAt(i);

				// Publish modified stocks
				if (nextStock.modified) {
					publishStock(i, nextStock.name, nextStock.rate);
					nextStock.modified = false;
					try {
						Thread.sleep(100);
					} catch (InterruptedException ie) {
						return;
					}
				}
			}
		}

		private void publishStock(int index, String name, String rate) {
			Event event = Event.createDataEvent("/stocks/aex");
			event.setField("number", index + "");
			event.setField("name", name);
			event.setField("rate", rate);
			p("publish: nr=" + index + " name=" + name + " rate=" + rate);
			Dispatcher.getInstance().multicast(event);
		}

		private void sendUpdates() {
			p("sending updates");
			// In any case send a random stock value by
			// making it modified, just to see something moving...
			int randomIndex = Rand.randomInt(0, NR_OF_STOCKS - 1);
			Stock randomStock = (Stock) stocksCache.elementAt(randomIndex);
			randomStock.modified = true;

			publishStocks();
		}

		private void stopThread() {
			if (thread != null) {
				thread.interrupt();
				thread = null;
			}
		}

		private void updateCache() {
			p("updating Cache");

			// Get the line with all stocks from HTML page
			String stocksLine = getStocksLine();
			if ("".equals(stocksLine)) {
				e("updateCache: stocksLine == null");
				return;
			}

			// Parse the stocksline and put in cache.
			// Beware: this is the messy part!!
			// We assume that stock/names and rates are located at
			// regular positions in the line.
			String delim = "<>";
			StringTokenizer st = new StringTokenizer(stocksLine, delim);
			String nextToken = "";
			int count = 0;
			String nextStock = "";
			String nextQuote = "";
//			String currentQuote = null;
			int index = -1;
			while (st.hasMoreTokens()) {
				nextToken = st.nextToken();
				count++;
				// The <TD> with the stock name
				if ((count - 5) % 57 == 0) {
					p("c=" + count + " s=" + nextToken);
					nextStock = nextToken;
				}

				// The <TD> with the stock rate
				if ((count - 10) % 57 == 0) {
					nextQuote = nextToken;
					index++;
					p("c=" + count + " val=" + nextQuote);
					Stock currentStock = (Stock) stocksCache.elementAt(index);

					// Only update new or modified stocks
					if (EMPTY.equals(currentStock.rate) || !currentStock.rate.equals(nextQuote)) {
						p("modified: " + nextStock);
						currentStock.name = nextStock;
						currentStock.rate = nextQuote;
						currentStock.modified = true;
					}
				}
			}
		}
	}


	/**
	 * Util: stderr print method.
	 */
	public static void e(String s) {
		System.out.println("AEXStocksEventPushSource: " + s);
	}

	/**
	 * Util: stdout print method.
	 */
	public static void p(String s) {
		// System.out.println(s);
	}


	public static void main(String[] args) {
//		 new AEXStocksEventPushSource();
		

	}
}

/*
 * $Log: TestEventPushSources.java,v $
 * Revision 1.10  2007/11/09 13:16:57  justb
 * use Rand from util package (and and Rand.java to pushlet client jar
 *
 * Revision 1.9  2005/02/28 09:14:56  justb
 * sessmgr/dispatcher factory/singleton support
 *
 * Revision 1.8  2005/02/21 16:59:17  justb
 * SessionManager and session lease introduced
 *
 * Revision 1.7  2005/02/18 10:07:23  justb
 * many renamings of classes (make names compact)
 *
 * Revision 1.6  2005/02/18 09:54:15  justb
 * refactor: rename Publisher Dispatcher and single Subscriber class
 *
 * Revision 1.5  2004/09/03 22:35:37  justb
 * Almost complete rewrite, just checking in now
 *
 * Revision 1.4  2004/03/10 15:45:55  justb
 * many cosmetic changes
 *
 * Revision 1.3  2003/08/15 08:37:41  justb
 * fix/add Copyright+LGPL file headers and footers
 *
 * Revision 1.2  2003/05/18 16:15:08  justb
 * support for XML encoded Events
 *
 * Revision 1.1.1.1  2002/09/24 21:02:33  justb
 * import to sourceforge
 *
 * Revision 1.1.1.1  2002/09/20 22:48:20  justb
 * import to SF
 *
 * Revision 1.1.1.1  2002/09/20 14:19:02  justb
 * first import into SF
 *
 * Revision 1.6  2001/02/18 23:45:13  just
 * fixes for AEX
 *
 * Revision 1.5  2000/10/30 14:16:09  just
 * no message
 *
 * Revision 1.4  2000/09/24 21:02:43  just
 * chnages due to changed webpage in debeurs.nl
 *
 * Revision 1.3  2000/08/31 12:49:50  just
 * added CVS comment tags for log and copyright
 *
 *
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟精品一区| 丝袜诱惑亚洲看片| 中文字幕一区二区三| 一区二区高清视频在线观看| 午夜激情久久久| 高清在线不卡av| 欧美日韩国产小视频在线观看| 2022国产精品视频| 一区二区三区四区在线免费观看| 色天天综合色天天久久| 亚洲图片欧美视频| 97精品国产露脸对白| 日韩欧美不卡在线观看视频| 最新不卡av在线| 福利91精品一区二区三区| 亚洲欧美中日韩| 欧美性色综合网| 亚洲欧洲www| 欧美日本一道本| 精品亚洲国内自在自线福利| 欧美在线观看一区| 一区二区理论电影在线观看| 欧美精品xxxxbbbb| 亚洲成a天堂v人片| 欧美性大战久久| 精品中文字幕一区二区小辣椒| 国产女同互慰高潮91漫画| 久久国产乱子精品免费女| 欧美狂野另类xxxxoooo| 国产精品一品二品| 精品久久久久久最新网址| 日av在线不卡| 日韩精品中文字幕在线不卡尤物 | 亚洲男人的天堂在线观看| 国产精品一区二区不卡| 一区二区欧美精品| 国产日韩精品久久久| 777奇米成人网| 久久国产婷婷国产香蕉| 亚洲欧美日韩国产手机在线| 欧美mv和日韩mv国产网站| 欧美综合在线视频| 成人综合婷婷国产精品久久蜜臀 | 无码av免费一区二区三区试看| 精品福利在线导航| 国产剧情一区在线| 日韩av网站免费在线| 日韩免费看网站| 欧美视频一区二区在线观看| 国产成人啪午夜精品网站男同| 国产精品美女久久久久高潮| 91亚洲精品一区二区乱码| 国产精品久久久久久福利一牛影视| 成人激情免费电影网址| 亚洲自拍欧美精品| 欧美成人a视频| 欧美日韩精品欧美日韩精品| 91色在线porny| 成人天堂资源www在线| 韩国v欧美v日本v亚洲v| 中文字幕制服丝袜一区二区三区 | 成人不卡免费av| 国产呦精品一区二区三区网站| 欧美国产精品久久| 在线观看一区不卡| 99r国产精品| 99在线精品免费| 蜜臀av性久久久久蜜臀av麻豆| 久久新电视剧免费观看| 欧美日韩第一区日日骚| 欧美亚洲综合在线| 在线观看视频一区| 日本丶国产丶欧美色综合| 美腿丝袜亚洲综合| 美女免费视频一区| 久久电影国产免费久久电影| 久久精品国产**网站演员| 免费在线观看一区二区三区| 奇米影视一区二区三区| 美女任你摸久久| 国产麻豆欧美日韩一区| 国产一区二区导航在线播放| 国产福利视频一区二区三区| 成人午夜视频免费看| www.99精品| 欧美午夜精品理论片a级按摩| 欧美视频中文一区二区三区在线观看| 在线亚洲高清视频| 欧美日韩在线电影| 欧美经典三级视频一区二区三区| 久久综合久久久久88| 中文乱码免费一区二区| 国产午夜精品在线观看| 91福利资源站| 欧美日韩高清一区| 2021国产精品久久精品| 国产精品另类一区| 亚洲小少妇裸体bbw| 免费在线观看精品| 成人免费毛片app| 色又黄又爽网站www久久| 欧美日本不卡视频| 欧美精品一区二区三| 国产片一区二区| 亚洲综合男人的天堂| 男人的天堂亚洲一区| 粉嫩av一区二区三区在线播放| 欧美天堂一区二区三区| 美女视频一区在线观看| 成人丝袜18视频在线观看| 欧美亚洲精品一区| 久久综合资源网| 一区二区三区91| 美女www一区二区| 91麻豆swag| 日韩一区二区三区四区| 欧美午夜电影网| 2020国产精品久久精品美国| 亚洲激情av在线| 国产精品麻豆欧美日韩ww| 亚洲电影你懂得| 国v精品久久久网| 91麻豆精品久久久久蜜臀| 国产精品视频一二| 日韩激情视频网站| 97se亚洲国产综合自在线| 91精品国产一区二区三区香蕉| 91精品国产一区二区三区蜜臀 | 成人一区二区三区视频在线观看 | 久久综合狠狠综合久久综合88| 中文字幕日本不卡| 精品一区二区三区在线视频| 在线亚洲欧美专区二区| 国产嫩草影院久久久久| 日韩国产欧美在线播放| 色菇凉天天综合网| 欧美激情中文字幕| 久久99国内精品| 欧美精品aⅴ在线视频| 日韩毛片视频在线看| 国产高清不卡一区| 欧美成人精品3d动漫h| 一区二区三区在线观看视频| 国产一区二区三区在线观看免费 | 欧美亚洲一区二区在线| 国产精品素人一区二区| 久久99久久久久久久久久久| 欧美色爱综合网| 国产精品免费观看视频| 国产乱子轮精品视频| 日韩精品专区在线影院重磅| 亚洲国产va精品久久久不卡综合| 成人av网址在线| 国产蜜臀97一区二区三区 | 国产精品夜夜嗨| 精品国产91乱码一区二区三区| 视频一区在线播放| 欧美挠脚心视频网站| 亚洲国产精品一区二区久久恐怖片| 99精品一区二区| 日韩一区欧美小说| 波多野结衣在线一区| 国产女主播在线一区二区| 国产在线精品一区二区三区不卡 | 欧美日韩国产精品自在自线| 亚洲精品国产无天堂网2021| 91年精品国产| 亚洲欧美另类小说视频| 99久久国产综合色|国产精品| 中文字幕乱码日本亚洲一区二区 | 久久久久久久久伊人| 一区二区三区美女| 在线观看国产91| 亚洲国产日产av| 在线播放91灌醉迷j高跟美女| 亚洲国产精品影院| 欧美情侣在线播放| 日韩成人免费电影| 欧美一区二区精美| 国精产品一区一区三区mba视频| 日韩一级大片在线| 国产麻豆视频一区| 国产精品久久久久婷婷| 91色porny| 午夜精品福利一区二区三区av| 69精品人人人人| 国产一区二区免费视频| 欧美激情在线看| 91福利国产成人精品照片| 亚洲444eee在线观看| 5566中文字幕一区二区电影| 韩国成人精品a∨在线观看| 国产女人18毛片水真多成人如厕 | 91美女片黄在线观看| 香蕉av福利精品导航| 欧美videossexotv100| 懂色一区二区三区免费观看| 一区二区三区四区中文字幕| 精品剧情在线观看| 91丨九色丨黑人外教|