📄 simpleechobayeuxclient.java
字号:
package org.mortbay.cometd.client;import java.io.InputStreamReader;import java.io.LineNumberReader;import java.util.Map;import java.util.Timer;import org.mortbay.cometd.AbstractBayeux;import org.mortbay.jetty.client.Address;import org.mortbay.jetty.client.HttpClient;import org.mortbay.thread.QueuedThreadPool;import org.mortbay.util.ajax.JSON;import org.cometd.Bayeux;import org.cometd.Client;import org.cometd.Message;import org.cometd.MessageListener;/** * SimpleEchoBayeuxClient * * A rather silly java client for Bayeux that prints out messages * received on a channel. As the client interactively prompts the * user for input to send on the channel, the effect is to echo * back the messages. */public class SimpleEchoBayeuxClient{ public static long _id = 0; String _who; BayeuxClient _client; Timer _timer; HttpClient _httpClient; boolean _connected; public SimpleEchoBayeuxClient(String host, int port, String uri, String who) throws Exception { _who = who; if (_who == null) _who = "anonymous"; _timer = new Timer("SharedBayeuxClientTimer", true); _httpClient = new HttpClient(); _httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); _httpClient.setMaxConnectionsPerAddress(40000); QueuedThreadPool pool = new QueuedThreadPool(); pool.setMaxThreads(500); pool.setDaemon(true); _httpClient.setThreadPool(pool); _httpClient.start(); Address address = new Address (host,port); _client = new BayeuxClient(_httpClient,address,uri,_timer) { public void metaConnect(boolean success,Message message) { super.metaConnect(success,message); if (success && !_connected) { System.err.println("Reconnected!"); } else if (!success && _connected) { System.err.println("Server disconnected"); } _connected = success; } public void metaHandshake(boolean success, boolean reestablish,Message message) { super.metaHandshake(success,reestablish,message); if (success && reestablish) { _client.subscribe("/foo/alpha"); System.err.println("Resubscribed"); } } public void metaPublishFail(Throwable th,Message[] messages) { super.metaPublishFail(th,messages); } }; _client.addListener (new MessageListener () { public void deliver(Client fromClient, Client toClient, Message msg) { if (msg == null) return; if ("/foo/alpha".equals(msg.getChannel())) { Object data=(Object)msg.get(AbstractBayeux.DATA_FIELD); String user = "unknown"; if (data!=null) { user = (String)((Map)data).get("user"); String chat = (String)((Map)data).get("chat"); if (user == null) user = "unknown"; if (user.equals(_who)) user = "I"; System.err.println("\n\t"+user+" said: "+chat); } } } }); } public void start () throws Exception { _client.start(); _client.subscribe("/foo/alpha"); Object msg=new JSON.Literal("{\"user\":\""+_who+"\",\"chat\":\"Has joined\"}"); _client.publish("/foo/alpha", msg, String.valueOf(_id++)); _connected = true; } public void stop () throws Exception { _client.stop(); _connected = false; } public void publish (String say) { Object msg=new JSON.Literal("{\"user\":\""+_who+"\",\"chat\":\""+say+"\"}"); _client.publish("/foo/alpha", msg, String.valueOf(_id++)); } public static final void main(String[] args) { try { //arg0: server url String serverCometdUrl = (args.length > 0? args[0] : "/cometd/cometd"); //arg1: server port int serverPort = (args.length >= 2 ? Integer.valueOf(args[1]).intValue() : 8080); //arg2: username (not necessary) String user = (args.length >= 3 ? args[2] : "anonymous"); SimpleEchoBayeuxClient sbc = new SimpleEchoBayeuxClient("localhost", serverPort, serverCometdUrl, user); sbc.start(); LineNumberReader in = new LineNumberReader(new InputStreamReader(System.in)); while (true) { try { System.err.print("Enter something to say > "); String say = in.readLine().trim(); /* * Only here for testing */ if (say.equalsIgnoreCase("stop")) sbc.stop(); else if (say.equalsIgnoreCase("start")) sbc.start(); else sbc.publish (say); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -