package hk.com.novare.cometclient; import org.cometd.Client; import org.cometd.Message; import org.cometd.MessageListener; import org.mortbay.cometd.AbstractBayeux; import org.mortbay.cometd.client.BayeuxClient; import org.mortbay.jetty.client.Address; import org.mortbay.jetty.client.ContentExchange; import org.mortbay.jetty.client.HttpClient; import org.mortbay.util.ajax.JSON; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; public class CometClientActivity extends Activity { private volatile boolean running; private Button fireButton = null; private Handler labelHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { if (fireButton != null) { fireButton.setText((String) msg.obj); } } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fireButton = (Button) findViewById(R.id.fireButton); fireButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { new Thread(new Runnable() { public void run() { if (running == false) { android.os.Message m = labelHandler.obtainMessage(0, "Stop"); labelHandler.sendMessage(m); running = true; goDojo(); } else { android.os.Message m = labelHandler.obtainMessage(0, "Start"); labelHandler.sendMessage(m); running = false; } } }).start(); } }); } void goDojo() { final HttpClient httpClient = new HttpClient(); try { httpClient.setConnectorType(HttpClient.CONNECTOR_SOCKET); // Fails immediately // httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); httpClient.start(); final BayeuxClient bayeuxClient = new BayeuxClient(httpClient, new Address("10.9.7.90", 8080), "/cometd/cometd"); final MessageListener messageListener = new MessageListener() { public void deliver(Client arg0, Client arg1, Message arg2) { Log.d("CometClientActivity", arg2.toString()); } }; bayeuxClient.addListener(messageListener); bayeuxClient.start(); final String channel = "/chat/demo"; bayeuxClient.subscribe(channel); final String name = "clientName"; final String chat = "smallMessage"; Object msg=new JSON.Literal("{\"user\":\"" + name + "\",\"chat\":\"" + chat + "\"}"); int n = 0; while (running) { bayeuxClient.publish(channel, msg, String.valueOf(n++)); try { Thread.sleep(10000L); } catch (InterruptedException e) { // Nothing } } } catch (Exception e) { Log.d("CometClientActivity", "Comet Fail", e); } } }