powered by Jive Software

Everytime i am trying to connect when Internet in Case Of Internet on off Situation Getting error "SmackException Client is already logged in"


#1

Everytime i am trying to connect when Internet in Case Of Internet on off Situation Getting error “SmackException Client is already logged in”, to Capture this In Event in Android Client I have Used Broadcast Receiver to connect Again , i am using Open Fire Server

this is My Android Code

public class MyXMPP {

public static XMPPTCPConnection connection;

public static MyXMPP instance;

public static boolean isToasted;

public static String loginUser;

public static String passwordUser;

public Chat Mychat;

public static boolean connected = false;

private boolean chat_created = false;

public boolean loggedin = false;

ChatService context;

Gson gson;

ChatManagerListenerImpl mChatManagerListener;

MMessageListener mMessageListener;

private String serverAddress;

private static Random random = new Random();

static
{

isToasted = true;

instance = null;

try
{

Class.forName(“org.jivesoftware.smack.ReconnectionManager”);

}

catch (ClassNotFoundException localClassNotFoundException) {

Log.e(MyXMPP.class.getName(), “Package Not Found !!!”);

}

}

private MyXMPP(ChatService paramMyService, String domain, String username, String password)

{

this.serverAddress = domain;

loginUser = username;

passwordUser = password;

this.context = paramMyService;

init();

}

private String getRandomNumber(){

int i1 = random.nextInt(80 - 65) + 65;

return “”+i1;

}

public static MyXMPP getInstance(ChatService paramMyService, String domain, String username, String password)

{

if (instance == null)

{

instance = new MyXMPP(paramMyService, domain, username, password);

}

return instance;

}

public static MyXMPP getInstance(){

return instance;

}

private void initialiseConnection()

{

Object localObject = XMPPTCPConnectionConfiguration.builder();

((XMPPTCPConnectionConfiguration.Builder)localObject).setServiceName(this.serverAddress);

((XMPPTCPConnectionConfiguration.Builder)localObject).setHost(this.serverAddress);

((XMPPTCPConnectionConfiguration.Builder)localObject).setPort(5222);

((XMPPTCPConnectionConfiguration.Builder)localObject).setDebuggerEnabled(true);

((XMPPTCPConnectionConfiguration.Builder)localObject).setSecurityMode(Connectio nConfiguration.SecurityMode.disabled);

// XMPPTCPConnection.setUseStreamManagementDefault(true);
connection = new XMPPTCPConnection(((XMPPTCPConnectionConfiguration.Builder)localObject).build()) ;

// connection.setPacketReplyTimeout(30 * 1000);
// For Reconnection Manager
ReconnectionManager reconnectionManager = ReconnectionManager.getInstanceFor(connection);

reconnectionManager.setReconnectionPolicy(ReconnectionManager.ReconnectionPolic y.FIXED_DELAY);

reconnectionManager.enableAutomaticReconnection();

XMPPTCPConnection.setUseStreamManagementDefault(true);

// localObject = new XMPPConnectionListener();
connection.addConnectionListener(connectionListener);

connection.setUseStreamManagement(true);

// PingManager pingManager = PingManager.getInstanceFor(connection);
// pingManager.setPingInterval(10000);
}

public void connect()

{

Thread thread = new Thread(new Runnable() {

@Override
public void run() {

if(connection != null) {

try {

connection.connect();

Log.e(MyXMPP.class.getName(), “Connection established”);

}catch (SmackException exception){

Log.e(MyXMPP.class.getName(), "Error SmackException " + exception.getMessage());

}catch (XMPPException ex){

Log.e(MyXMPP.class.getName(), "Error XMPPException "+ ex.getMessage() );

}catch (IOException ex){

Log.e(MyXMPP.class.getName(), "Error IOException "+ ex.getMessage() );

}

}else {

Log.e(MyXMPP.class.getName(), “Connection Found NULL in Thread”);

}

}

});

thread.start();

Log.e(MyXMPP.class.getName(), “Connection Call received with User Name :” + loginUser);

}

public boolean isConnected(){

return connection == null ? false : connection.isConnected();

}

public boolean isAuthenticated(){

return connection == null ? false : connection.isAuthenticated();

}

public void disconnect()

{

MyXMPP.connection.disconnect();

Log.e(MyXMPP.class.getName(), “User Disconnected-> :” + connection.isConnected());

}

public void init()

{

this.gson = new Gson();

this.mMessageListener = new MMessageListener(this.context);

this.mChatManagerListener = new ChatManagerListenerImpl();

initialiseConnection();

}

public void login()

{

try
{

connection.login(loginUser, passwordUser, null);

Log.e(“LOGIN”, “Yey! We’re connected to the Xmpp server!”);

return;

}

catch (SmackException localSmackException)

{

Log.e(MyXMPP.class.getName(), “Login Error!!!” + localSmackException.getMessage());

localSmackException.printStackTrace();

return;

}

catch (Exception localException) {

Log.e(MyXMPP.class.getName(), “Login Generic Exception !!!” + localException.getMessage());

context.stopService();

}

}

int indexCount = 0;

public void sendMessage(final ChatMessage paramChatMessage)

{

String str = this.gson.toJson(paramChatMessage);

if (!this.chat_created)

{

this.Mychat = ChatManager.getInstanceFor(connection).createChat(paramChatMessage.receiver + “@” + “6thenergy”, this.mMessageListener);

}

Message localMessage = new Message();

localMessage.setBody(str);

localMessage.setStanzaId(paramChatMessage.msgid);

localMessage.setType(Message.Type.chat);

try
{

if (connection.isAuthenticated())

{

Mychat.sendMessage(localMessage);

ChatPersistence chatdata = new ChatPersistence();

chatdata.setSender(paramChatMessage.sender);

chatdata.setReceiver(paramChatMessage.receiver);

indexCount = DBAdapter.getMaxIndexCount(chatdata);

indexCount+=1;

final ChatPersistence chatPersistence = new ChatPersistence(paramChatMessage.sender,paramChatMessage.receiver, paramChatMessage.body,CommonMethods.parseDate(paramChatMessage.Date),CommonMethods.parseDate(paramChatMessage.Time), indexCount,1,“Sample”);

DBAdapter.addChatData(chatPersistence);

new Handler(Looper.getMainLooper()).post(new Runnable() {

public void run() {

if(ChatService.isRunning){

context.messageReceived(chatPersistence);

}

Toast.makeText(context, "Sent SuccessFully Index Is " + indexCount, Toast.LENGTH_SHORT).show();

}

});

return;

}

login();

return;

}

catch (SmackException.NotConnectedException exceptionNoConnection)

{

Log.e(“xmpp.SendMessage()”, “msg Not sent!-Not Connected!”);

return;

}

catch (Exception exception){

Log.e(“xmpp.SendMessage()”, “Generic Exception Received!” + exception.getMessage());

}

}

private class ChatManagerListenerImpl

implements ChatManagerListener

{

private ChatManagerListenerImpl() {}

public void chatCreated(Chat paramChat, boolean paramBoolean)

{

if (!paramBoolean) {

paramChat.addMessageListener(MyXMPP.this.mMessageListener);

}

}

}

private class MMessageListener

implements ChatMessageListener

{

public MMessageListener(Context paramContext) {

}

private void processMessage(final ChatMessage paramChatMessage) {

paramChatMessage.isMine = false;

final ChatPersistence tempChat = new ChatPersistence();

tempChat.setIsMine(0);

tempChat.setSender(paramChatMessage.sender);

tempChat.setReceiver(paramChatMessage.receiver);

tempChat.setMsg(paramChatMessage.body);

// MainActivity.chatlist.add(tempChat);
new Handler(Looper.getMainLooper()).post(new Runnable() {

public void run() {

// if(MainActivity.chatAdapter != null)
// MainActivity.chatAdapter.notifyDataSetChanged();
int indexCount = DBAdapter.getMaxIndexCount(tempChat);

indexCount+=1;

final ChatPersistence chatPersistence = new ChatPersistence(paramChatMessage.sender, paramChatMessage.receiver, paramChatMessage.body, CommonMethods.parseDate(paramChatMessage.Date), CommonMethods.parseDate(paramChatMessage.Time), indexCount, 0, “Sample”);

DBAdapter.addChatData(chatPersistence);

if(ChatService.isRunning){

context.messageReceived(chatPersistence);

}

}

});

}

public void processMessage(final Chat paramChat,final Message paramMessage)

{

if ((paramMessage.getType() == Message.Type.chat) && (paramMessage.getBody() != null)) {

Log.e(“MyXMPP_MESSAGE_LISTENER”, “Xmpp message received: '” + paramMessage.getBody());

try {

processMessage((ChatMessage) MyXMPP.this.gson.fromJson(paramMessage.getBody(), ChatMessage.class));

}catch (JsonSyntaxException ex){

ChatMessage chatMessage = new ChatMessage();

chatMessage.body = paramMessage.getBody();

chatMessage.isMine = false;

chatMessage.sender = paramMessage.getFrom();

chatMessage.receiver = paramMessage.getTo();

chatMessage.Date = CommonMethods.getCurrentDate();

chatMessage.Time = CommonMethods.getCurrentTime();

processMessage(chatMessage);

}

}

}

}

ConnectionListener connectionListener = new ConnectionListener() {

@Override
public void connected(final XMPPConnection paramXMPPConnection) {

MyXMPP.connected = true;

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {

public void run() {

Roster roster = Roster.getInstanceFor(paramXMPPConnection);

Collection entries = null;

if(!roster.isLoaded()){

entries = roster.getEntries();

for (RosterEntry entry : entries) {

Log.e(“xmpp”, “Users Count !@@@@@@@@@@@:-” + entry.getName());

}

}

}

},2000);

if (!loggedin) {

Log.e(MyXMPP.class.getName(), “Login Called From Here”);

MyXMPP.this.login();

}

new Handler(Looper.getMainLooper()).post(new Runnable()

{

public void run()

{

Toast.makeText(MyXMPP.this.context, “Connected!”,Toast.LENGTH_SHORT).show();

}

});

}

@Override
public void authenticated(XMPPConnection connection, boolean resumed) {

Log.e(“xmpp”, “Authenticated!@@@@@@@@@”);

MyXMPP.this.loggedin = true;

ChatManager.getInstanceFor(MyXMPP.connection).addChatListener(MyXMPP.this.mChatManagerListener);

MyXMPP.this.chat_created = false;

if (MyXMPP.isToasted) {

new Handler(Looper.getMainLooper()).post(new Runnable()

{

public void run()

{

Toast.makeText(MyXMPP.this.context, “Authenticated!”,Toast.LENGTH_SHORT).show();

}

});

}

}

@Override
public void connectionClosed() {

if (MyXMPP.isToasted) {

new Handler(Looper.getMainLooper()).post(new Runnable()

{

public void run()

{

Toast.makeText(MyXMPP.this.context, “ConnectionCLosed!”, Toast.LENGTH_SHORT).show();

}

});

}

Log.e(“xmpp”, “ConnectionCLosed!”);

MyXMPP.connected = false;

MyXMPP.this.chat_created = false;

MyXMPP.this.loggedin = false;

}

@Override
public void connectionClosedOnError(Exception e) {

if (MyXMPP.isToasted) {

new Handler(Looper.getMainLooper()).post(new Runnable()

{

public void run()

{

Toast.makeText(MyXMPP.this.context, “ConnectionClosedOn Error!!”, Toast.LENGTH_SHORT).show();

}

});

}

Log.e(“xmpp”, “ConnectionClosedOn Error!” + e.getMessage());

MyXMPP.connected = false;

MyXMPP.this.chat_created = false;

MyXMPP.this.loggedin = false;

}

@Override
public void reconnectionSuccessful() {

if (MyXMPP.isToasted) {

new Handler(Looper.getMainLooper()).post(new Runnable()

{

public void run()

{

Toast.makeText(MyXMPP.this.context, “REConnected!”, Toast.LENGTH_SHORT).show();

}

});

}

Log.e(“xmpp”, “ReconnectionSuccessful”);

MyXMPP.connected = true;

MyXMPP.this.chat_created = false;

MyXMPP.this.loggedin = false;

}

@Override
public void reconnectingIn(int seconds) {

Log.e(“xmpp”, "Reconnectingin " + seconds);

MyXMPP.this.loggedin = false;

}

@Override
public void reconnectionFailed(Exception e) {

if (MyXMPP.isToasted) {

new Handler(Looper.getMainLooper()).post(new Runnable()

{

public void run()

{

Toast.makeText(MyXMPP.this.context, “ReconnectionFailed!”, Toast.LENGTH_LONG).show();

}

});

}

Log.e(“xmpp”, “ReconnectionFailed!”);

MyXMPP.connected = false;

MyXMPP.this.chat_created = false;

MyXMPP.this.loggedin = false;

}

};

}


#2

XMPPTCPConnection connection is already configured so please check the connection before creating object of XMPPTCPConnection class.

XMPPTCPConnection connection;
if (connection != null) {
connection = null;
}
connection = new XMPPTCPConnection(config.build());

I am getting this same problem but now it has been fixed try it is working.