0

I'm sure there is a similar question somewhere on here but I just can't seem to find it.

Here's what I'm trying to do.

let's say I am connected to a server and I want to disconnect from it if no calls are made by the user in last 5 minutes. BUT, if even a single call is made, the 5 minute timer would reset and countdown to 5 would start again..

It seems simple but I am kind of new to Android and trying to figure things out..

thanks in advance!


======= EDIT

So here's an example of code of what I want to do.

try {
    client.publish(topic, message);
    success = true;

    if(topic.equals("response")) {
        // need to reset my 5 min timer here
        // but if 5 mins go by and this try/catch isn't called again,
        // need to call the client.disconnect() method here
    } else {
        client.disconnect();
    }

} catch (Exception e) {
    success = false;
    e.printStackTrace();
}

so basically that gets called every time there is a call to the server.
What do i need to implement in the if statement?


================= EDIT AFTER ANSWER @Saeed Mashhadi's answer

Please see the following log output. So at first, it worked fine. and When the disconnectCounter was increasing by one every second, I made another call.

after that call, disconnectCounter started at 1 again but it started increasing by 2 every second. There are timestamps on the left. can you please tell me why this is happening?

11-05 15:50:59.395 13253-13521/ ~~ disconnectCounter - 1  
11-05 15:51:00.404 13253-13521/ ~~ disconnectCounter - 2  
11-05 15:51:01.401 13253-13521/ ~~ disconnectCounter - 3  
11-05 15:51:02.403 13253-13521/ ~~ disconnectCounter - 4  
11-05 15:51:03.394 13253-13521/ ~~ disconnectCounter - 5  
11-05 15:51:04.400 13253-13521/ ~~ disconnectCounter - 6  
11-05 15:51:05.396 13253-13521/ ~~ disconnectCounter - 7  
11-05 15:51:06.402 13253-13521/ ~~ disconnectCounter - 8  
11-05 15:51:07.408 13253-13521/ ~~ disconnectCounter - 9  
11-05 15:51:08.399 13253-13521/ ~~ disconnectCounter - 10  
11-05 15:51:09.407 13253-13521/ ~~ disconnectCounter - 11  
11-05 15:51:10.406 13253-13521/ ~~ disconnectCounter - 12  
11-05 15:51:11.401 13253-13521/ ~~ disconnectCounter - 13  
11-05 15:51:12.409 13253-13521/ ~~ disconnectCounter - 14  
......   
11-05 15:51:27.498 13253-13253/ ~~~~~~~~~~~ USER CALL ~~~~~~~~~~~  
11-05 15:51:28.399 13253-13521/ ~~ disconnectCounter - 1  
11-05 15:51:28.514 13253-13521/ ~~ disconnectCounter - 2  
11-05 15:51:29.398 13253-13521/ ~~ disconnectCounter - 3  
11-05 15:51:29.515 13253-13521/ ~~ disconnectCounter - 4  
11-05 15:51:30.403 13253-13521/ ~~ disconnectCounter - 5  
11-05 15:51:30.519 13253-13521/ ~~ disconnectCounter - 6  
11-05 15:51:31.401 13253-13521/ ~~ disconnectCounter - 7  
11-05 15:51:31.512 13253-13521/ ~~ disconnectCounter - 8  
11-05 15:51:32.398 13253-13521/ ~~ disconnectCounter - 9  
11-05 15:51:32.510 13253-13521/ ~~ disconnectCounter - 10  
11-05 15:51:33.398 13253-13521/ ~~ disconnectCounter - 11  
11-05 15:51:33.506 13253-13521/ ~~ disconnectCounter - 12  
11-05 15:51:34.400 13253-13521/ ~~ disconnectCounter - 13  
11-05 15:51:34.504 13253-13521/ ~~ disconnectCounter - 14  
......  

Thanks you!!

ᴛʜᴇᴘᴀᴛᴇʟ
  • 4,466
  • 5
  • 39
  • 73

2 Answers2

1

Due to you have no code, i'll give you a high level answer. You'll need to keep a timestamp of the last connection and an offset. you'll need also to check from time to time if the timestamp + offest is lower than the actual timestamp. and with each request you update this last request timestamp.

MemLeak
  • 4,456
  • 4
  • 45
  • 84
  • thanks for the quick reply. I actually wasn't sure what kind of code example to put in my question since all I wanna do is call a disconnect method after certain time. As for your reply, do u mean I have to keep checking again and again within my 5 mins? – ᴛʜᴇᴘᴀᴛᴇʟ Nov 05 '15 at 15:35
  • also, please take a look at my edited question. I tried to give an example. – ᴛʜᴇᴘᴀᴛᴇʟ Nov 05 '15 at 15:56
1

You can do something like this:

Timer timer;

...

try {
    client.publish(topic, message);
    success = true;

    if(topic.equals("response")) {
        // If try/catch is called, counter resets
        disconnectCounter=0;
        timer=new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                // Increase counter every second
                disconnectCounter++;
                Log.i("counter", disconnectCounter + "");
                // If 5 mins go by and this try/catch isn't called
                // again, disconnect
                if(disconnectCounter==300){ // 300=5*60
                    client.disconnect(); 
                    timer.cancel();
                    disconnectCounter=0;
                }
            }
        }, 1000, 1000);

    } else {
        client.disconnect();
        disconnectCounter=0;
    }

} catch (Exception e) {
    success = false;
    timer.cancel();
    disconnectCounter=0;
    e.printStackTrace();
}
Seyyed
  • 1,526
  • 3
  • 20
  • 30