Good day,
I have wrapped the Java smack library to be used in B4A. When I compile the app in Debug(rapid) mode I can establish and communicate with my xmpp server over the LAN. When I compile the exact same code using Release mode I am unable to connect to the server.
I have also checked to make sure that internet and network permissions are present.
Debug mode
Release mode
Java Lib:
Any ideas?
Regards
I have wrapped the Java smack library to be used in B4A. When I compile the app in Debug(rapid) mode I can establish and communicate with my xmpp server over the LAN. When I compile the exact same code using Release mode I am unable to connect to the server.
I have also checked to make sure that internet and network permissions are present.
Debug mode
Release mode
Java Lib:
B4X:
package smack.b4a.lib;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import anywheresoftware.b4a.BA;
import anywheresoftware.b4a.BA.Events;
import anywheresoftware.b4a.BA.Permissions;
import anywheresoftware.b4a.BA.ShortName;
import anywheresoftware.b4a.BA.Version;
@Version(1.0f)
@Permissions(values={"android.permission.INTERNET"})
@ShortName("SmackLib")
@Events(values={"receivedmessage (mMsg As String, , fromName As String)"})
public class SmackLib {
private ConnectionConfiguration connConfig;
private XMPPConnection connection;
private String mMsg="";
public String autoConnect(String host, String port, String service, String u,String p)
{
ConnectionConfiguration _connConfig = new ConnectionConfiguration(host, Integer.parseInt(port), service);
XMPPConnection _connection = new XMPPConnection(_connConfig);
try {
_connection.connect();
_connection.login(u, p);
Presence presence = new Presence(Presence.Type.available);
_connection.sendPacket(presence);
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "login OK";
}
public String AndroidConnectionConfiguration(String host, String port, String service)
{
try
{
connConfig = new ConnectionConfiguration(host, Integer.parseInt(port), service);
}
catch(Exception e)
{
return e.getMessage();
}
return host;
}
public String MakeConnection()
{
try
{
connection = new XMPPConnection(connConfig);
}
catch (Exception e)
{
return "Error:" + e.getMessage();
}
return "Config set";
}
public String ConnectServer()
{
try
{
connection.connect();
}
catch(Exception e)
{
return "Error ConnectServer:" + e.getMessage();
}
return connection.getHost();
}
public String Disconnect()
{
try
{
connection.disconnect();
}
catch(Exception e)
{
return "Error:" + e.getMessage();
}
return "Disconnected";
}
public String loginUser(String u,String p)
{
try
{
connection.login(u, p);
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
}
catch(Exception e)
{
return "Error:" + e.getMessage();
}
return "login OK";
}
public String sendMessage(String to, String text)
{
try
{
Message msg = new Message(to, Message.Type.chat);
msg.setBody(text);
connection.sendPacket(msg);
}
catch(Exception e) {
return "Error:" + e.getMessage();
}
return "send!";
}
public String ReceiveMessageEvent(final BA ba)
{
//mBA = new BA(null, null, null, mMsg, mMsg);
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new PacketListener()
{
public void processPacket(Packet packet)
{
Message message = (Message) packet;
if (message.getBody() != null)
{
String fromName = StringUtils.parseBareAddress(message.getFrom());
mMsg = message.getBody();
//BA.raiseEvent2(this, false, "ReceivedMessage", true, new Object[] {mMsg});
ba.raiseEventFromDifferentThread(this, null, 0, "receivedmessage", false, new Object[] {mMsg, fromName});
//mBA.raiseEvent2(this, false, "receivedMessage", true, new Object[] {mMsg});
//BA.raiseEvent(this, "ReceivedMessage");
}
}
}, filter);
//mBA.raiseEventFromDifferentThread(this, null, 0, "receivedmessage", false, new Object[] {"Hi"});
//mBA.raiseEvent2(this, false, "receivedmessage", true, new Object[] {"hI"});
return "Listening";
}
}
Regards
Last edited: