Pessoal, estou desenvolvendo um programa com base no BlueChat(programa de conversa que usa BlueTooth) . O meu problema é que tem um momento que os celulares clientes enviam mensagens ao mesmo tempo, ou seja, acessam o servidor ao mesmo tempo.
Eu tentei usar synchronized, mas só piorou a situação, quando tiro o synchronized, this.wait(), etc , funciona menos pior , somente no final que dá problema.
O pedaço do código segue abaixo : (Esse código faz parte do servidor,é ele que faz a função de leitura do que os clientes escrevem)
synchronized(this)
{
if( cont == 0 || nomeGarçom.equals(endpt.remoteName) )
{
arrayStringPedido[cont] = datain.readUTF();
nomeGarçom=endpt.remoteName;
log("read in SIGNAL_SEND_PEDIDO name "+arrayStringPedido[cont]+" from "+endpt.remoteName);
cont++;
}
else
{
try
{
log(endpt.remoteName+" (NA ESPERA -- NA ESPERA -- NA ESPERA -- NA ESPERA -- NA ESPERA -- NA ESPERA) PARA ENVIO DE MEU PEDIDO");
this.wait();
}
catch(InterruptedException e)
{}
}
}
}else if ( signal == NetLayer.SIGNAL_TERMINATE_SEND_PEDIDO )
{
datain.readUTF();
PedidoRecordStore objPedidoRecordStore = new PedidoRecordStore ();
// update the message screen to reflect the entered message.
// create a dummy packet object to hold the entered message.
ChatPacket packet = new ChatPacket( NetLayer.SIGNAL_TERMINATE_SEND_PEDIDO, endpt.remoteName, "Pedido: "+(objPedidoRecordStore.buscaNumRecords()+1)+" acaba de chegar" );
messageui.msgs.addElement( packet );
messageui.repaint();
log(" NetLayer.SIGNAL_TERMINATE_SEND_PEDIDO -- NetLayer.SIGNAL_TERMINATE_SEND_PEDIDO (CONT VALUE:) "+cont);
cont=0;
objPedidoRecordStore.salvaPedido( arrayStringPedido );
synchronized(this)
{
this.notifyAll();
}
}
Pessoal, vou detalhar mais:
Eu quero fazer que o servidor seje bloqueado quando um cliente estiver usando ele. Eu tentei , mas acho que está acontecendo o seguinte: Quando o primeiro cliente manda mensagens ,e outro cliente manda logo depois (enquanto o primeiro ainda está mandando)o servidor é bloqueado ( this.wait() ) e aí dá problema pros dois clientes … Acaba que dá maior bagunça e eu não consigo o sucesso …
Quando eu tiro o synchronized, this.wait(), notifyAll() funciona bem (acho que porque cada cliente cria uma instância própria do servidor pra ele, então funciona bem). Mas, no final, quando checo no servidor, vejo que perdeu o sincronismo e afeta no funcionamento do uso de uns RecordStores que eu tenho …
Pessoal, preciso muito da ajuda de alguém … Se quiserem (acho que vai ser melhor) posso mandar o projeto pra vcs entenderem melhor o que estou dizendo. Mas, se alguém já teve a mesma experiência e conseguiu a solução , por favor , me ajude , tb.
Obrigado,
Raphael.
[size=“11”]
[color=“red”]
- Editado: Lembre-se de usar BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários - Matheus[/color][/size] :joia: