My client side is run on android emulator. it is the logcat result in android.
Code: Select all
03-04 03:08:09.303: INFO/ActivityManager(52): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.test.android.multiplayer/.BasicClientExample bnds=[83,138][157,217] }
03-04 03:08:09.513: INFO/ActivityManager(52): Start proc com.test.android.multiplayer for activity com.test.android.multiplayer/.BasicClientExample: pid=252 uid=10029 gids={3003, 1015}
03-04 03:08:10.083: INFO/System.out(252): initSmartFox...
03-04 03:08:10.133: INFO/dalvikvm(252): DexOpt: access denied from Lorg/slf4j/LoggerFactory; to field Lorg/slf4j/impl/StaticLoggerBinder;.SINGLETON
03-04 03:08:10.133: WARN/dalvikvm(252): VFY: unable to resolve static field 3179 (SINGLETON) in Lorg/slf4j/impl/StaticLoggerBinder;
03-04 03:08:10.143: INFO/dalvikvm(252): DexOpt: access denied from Lorg/slf4j/LoggerFactory; to field Lorg/slf4j/impl/StaticLoggerBinder;.SINGLETON
03-04 03:08:10.143: WARN/dalvikvm(252): VFY: unable to resolve static field 3179 (SINGLETON) in Lorg/slf4j/impl/StaticLoggerBinder;
03-04 03:08:10.433: INFO/System.out(252): initSmartFox Done
03-04 03:08:10.513: WARN/System.err(252): log4j:WARN No appenders could be found for logger (sfs2x.client.core.EventDispatcher).
03-04 03:08:10.513: WARN/System.err(252): log4j:WARN Please initialize the log4j system properly.
03-04 03:08:10.603: ERROR/dalvikvm(252): Could not find class 'net.sf.json.JSONObject', referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.decodeJsonObject
03-04 03:08:10.623: WARN/dalvikvm(252): VFY: unable to resolve instanceof 545 (Lnet/sf/json/JSONObject;) in Lcom/smartfoxserver/v2/protocol/serialization/DefaultSFSDataSerializer;
03-04 03:08:10.632: WARN/dalvikvm(252): VFY: unable to find class referenced in signature (Lnet/sf/json/JSONArray;)
03-04 03:08:10.643: INFO/dalvikvm(252): Could not find method net.sf.json.JSONArray.iterator, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.decodeSFSArray
03-04 03:08:10.653: WARN/dalvikvm(252): VFY: unable to resolve virtual method 1929: Lnet/sf/json/JSONArray;.iterator ()Ljava/util/Iterator;
03-04 03:08:10.663: WARN/dalvikvm(252): VFY: unable to find class referenced in signature (Lnet/sf/json/JSONObject;)
03-04 03:08:10.663: INFO/dalvikvm(252): Could not find method net.sf.json.JSONObject.keySet, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.decodeSFSObject
03-04 03:08:10.673: WARN/dalvikvm(252): VFY: unable to resolve virtual method 1934: Lnet/sf/json/JSONObject;.keySet ()Ljava/util/Set;
03-04 03:08:10.693: INFO/dalvikvm(252): Could not find method org.apache.commons.io.IOUtils.closeQuietly, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.getBlobData
03-04 03:08:10.693: WARN/dalvikvm(252): VFY: unable to resolve static method 1936: Lorg/apache/commons/io/IOUtils;.closeQuietly (Ljava/io/InputStream;)V
03-04 03:08:10.703: INFO/dalvikvm(252): Could not find method org.apache.commons.io.IOUtils.closeQuietly, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.getBlobData
03-04 03:08:10.703: WARN/dalvikvm(252): VFY: unable to resolve static method 1936: Lorg/apache/commons/io/IOUtils;.closeQuietly (Ljava/io/InputStream;)V
03-04 03:08:10.713: INFO/dalvikvm(252): Could not find method org.apache.commons.io.IOUtils.closeQuietly, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.getBlobData
03-04 03:08:10.713: WARN/dalvikvm(252): VFY: unable to resolve static method 1936: Lorg/apache/commons/io/IOUtils;.closeQuietly (Ljava/io/InputStream;)V
03-04 03:08:10.713: INFO/dalvikvm(252): Could not find method org.apache.commons.lang.StringUtils.capitalize, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.readValueFromGetter
03-04 03:08:10.723: WARN/dalvikvm(252): VFY: unable to resolve static method 1937: Lorg/apache/commons/lang/StringUtils;.capitalize (Ljava/lang/String;)Ljava/lang/String;
03-04 03:08:10.733: INFO/dalvikvm(252): Could not find method org.apache.commons.lang.StringUtils.capitalize, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.readValueFromGetter
03-04 03:08:10.743: WARN/dalvikvm(252): VFY: unable to resolve static method 1937: Lorg/apache/commons/lang/StringUtils;.capitalize (Ljava/lang/String;)Ljava/lang/String;
03-04 03:08:10.753: ERROR/dalvikvm(252): Could not find class 'java.util.ArrayDeque', referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.setObjectField
03-04 03:08:10.773: WARN/dalvikvm(252): VFY: unable to resolve new-instance 306 (Ljava/util/ArrayDeque;) in Lcom/smartfoxserver/v2/protocol/serialization/DefaultSFSDataSerializer;
03-04 03:08:10.773: ERROR/dalvikvm(252): Could not find class 'java.util.concurrent.LinkedBlockingDeque', referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.setObjectField
03-04 03:08:10.773: WARN/dalvikvm(252): VFY: unable to resolve new-instance 361 (Ljava/util/concurrent/LinkedBlockingDeque;) in Lcom/smartfoxserver/v2/protocol/serialization/DefaultSFSDataSerializer;
03-04 03:08:10.793: INFO/dalvikvm(252): Could not find method org.apache.commons.lang.StringUtils.capitalize, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.writeValueFromSetter
03-04 03:08:10.793: WARN/dalvikvm(252): VFY: unable to resolve static method 1937: Lorg/apache/commons/lang/StringUtils;.capitalize (Ljava/lang/String;)Ljava/lang/String;
03-04 03:08:10.803: INFO/dalvikvm(252): Could not find method net.sf.json.JSONArray.fromObject, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.array2json
03-04 03:08:10.803: WARN/dalvikvm(252): VFY: unable to resolve static method 1928: Lnet/sf/json/JSONArray;.fromObject (Ljava/lang/Object;)Lnet/sf/json/JSONArray;
03-04 03:08:10.813: INFO/dalvikvm(252): Could not find method net.sf.json.JSONArray.fromObject, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.json2array
03-04 03:08:10.834: WARN/dalvikvm(252): VFY: unable to resolve static method 1928: Lnet/sf/json/JSONArray;.fromObject (Ljava/lang/Object;)Lnet/sf/json/JSONArray;
03-04 03:08:10.834: INFO/dalvikvm(252): Could not find method net.sf.json.JSONObject.fromObject, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.json2object
03-04 03:08:10.834: WARN/dalvikvm(252): VFY: unable to resolve static method 1931: Lnet/sf/json/JSONObject;.fromObject (Ljava/lang/Object;)Lnet/sf/json/JSONObject;
03-04 03:08:10.834: INFO/dalvikvm(252): Could not find method net.sf.json.JSONObject.fromObject, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.object2json
03-04 03:08:10.834: WARN/dalvikvm(252): VFY: unable to resolve static method 1931: Lnet/sf/json/JSONObject;.fromObject (Ljava/lang/Object;)Lnet/sf/json/JSONObject;
03-04 03:08:10.843: INFO/dalvikvm(252): Could not find method java.sql.ResultSet.getNString, referenced from method com.smartfoxserver.v2.protocol.serialization.DefaultSFSDataSerializer.resultSet2object
03-04 03:08:10.853: WARN/dalvikvm(252): VFY: unable to resolve interface method 1265: Ljava/sql/ResultSet;.getNString (I)Ljava/lang/String;
03-04 03:08:11.733: INFO/ActivityManager(52): Displayed activity com.test.android.multiplayer/.BasicClientExample: 2292 ms (total 2292 ms)
03-04 03:08:38.462: INFO/System.out(252): Event come back!!
03-04 03:08:38.472: INFO/System.out(252): Disconnected!
It is source code run in client side. I just change the pure java code to android. I also add some little stuff, a webview and a button to check if network is ON.
Code: Select all
package com.test.android.multiplayer;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import com.smartfoxserver.v2.exceptions.SFSException;
import sfs2x.client.SmartFox;
import sfs2x.client.core.BaseEvent;
import sfs2x.client.core.IEventListener;
import sfs2x.client.core.SFSEvent;
import sfs2x.client.requests.JoinRoomRequest;
import sfs2x.client.requests.LoginRequest;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
public class BasicClientExample extends Activity implements IEventListener{
WebView web;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSmartFox();
setContentView(R.layout.main);
Button ipBtn = (Button)findViewById(R.id.ipBtn);
ipBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Dialog d = new Dialog(BasicClientExample.this);
d.setTitle("IP = " + getLocalIpAddress());
d.setCancelable(true);
d.show();
}
});
web = new WebView(this);
WebViewClient client = new WebViewClient();
web.setWebViewClient(client);
((ViewGroup)findViewById(R.id.webViewContainer)).addView(web);
web.loadUrl("http://google.com");
Button connectBtn = (Button)findViewById(R.id.connectBtn);
connectBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
String url = ((EditText)findViewById(R.id.urlText)).getText().toString();
web.loadUrl(url);
}
});
}
@Override
public void onDestroy(){
if(sfs!=null){
sfs.removeAllEventListeners();
sfs.disconnect();
}
sfs = null;
super.onDestroy();
}
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
System.out.println("Error:"+ex.getMessage());
}
return null;
}
/**
* Multiplayer part
*/
private SmartFox sfs = null;
private void initSmartFox(){
System.out.println("initSmartFox...");
sfs = new SmartFox();
sfs.setDebug(true);
//sfs.loadConfig("//android_asset/config/sfs-config.xml", true);
sfs.addEventListener(SFSEvent.CONNECTION, this);
sfs.addEventListener(SFSEvent.LOGIN, this);
sfs.addEventListener(SFSEvent.ROOM_JOIN, this);
sfs.addEventListener(SFSEvent.CONNECTION_LOST, this);
sfs.connect("192.168.0.106", 9932);
//sfs.loadConfig("file:///android_asset/config/sfs-config.xml", true);
//sfs.loadConfig("file:///android_asset/sfs-config.xml", true);
System.out.println("initSmartFox Done");
}
@Override
public void dispatch(BaseEvent event) throws SFSException
{
System.out.println("Event come back!!");
if (event.getType().equals(SFSEvent.CONNECTION))
{
System.out.println("Connected. Now sending login request.");
// Login as guest in current zone
sfs.send(new LoginRequest("", "", sfs.getCurrentZone()));
}
else if (event.getType().equals(SFSEvent.CONNECTION_LOST))
{
System.out.println("Disconnected!");
}
else if (event.getType().equals(SFSEvent.LOGIN))
{
String roomName = "The Lobby";
System.out.println("Logged in. Now joining '" + roomName + "' room");
sfs.send(new JoinRoomRequest(roomName));
}
else if (event.getType().equals(SFSEvent.ROOM_JOIN))
{
System.out.println("Room joined: " + event.getArguments().get("room"));
}
}
}
My server is setup on 192.168.0.106, opening port 9932. I think the server side setting should be correct because the pure java code works perfectly using the same server. It can make a connection and join room.
But when I move the code to android, it fail. It get a handshake, then wait for 1-2 seconds, it is disconnected