From 5fe59cec11d1bcabb28092b4303267fd44ba5a16 Mon Sep 17 00:00:00 2001 From: KGreg <kgreg314@gmail.com> Date: Sat, 7 Apr 2018 19:12:55 +0200 Subject: [PATCH] ConnectionLost Mechanism & Exit --- .../java/onlab/kvizclient/LobbyActivity.java | 32 ++++++-------- .../java/onlab/kvizserver/LobbyActivity.java | 44 ++++++++++++++----- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java b/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java index 571aa59..389c79c 100644 --- a/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java +++ b/KvizClient/app/src/main/java/onlab/kvizclient/LobbyActivity.java @@ -35,6 +35,8 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection private boolean discovering = false; private String CLIENT_NAME = "Unknown"; + private boolean exit = true; + private String hostname =""; @@ -87,11 +89,14 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection mNsdManager.stopServiceDiscovery(mDiscoveryListener); discovering = false; - /* + for (ServerModel server : servers) { - SendDisconnect(server); + if(ServerHolder.getSocket() != server.getSocket() || exit) + SendConnectionLost(server); + if(exit) + ServerHolder.setServerModel(null); } - */ + for (Thread thread : threads) { thread.interrupt(); @@ -127,6 +132,7 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection } + NsdManager.DiscoveryListener mDiscoveryListener = new NsdManager.DiscoveryListener() { // Called as soon as service discovery begins. @@ -322,7 +328,7 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection //nem sikerült } break; - case "Disconnect": + case "ConnectionLost": for (ServerModel server: servers) { if(server.getSocket() == serverModel.getSocket()) { @@ -337,21 +343,11 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection break; case "GameStarted": + exit = false; Intent intent = new Intent(getApplicationContext(), GameActivity.class); startActivity(intent); break; - case "-1": - for (ServerModel server: servers) { - if(server.getSocket() == serverModel.getSocket()) - { - int position = servers.indexOf(serverModel); - updateConversationHandler.post(new updateUIThread(Operation.REMOVE_SERVER, serverModel)); - servers.remove(serverModel); - serverModel.getSocket().close(); - threads.remove(Thread.currentThread()); - Thread.currentThread().interrupt(); - } - } + case "Disconnect": break; default: break; @@ -413,13 +409,13 @@ public class LobbyActivity extends AppCompatActivity implements ServerConnection recyclerView.setAdapter(adapter); } - private void SendDisconnect(ServerModel server) + private void SendConnectionLost(ServerModel server) { try { PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(server.getSocket().getOutputStream())), true); - out.println("Disconnect"); + out.println("ConnectionLost"); out.close(); } catch (IOException e) { diff --git a/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java b/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java index b9d3c4a..8489950 100644 --- a/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java +++ b/KvizServer/app/src/main/java/onlab/kvizserver/LobbyActivity.java @@ -61,6 +61,8 @@ public class LobbyActivity extends AppCompatActivity { private Thread commThread; + private boolean exit = true; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -100,6 +102,7 @@ public class LobbyActivity extends AppCompatActivity { startGameBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + exit = false; serverThread.interrupt(); commThread.interrupt(); ClientHolder.addAll(clients); @@ -112,26 +115,31 @@ public class LobbyActivity extends AppCompatActivity { @Override protected void onPause() { - /*try { + try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); - }*/ + } if (mNsdManager != null && registred) { mNsdManager.unregisterService(mRegistrationListener); registred = false; - /* + for (ClientModel client : allclients) { - SendDisconnect(client); + boolean req = true; + for(ClientModel c : clients) + if(c.getClientsocket() == client.getClientsocket()) + req = false; + if(req || exit) + SendConnectionLost(client); } - */ - /* + + for (Thread thread : threads) { thread.interrupt(); } - */ + } super.onPause(); @@ -154,11 +162,11 @@ public class LobbyActivity extends AppCompatActivity { mNsdManager.unregisterService(mRegistrationListener); registred = false; } - /*try { + try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); - }*/ + } super.onDestroy(); } @@ -298,13 +306,14 @@ public class LobbyActivity extends AppCompatActivity { } out.println("Connect##Ok!"); break; - case "Disconnect": + case "ConnectionLost": for (ClientModel client : clients) { if (client.getClientsocket() == clientSocket) { int position = clients.indexOf(client); updateConversationHandler.post(new updateUIThread(Operation.REMOVE_CLIENT, Integer.toString(position))); clients.remove(client); clientSocket.close(); + allclients.remove(client); threads.remove(Thread.currentThread()); Thread.currentThread().interrupt(); @@ -312,7 +321,18 @@ public class LobbyActivity extends AppCompatActivity { } }; break; + case "Disconnect": + for (ClientModel client : clients) { + if (client.getClientsocket() == clientSocket) { + int position = clients.indexOf(client); + clients.remove(client); + updateConversationHandler.post(new updateUIThread(Operation.REMOVE_CLIENT, Integer.toString(position))); + break; + } + + }; + break; default: out.println("Unknown Message!"); @@ -371,13 +391,13 @@ public class LobbyActivity extends AppCompatActivity { recyclerView.setAdapter(adapter); } - private void SendDisconnect(ClientModel client) + private void SendConnectionLost(ClientModel client) { try { PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(client.getClientsocket().getOutputStream())), true); - out.println("Disconnect"); + out.println("ConnectionLost"); out.close(); } catch (IOException e) { -- GitLab