Created
March 22, 2015 15:28
-
-
Save pjc0247/36b045f79660aa4ceb3e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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