Skip to content

Instantly share code, notes, and snippets.

@pjc0247
Created March 22, 2015 15:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjc0247/36b045f79660aa4ceb3e to your computer and use it in GitHub Desktop.
Save pjc0247/36b045f79660aa4ceb3e to your computer and use it in GitHub Desktop.
package com.example.pjc.echoclient;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.codebutler.android_websockets.WebSocketClient;
import org.apache.http.message.BasicNameValuePair;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends ActionBarActivity {
WebSocketClient ws;
ArrayList<String> items;
ArrayAdapter<String> adapter;
private class WebsocketHandler extends Handler {
@Override
public void handleMessage(Message msg){
switch(msg.what) {
case WebsocketListener.MessageType.Connected:
onConnected(); break;
case WebsocketListener.MessageType.Disconnected:
onConnected(); break;
case WebsocketListener.MessageType.Error:
onError(msg.getData().getString("data")); break;
case WebsocketListener.MessageType.Received:
onReceived(msg.getData().getString("data")); break;
default:
Log.d("ws", "unexpected message");
}
}
protected void onConnected() {
Log.d("ws", "connected");
Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_SHORT).show();
}
protected void onDisconnected() {
Log.d("ws", "disconnected");
Toast.makeText(MainActivity.this, "Disconnected", Toast.LENGTH_SHORT).show();
}
protected void onReceived(String data) {
Log.d("ws", "received : " + data);
items.add(data);
adapter.notifyDataSetChanged();
}
protected void onError(String msg) {
Log.d("ws", "error : " + msg);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
initWebsocket();
}
@Override
protected void onDestroy() {
super.onDestroy();
quitWebsocket();
}
protected void initWebsocket() {
Handler handler = new WebsocketHandler();
WebSocketClient.Listener listener = new WebsocketListener(handler);
List<BasicNameValuePair> extraHeaders = Arrays.asList(
new BasicNameValuePair("Cookie", "some=cookie")
);
/* wss://echo.websocket.org */
ws = new WebSocketClient(
URI.create(getString(R.string.host)),
listener, extraHeaders);
ws.connect();
}
protected void quitWebsocket() {
ws.disconnect();
}
protected void initUI(){
final ListView list = (ListView)findViewById(R.id.listView);
final TextView text = (TextView)findViewById(R.id.editText);
final Button btn = (Button)findViewById(R.id.button);
items = new ArrayList<String>();
adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_expandable_list_item_1, items);
list.setAdapter(adapter);
list.setChoiceMode(ListView.CHOICE_MODE_NONE);
list.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ws.isConnected()) {
String msg = text.getText().toString();
text.setText("");
ws.send(msg);
}
}
});
}
}
package com.example.pjc.echoclient;
import android.os.Handler;
import android.os.Message;
import com.codebutler.android_websockets.WebSocketClient;
public class WebsocketListener implements WebSocketClient.Listener {
public class MessageType{
public static final int None = 0;
public static final int Connected = 1;
public static final int Disconnected = 2;
public static final int Received = 3;
public static final int Error = 4;
};
Handler handler;
public WebsocketListener(Handler _handler) {
handler = _handler;
}
protected void throwToMainActivity(int type, String arg){
Message msg = new Message();
msg.what = type;
msg.getData().putString("data", arg);
handler.sendMessage(msg);
}
protected void throwToMainActivity(int type){
throwToMainActivity(type, null);
}
@Override
public void onConnect() {
throwToMainActivity(MessageType.Connected);
}
@Override
public void onDisconnect(int code, String reason){
throwToMainActivity(MessageType.Disconnected);
}
@Override
public void onMessage(String data){
throwToMainActivity(MessageType.Received, data);
}
@Override
public void onMessage(byte[] data){
throwToMainActivity(MessageType.Received);
}
@Override
public void onError(Exception error){
throwToMainActivity(MessageType.Error, error.toString());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment