Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NPE ao receber infos da mesa no cliente Bluetooth #170

Open
Tracked by #173
chesterbr opened this issue Jul 15, 2023 · 1 comment
Open
Tracked by #173

NPE ao receber infos da mesa no cliente Bluetooth #170

chesterbr opened this issue Jul 15, 2023 · 1 comment
Labels

Comments

@chesterbr
Copy link
Owner

Na 2.5.3, essa exceção aparece de vez em quando:

Exception java.lang.ArrayIndexOutOfBoundsException: length=3; index=-1
  at me.chester.minitruco.android.multiplayer.bluetooth.ServidorBluetoothActivity.verificaVersaoCompativel (ServidorBluetoothActivity.java:188)
  at me.chester.minitruco.android.multiplayer.bluetooth.ServidorBluetoothActivity.run (ServidorBluetoothActivity.java:162)
  at java.lang.Thread.run (Thread.java:1012)

Tudo indica que, de alguma forma, o split dos parâmetros está falhando nessa linha:

private void exibeMesaForaDoJogo(String parametros) {
if (partida != null) {
partida.abandona(0);
partida = null;
}
// Exibe as informações recebidas fora do jogo
String[] tokens = parametros.split(" ");
posJogador = Integer.parseInt(tokens[2]);

Sanitização

Isso só se explicaria se tivesse um espaço em algum deles - o que é sanitizado no servidor:

Aqui é onde o servidor garante que seu próprio nome não tem espaços:

private synchronized int encaixaEmUmSlot(BluetoothSocket socket)
throws IOException {
for (int i = 0; i <= 2; i++) {
if (connClientes[i] == null) {
connClientes[i] = socket;
outClientes[i] = socket.getOutputStream();
apelidos[i + 1] = socket.getRemoteDevice().getName()
.replace(' ', '_');

e aqui ele garante que os nomes dos clientes também não tem:

private void inicializaDisplay() {
apelidos[0] = btAdapter.getName().replace(" ","_");

@chesterbr chesterbr added the bug label Jul 15, 2023
@chesterbr
Copy link
Owner Author

Esses são alguns celulares em que o problema ocorreu (tipicamente, mas não sempre, o nome bluetooth default é o nome do celular):

samsung a13
Redmi spes
motorola hawaiip
xiaomi ginkgo
samsung a31
xiaomi lavender
Infinix Infinix-X6812B
POCO vayu
Redmi joyeuse
motorola caprip
motorola java
motorola nairo
samsung a12s
samsung m31
Redmi miel
Redmi tapas
motorola astro
motorola capri
motorola hawao
motorola malta
motorola rhode
motorola sanders_nt
samsung a10s
samsung a22
samsung a53x
samsung m53x
samsung r1q

Não parece ter um padrão de nenhum tipo aí, deve ser algum nome customizado que causa o problema

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant