Trouble with client DISCONNECTING from server

  ... the Multiplayer Extension for AndEngine.

Trouble with client DISCONNECTING from server

Postby keyesdav » Thu May 19, 2011 7:21 am

I'm having trouble with BluetoothSocketServer calling the onDisconnected method when a client disconnects from the server. The onConnected method gets called just fine, but it appears that the clients are actually never getting disconnected, and over time the server just keeps stacking up new connections.

I've created an Android Bluetooth server, specifically doing the following in my server app's onResume:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.         @Override
  2.         protected void onPause(){
  3.                
  4.                 if(this.btSocketServer != null) {
  5.                         this.btSocketServer.interrupt();
  6.                 }
  7.                
  8.                 super.onPause();
  9.  
  10.         }
  11.        
  12.         @Override
  13.         protected void onResume(){
  14.                 super.onResume();
  15.  
  16.                 // make sure the bluetooth adapter singleton gets associated with the right thread...
  17.                 BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
  18.                 if( ! bta.isEnabled() ){
  19. //                  Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
  20. //                  startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
  21.  
  22.                 }
  23.                
  24.                 initServer();
  25.  
  26.         }
  27.  
  28.         private void initServer() {
  29.  
  30.                 // kill off any socket server that we happen to have laying around...
  31.                 if(this.btSocketServer != null){
  32.                         btSocketServer.interrupt();
  33.                 }
  34.                 this.btSocketServer = null;
  35.                
  36.                 try {
  37.                         btSocketServer = new BluetoothSocketServer<BluetoothSocketConnectionClientConnector>(BLUETOOTH_UUID, new MouseGameBluetoothClientConnectorListener()) {
  38.  
  39.                
  40.                                 @Override
  41.                                 protected BluetoothSocketConnectionClientConnector newClientConnector(
  42.                                                 BluetoothSocketConnection pBluetoothSocketConnection)
  43.                                                 throws IOException {
  44.                                        
  45.                                         BluetoothSocketConnectionClientConnector lRet = null;
  46.                                        
  47.                                         try {
  48.                                                 lRet = new BluetoothSocketConnectionClientConnector(pBluetoothSocketConnection);
  49.                                                
  50.                                                 // register ourselves to handle messages from clients
  51.                                                 lRet.registerClientMessage(MouseGameFlags.FLAG_MESSAGE_SERVER_MOVE_CRITTER, MoveCritterClientMessage.class);
  52.                                                 lRet.registerClientMessageHandler(MouseGameFlags.FLAG_MESSAGE_SERVER_MOVE_CRITTER, MouseGameActivity.this);
  53.                                                                                
  54.                                                 lRet.registerClientMessage(MouseGameFlags.FLAG_MESSAGE_REGISTER_CONTROLLER, RegisterControllerClientMessage.class);
  55.                                                 lRet.registerClientMessageHandler(MouseGameFlags.FLAG_MESSAGE_REGISTER_CONTROLLER, MouseGameActivity.this);
  56.  
  57.                                         } catch(BluetoothException e){
  58.                                                 Debug.e("Error creating bluetooth controller socket", e);
  59.  
  60.                                         }
  61.                                        
  62.                                        
  63.                                         return lRet;
  64.                                 }
  65.                                
  66.                                
  67.                         };
  68.                 } catch(BluetoothException e){
  69.                         Debug.e("Error creating bluetooth controller socket", e);
  70.                 }
  71.                
  72.                 if(this.btSocketServer != null) {
  73.                         this.btSocketServer.start();
  74.                 }
  75.  
  76.        
  77.         }
  78.  
  79.  
  80.  
Parsed in 0.038 seconds, using GeSHi 1.0.8.4


On the client side I connect in the onResume method, and disconnect in the onPause method like this:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.         @Override
  2.         protected void onPause() {
  3.                 if(this.serverConnector != null) {
  4.                         this.serverConnector.interrupt();
  5.                 }
  6.                
  7.                 super.onPause();
  8.         }
  9.        
  10.         @Override
  11.         protected void onResume(){
  12.  
  13.                 // connect to the server and start a new connector thread
  14.                 initClient();
  15.                 updateServerStatusIndicator();
  16.  
  17.                 super.onResume();
  18.                
  19.         }
  20.  
  21.         private boolean initClient(){
  22.                
  23.                 if(serverConnector != null){
  24.                         serverConnector.interrupt();
  25.                         serverConnector = null;
  26.                 }
  27.                 try {
  28.                        
  29.                         BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
  30.                         Set<BluetoothDevice> bondedDevices = bta.getBondedDevices();
  31.                         BluetoothSocket lSocket = null;
  32.                        
  33.                         Iterator<BluetoothDevice> bondedDevIter = bondedDevices.iterator();
  34.                         while(bondedDevIter.hasNext()){
  35.                                 BluetoothDevice lDev = bondedDevIter.next();
  36.                                
  37.                                 lSocket = lDev.createRfcommSocketToServiceRecord(UUID.fromString(BLUETOOTH_UUID));
  38.                                
  39.                                 try {
  40.                                         if(lSocket != null) {
  41.                                                
  42.                                                 // try to connect to the remote bt device...
  43.                                                 bta.cancelDiscovery();
  44.                                                 lSocket.connect();
  45.                                                
  46.                                                 this.serverConnector = new BluetoothSocketConnectionServerConnector(new BluetoothSocketConnection(lSocket), new GameServerConnectorListener());
  47.                                                
  48.                                                 this.serverConnector.start();
  49.  
  50.                                                 // register ourselves as controlling a particular mouse!
  51.                                                 this.serverConnector.sendClientMessage(new RegisterControllerClientMessage(boundCritterId));
  52.                                                
  53.                                                 break;
  54.                                         }
  55.  
  56.                                 } catch(Throwable t){
  57.                                         Debug.d("  ---> skipping bt socket: "+lSocket.getRemoteDevice().getName());
  58.                                 }
  59.                         }
  60.                        
  61.                        
  62.                         updateServerStatusIndicator();
  63.                        
  64.                 } catch (final Throwable t) {
  65.                         Debug.e(t);
  66.                 }
  67.                
  68.                 if(this.serverConnector != null) {
  69.                         return true;
  70.                 }
  71.  
  72.                 return false;
  73.         }
  74.  
  75.  
  76.  
Parsed in 0.037 seconds, using GeSHi 1.0.8.4


New connections fire onConnected on the server side just fine, but when I disconnect on the client side, the server's onDisconnected never fires. Anyone have any ideas?
keyesdav
 
Posts: 6
Joined: Wed May 18, 2011 6:33 pm

Return to Multiplayer

Who is online

Users browsing this forum: No registered users and 2 guests