public override void Run() { Name = $"AcceptThread_{socketType}"; BluetoothSocket socket = null; while (service.GetState() != STATE_CONNECTED) { try { socket = serverSocket.Accept(); } catch (Java.IO.IOException e) { Log.Error(TAG, "accept() failed", e); break; } if (socket != null) { lock (this) { switch (service.GetState()) { case STATE_LISTEN: case STATE_CONNECTING: // Situation normal. Start the connected thread. service.Connected(socket, socket.RemoteDevice, socketType); break; case STATE_NONE: case STATE_CONNECTED: try { socket.Close(); } catch (Java.IO.IOException e) { Log.Error(TAG, "Could not close unwanted socket", e); } break; } } } } }
public override void Run() { Name = $"ConnectThread_{socketType}"; // Always cancel discovery because it will slow down connection service.btAdapter.CancelDiscovery(); // Make a connection to the BluetoothSocket try { // This is a blocking call and will only return on a // successful connection or an exception socket.Connect(); } catch (Java.IO.IOException e) { // Close the socket try { socket.Close(); } catch (Java.IO.IOException e2) { Log.Error(TAG, $"unable to close() {socketType} socket during connection failure.", e2); } // Start the service over to restart listening mode service.ConnectionFailed(); return; } // Reset the ConnectThread because we're done lock (this) { service.connectThread = null; } // Start the connected thread service.Connected(socket, device, socketType); }