/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.jwebsocket.android.demo;
import java.util.List;
import org.jwebsocket.api.WebSocketClientEvent;
import org.jwebsocket.api.WebSocketClientTokenListener;
import org.jwebsocket.api.WebSocketPacket;
import org.jwebsocket.client.plugins.rpc.RPCCallable;
import org.jwebsocket.client.plugins.rpc.Rpc;
import org.jwebsocket.client.plugins.rpc.Rrpc;
import org.jwebsocket.kit.WebSocketException;
import org.jwebsocket.plugins.rpc.CommonRpcPlugin;
import org.jwebsocket.token.Token;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
/**
*
* @author prashant
*/
public class RPCDemoActivity extends Activity implements
WebSocketClientTokenListener {
private enum Target {
ANDROID, BROWSER
};
private EditText classTxt;
private EditText methodTxt;
private EditText parameterTxt;
private EditText targetTxt;
private EditText resultTxt;
private Button invokeBtn;
private TextView targetLabel;
private Boolean useRRPC = false;
private ImageView statusImage;
private Target selectedTarget = Target.ANDROID;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.rpc_demo);
classTxt = (EditText) findViewById(R.id.classTxt);
methodTxt = (EditText) findViewById(R.id.methodTxt);
parameterTxt = (EditText) findViewById(R.id.parameterTxt);
resultTxt = (EditText) findViewById(R.id.resultTxt);
targetTxt = (EditText) findViewById(R.id.targetTxt);
targetLabel = (TextView) findViewById(R.id.targetLabel);
invokeBtn = (Button) findViewById(R.id.invokeBtn);
statusImage = (ImageView) findViewById(R.id.statusImage);
// targetRadioGroup = (RadioGroup) findViewById(R.id.radio_group);
statusImage.setImageResource(R.drawable.disconnected);
final CheckBox checkbox = (CheckBox) findViewById(R.id.rrpcCheckBox);
checkbox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (((CheckBox) v).isChecked()) {
targetTxt.setVisibility(EditText.VISIBLE);
targetLabel.setVisibility(TextView.VISIBLE);
//targetRadioGroup.setVisibility(RadioGroup.VISIBLE);
useRRPC = true;
} else {
targetTxt.setVisibility(EditText.GONE);
targetLabel.setVisibility(TextView.GONE);
//targetRadioGroup.setVisibility(RadioGroup.GONE);
useRRPC = false;
}
predefinedValues();
targetLabel.invalidate();
targetTxt.invalidate();
//targetRadioGroup.invalidate();
}
});
invokeBtn.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
sendMethodInvokeToken();
}
});
// final RadioButton radio_browser = (RadioButton) findViewById(R.id.radio_browser);
// final RadioButton radio_android = (RadioButton) findViewById(R.id.radio_android);
// radio_browser.setOnClickListener(radio_listener);
// radio_android.setOnClickListener(radio_listener);
}
private void predefinedValues () {
if (useRRPC) {
if (selectedTarget.equals(Target.ANDROID)) {
classTxt.setText("org.jwebsocket.android.demo.RPCDemoActivity");
methodTxt.setText("rrpcTest1");
}
else if (selectedTarget.equals(Target.BROWSER)) {
classTxt.setText("demo");
methodTxt.setText("rrpcTest1");
}
} else {
classTxt.setText("org.jwebsocket.rpc.sample.SampleRPCLibrary");
methodTxt.setText("getMD5");
}
}
// private OnClickListener radio_listener = new OnClickListener() {
// public void onClick(View v) {
// // Perform action on clicks
// RadioButton rb = (RadioButton) v;
// if (rb.getId() == R.id.radio_android) {
// selectedTarget = Target.ANDROID;
// }
// if (rb.getId() == R.id.radio_browser) {
// selectedTarget = Target.BROWSER;
// }
// predefinedValues();
// }
// };
@Override
public boolean onCreateOptionsMenu(Menu aMenu) {
MenuInflater lMenInfl = getMenuInflater();
lMenInfl.inflate(R.menu.rpc_demo_menu, aMenu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.rpcMenuExit:
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void sendMethodInvokeToken() {
// TODO:validate the text fields first
String lClassName = classTxt.getText().toString().trim();
String lMethodName = methodTxt.getText().toString().trim();
String lParameter = parameterTxt.getText().toString().trim();
String lTarget = targetTxt.getText().toString().trim();
// If we make a simple rpc
if (useRRPC) {
new Rrpc(lClassName, lMethodName).to(lTarget).send(lParameter).call();
} else {
//Sending "" or "null" will send null.
if ("".equals(lParameter) || "null".equals(lParameter)) {
new Rpc(lClassName, lMethodName).call();
}else {
new Rpc(lClassName, lMethodName).send(lParameter).call();
}
}
}
@Override
protected void onResume() {
super.onResume();
connect();
RPCDemoActivity.mContext = getApplicationContext();
}
@Override
protected void onPause() {
super.onPause();
disConnect();
}
private void connect() {
try {
JWC.addListener(this);
JWC.open();
} catch (WebSocketException ex) {
resultTxt.setText(ex.getMessage());
}
}
private void disConnect() {
try {
JWC.removeListener(this);
JWC.close();
} catch (WebSocketException ex) {
// TODO: log exception
}
}
public void processToken(WebSocketClientEvent aEvent, Token aToken) {
if ((CommonRpcPlugin.RPC_TYPE).equals(aToken.getString("reqType"))) {
if (aToken.getInteger("code") == 0) {
resultTxt.setText(aToken.getString("result"));
} else if (aToken.getInteger("code") == -1) {
resultTxt.setText(aToken.getString("msg"));
}
}
}
public void processOpened(WebSocketClientEvent aEvent) {
if (statusImage != null) {
statusImage.setImageResource(R.drawable.authenticated);
}
}
public void processPacket(WebSocketClientEvent aEvent, WebSocketPacket aPacket) {
}
public void processClosed(WebSocketClientEvent aEvent) {
}
private static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Toast.makeText(
mContext,
msg.getData().get("method") + " has been called by the server (args "
+ msg.getData().get("args"), Toast.LENGTH_SHORT).show();
}
};
private static Context mContext;
@RPCCallable(C2CAuthorized=true)
public static void rrpcTest1() {
Bundle b = new Bundle();
b.putString("method", "rrpcTest1");
b.putString("args", "null");
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
}
@RPCCallable(C2CAuthorized=true)
public static void rrpcTest1(String arg1) {
Bundle b = new Bundle();
b.putString("method", "rrpcTest1");
b.putString("args", arg1);
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
}
@RPCCallable(C2CAuthorized=true)
public static void rrpcTest1(int arg1) {
Bundle b = new Bundle();
b.putString("method", "rrpcTest1");
b.putString("args", String.valueOf(arg1));
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
}
@RPCCallable(C2CAuthorized=true)
public static void rrpcTest2(List<String> aList, List<List<Integer>> aList2) {
Bundle b = new Bundle();
b.putString("method", "rrpcTest2");
b.putString("args", aList.toString() + ", " + aList2.toString());
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
}
@RPCCallable(C2CAuthorized=true)
public static void receiveMessage(String aMessage) {
Bundle b = new Bundle();
b.putString("method", "receiveMessage");
b.putString("args", aMessage);
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
}
public static void rrpcTest3() {
Bundle b = new Bundle();
b.putString("method", "rrpcTest3");
b.putString("args", "null");
Message msg = new Message();
msg.setData(b);
handler.sendMessage(msg);
}
}